#define SER Serial2 #define N_BTN 6 int BTN_CURR[N_BTN] = {HIGH,HIGH,HIGH,HIGH,HIGH,HIGH}; int BTN_PREV[N_BTN] = {HIGH,HIGH,HIGH,HIGH,HIGH,HIGH}; const int BTNS[N_BTN] = {7,6,5,16,22,23}; // button pin numbers int mode = 0; void btn_flip(bool dir, int idx){ Serial.print("(btn "); Serial.print(idx); Serial.print(" state "); Serial.print(dir); Serial.println(")"); if (idx == 5){ if (dir){ mode = !mode; Serial.print("(cmode "); Serial.print(mode); Serial.println(")"); digitalWrite(3,LOW); }else{ digitalWrite(3,HIGH); } }else{ if (dir){ int cmd = mode*5+idx; Serial.print("(cmd "); Serial.print(cmd); Serial.println(")"); SER.print(cmd); digitalWrite(3,LOW); }else{ digitalWrite(3,HIGH); } } } void btn_update(){ for (int i = 0; i < N_BTN; i++){ BTN_CURR[i] = digitalRead(BTNS[i]); if (BTN_CURR[i] == LOW && BTN_PREV[i] == HIGH){ btn_flip(true,i); delay(200); } if (BTN_CURR[i] == HIGH && BTN_PREV[i] == LOW){ btn_flip(false,i); delay(200); } BTN_PREV[i] = BTN_CURR[i]; } } void setup() { pinMode(2,OUTPUT); pinMode(3,OUTPUT); digitalWrite(2,HIGH); for (int i = 0; i < N_BTN; i++) pinMode(BTNS[i], INPUT); Serial.begin(9600); SER.begin(9600); digitalWrite(3,HIGH); Serial.println("setup."); } char buff[256] = {0}; int n_buff = 0; void loop() { btn_update(); while (Serial.available() > 0){ char b = Serial.read(); char bb[2] = {0}; bb[0] = b; SER.print(bb); Serial.print(bb); } while (SER.available() > 0) { char b = SER.read(); if (b == '\n'){ if (buff[0] == '$'){ if (buff[1] == 'G'){ if (buff[2] == 'g'){ digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); delay(300); digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); delay(300); digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); }else{ digitalWrite(2,HIGH); } }else if (buff[1] == 'g'){ if (buff[2] == 'G'){ digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); delay(300); digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); delay(300); digitalWrite(2,HIGH); delay(300); digitalWrite(2,LOW); delay(300); digitalWrite(2,HIGH); }else{ digitalWrite(2,LOW); } } } buff[n_buff] = 0; Serial.println(buff); n_buff = 0; }else{ buff[n_buff++] = b; } } }