int db3 = 1; int db5 = 0; int db6 = 1; int db7 = 0; int cb2; int cb1; int cb4; int frame[11]; int data[4][4] = { {0,0,1,0}, {0,1,1,0}, {1,0,1,0}, {1,1,0,1}, }; int state=0; int duration=500; int buttonPin = 2; int buttonPin2 = 4; int buttonPin3 = 6; int buttonPin4 = 7; int buttonValue; int buttonValue2; int buttonValue3; int buttonValue4; int m= -1; void setup() { pinMode(13, OUTPUT); pinMode(8, OUTPUT); digitalWrite(8, LOW); pinMode(buttonPin , INPUT); pinMode(buttonPin2, INPUT); pinMode (buttonPin3 , INPUT); pinMode (buttonPin4 ,INPUT); } void loop() { if ( m != -1) { switch (state) { case 0: state = 1; break; case 1: digitalWrite(8, HIGH); delay(duration*5); state = 2; break; case 2: findCB(m); createFRAME(m); sendFRAME(); digitalWrite (8, LOW); state=0; m=-1; break; } } buttonValue = digitalRead (buttonPin); if (buttonValue == HIGH) { digitalWrite (13,HIGH); m= 0; } { buttonValue2 = digitalRead (buttonPin2); if (buttonValue2 == HIGH) m= 1; buttonValue3 = digitalRead (buttonPin3); if (buttonValue3 == HIGH) m=2; buttonValue4 = digitalRead (buttonPin4); if (buttonValue4 == HIGH) m=3; } } void findCB(int row) { int count = 0; if (data[row][0] == 1) count++; if (data[row][1] == 1) count++; if (data[row][3] == 1) count++; if (count == 0 || count == 2) cb1 = 0; else cb1 = 1; count = 0; if (data[row][0] == 1) count++; if (data[row][2] == 1) count++; if (data[row][3] == 1) count++; if (count == 0 || count == 2) cb2 = 0; else cb2 = 1; count=0; if (data[row][1]== 1) count++; if (data[row][2] == 1) count++; if (data[row][3] == 1) count++; if (count == 0 || count == 2) cb4 = 0; else cb4 = 1; } void createFRAME(int row) { frame[0]= 0; // preample bits 0101 frame[1]= 1; frame[2]= 0; frame[3]= 1; frame[4]= cb1; // control and data bits frame[5]= cb2; frame[6]= data[row][0]; frame[7]= cb4; frame[8]= data[row][1]; frame[9]= data[row][2]; frame[10]= data[row][3]; } void sendFRAME () { for (int i=0; i<= 10; i++) { digitalWrite (8, frame [i]); delay (duration); } }