diff --git a/README.md b/README.md new file mode 100644 index 0000000..84fbcf6 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +Arduino Scetch for MicroController Test Board with 4-Digit-Display and one button + +![mctestboard](https://raw.githubusercontent.com/faustech/mctestboard/master/mctestboard_bb.jpg) \ No newline at end of file diff --git a/mctestboard.fzz b/mctestboard.fzz new file mode 100644 index 0000000..9edf608 Binary files /dev/null and b/mctestboard.fzz differ diff --git a/mctestboard.ino b/mctestboard.ino new file mode 100644 index 0000000..1e68595 --- /dev/null +++ b/mctestboard.ino @@ -0,0 +1,117 @@ +// MicroController Test Board with 4-Digit-Display and one button +// https://github.com/faustech/mctestboard +// License: MIT License + +#include +#include +#include +#include // Extended TM1637 library https://github.com/bremme/arduino-tm1637 + +const byte PIN_CLK = 2; // Define CLK pin (for 4-Digit Display) +const byte PIN_DIO = 3; // Define DIO pin (for 4-Digit Display) +const byte buttonPin = 4; // Analog PIN Button (a 10K resistor is necessary) +const byte led = 13; // Default onboard LED +long buttonPressed = 0; // Button (PIN4) ms pressed counter +int buttonView = 0; // Button (PIN4) viewing state +long previousButtonMillis = 0; // Button (PIN4) previous press counter + +long buttonInterval = 10000; // Interval for highlighting 4-Digit Display after pressing button +long buttonLongPress = 2500; // Interval for long press button action +long buttonCheck = 200; // Interval for checking button state +long ledPulse = 1000; // Interval for LED blinking pulse +bool displayOn = false; // Boolian for store display power status + +// Threads: +Thread ledThread = Thread(); // Create thread for LED pulse indication +Thread pressButtonThread = Thread(); // Create thread for button state checking + +SevenSegmentExtended display(PIN_CLK, PIN_DIO); + +void setup() { + Serial.begin(9600); // initializes the Serial connection @ 9600 baud for debug + serStr("starting setup..."); + + pinMode(buttonPin, INPUT); + display.begin(); // Initializes the display + displayOn = true; + display.setBacklight(100); // Set the brightness to 100 % + display.print("INIT-INIT"); // Display INITx2 on the display + + // LED blinking thread: + ledThread.onRun(ledBlink); + ledThread.setInterval(ledPulse); // Interval for LED blinking + // Button state cheking thread: + pressButtonThread.onRun(pressButton); + pressButtonThread.setInterval(buttonCheck); // Interval for checking button pressing + + display.off(); + displayOn = false; + serStr("...setup finished"); +} + +void loop() { + // Threads init: + if (ledThread.shouldRun()) + ledThread.run(); + if (pressButtonThread.shouldRun()) + pressButtonThread.run(); +} + +// LED pulse blinking thread +void ledBlink() { + static bool ledStatus = false; // LED status bool + ledStatus = !ledStatus; // Invert LED state + digitalWrite(led, ledStatus); // Activate LED state +} + +// Check button pressing thread +void pressButton() { + + // Display off after buttonInterval ms slack + unsigned long currentMillis = millis(); + if (currentMillis - previousButtonMillis > buttonInterval) { + previousButtonMillis = currentMillis; + if (displayOn == true) { + display.off(); + displayOn = false; + serStr("display off after slack"); + } + } + + if (digitalRead(buttonPin) == HIGH) { + serStr("button pressed"); + buttonPressed = buttonPressed + 200; + if (buttonPressed > buttonLongPress) { + buttonPressed = 0; + longPress(); + } + previousButtonMillis = currentMillis; + display.on(); + displayOn = true; + if (buttonView == 0) { + display.printTime(hour(), minute(), true); + serStr("time showed"); + } else if (buttonView == 1) { + display.print("----"); + serStr("something was showed"); + } + if (buttonView < 1) buttonView += 1; + else buttonView = 0; + } else { + buttonPressed = 0; + } +} + +// Send string to serial monitor with millis() counter +void serStr(const char* serString) { + long currentTime = millis(); + String space = " "; + String stringToPrint = currentTime + space + serString; + Serial.println(stringToPrint); +} + +// Send string to serial monitor with millis() counter +void longPress() { + serStr("long button pressed"); + display.print("button was pressed long time"); +} \ No newline at end of file diff --git a/mctestboard_bb.jpg b/mctestboard_bb.jpg new file mode 100644 index 0000000..b04ceff Binary files /dev/null and b/mctestboard_bb.jpg differ