1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "all-headers.h"
- // Bit operation references
- const uint32_t bufferEmpty(0);
- const uint32_t bufferFull(~ bufferEmpty);
- // Button variables
- uint32_t antiBlinkBuffer[5];
- bool buttonReleased[5];
- bool actionDone[5];
- DigitalPort LED[5];
- DigitalPort BUTTON[5];
- // Counter
- uint32_t counter(0);
- void setup (USER_MODE) {
- // Start
- digitalWrite(L0_LED, true);
- // Init buttons and LEDs
- BUTTON[0] = P0_PUSH_BUTTON;
- BUTTON[1] = P1_PUSH_BUTTON;
- BUTTON[2] = P2_PUSH_BUTTON;
- BUTTON[3] = P3_PUSH_BUTTON;
- BUTTON[4] = P4_PUSH_BUTTON;
- LED[0] = L0_LED;
- LED[1] = L1_LED;
- LED[2] = L2_LED;
- LED[3] = L3_LED;
- LED[4] = L4_LED;
- for (unsigned int i(0); i < 5; i++) {
- antiBlinkBuffer[i] = 0;
- buttonReleased[i] = digitalRead(BUTTON[i]);
- actionDone[i] = false;
- }
- // Init LCD
- printString(MODE_ "Welcome Jovian");
- }
- void loop (USER_MODE) {
- // Shift bits
- for (unsigned int i(0); i < 5; i++) {
- antiBlinkBuffer[i] <<= 1;
- if (digitalRead(BUTTON[i]))
- antiBlinkBuffer[i] |= 0x01;
- // Command leds with buttons
- if (antiBlinkBuffer[i] == bufferEmpty) {
- buttonReleased[i] = false;
- }
- else if (antiBlinkBuffer[i] == bufferFull) {
- buttonReleased[i] = true;
- actionDone[i] = false;
- }
- if (!buttonReleased[i] && !actionDone[i]) {
- digitalToggle(LED[i]);
- actionDone[i] = true;
- counter ++;
- counter %= 20;
- // Show action on LCD
- gotoLineColumn(MODE_ 1, 13 - i);
- printChar(MODE_ '1');
- gotoLineColumn(MODE_ 2, 12);
- printUnsigned(MODE_ counter);
- }
- }
- }
|