int data[4] = {0,0,0,0}; int frame[7] = {0,0,0,0,0,0,0}; int i = 0; int state = 5; int photoPin = A2; int pv; //τιμη που διαβάζεται από την φωτοαντίσταση int b; // bit που λήφθηκε (προκύπτει από την pv) int count = 0; void setup() { Serial.begin(9600); } void loop() { pv = analogRead (photoPin); //Serial.println(pv); if (pv <= 150) b = 0; else b = 1; switch(state){ case 0: if (b==0) { Serial.println(b); state = 1; } break; case 1: //Serial.println("state 1"); if(b == 1) { Serial.println(b); state = 2; } else state = 0; break; case 2: //Serial.println("state 2"); if(b == 0) { Serial.println(b); state = 3; } else state = 0; break; case 3: //Serial.println("state 3"); if(b == 1) { Serial.println(b); state = 4; i = 0;} else state = 0; break; case 4: Serial.println(b); frame[i] = b; i++; if ( i == 7 ) { i=0; boolean rc = checkParity(); if (rc == false ) state =5; //0; else { extractData(); state = 5; //0; } } break; case 5: if (b==1) { count++; if (count >= 3) state = 0; } else count = 0; break; } delay(500); } boolean checkParity() { int s1 = frame[0] + frame[2] + frame[4] + frame[6]; int s2 = frame[1] + frame[2] + frame[5] + frame[6]; int s3 = frame[3] + frame[4] + frame[5] + frame[6]; if (s1 %2 ==0 && s2 %2 ==0 && s3 %2 ==0 ) return true; else return false; } void extractData() { data[0] = frame[2]; data[1] = frame[4]; data[2] = frame[5]; data[3] = frame[6]; }