PHP код:
#define encoder0PinA 2
#define encoder0PinB 3
#define encoder1PinA 4
#define encoder1PinB 5
byte bytes[2]={0,20} ;
void setup()
{
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinA, INPUT);
digitalWrite(encoder1PinA, HIGH); // подключить подтягивающий резистор
pinMode(encoder1PinB, INPUT);
digitalWrite(encoder1PinB, HIGH); // подключить подтягивающий резистор
//10 кнопок. 2 на энкодере, 8 на панели.
pinMode(7, INPUT);
digitalWrite(7, 1);
pinMode(8, INPUT);
digitalWrite(8, 1);
pinMode(9, INPUT);
digitalWrite(9, 1);
pinMode(10, INPUT);
digitalWrite(10, 1);
pinMode(11, INPUT);
digitalWrite(11, 1);
pinMode(12, INPUT);
digitalWrite(12, 1);
pinMode(14, INPUT);
digitalWrite(14, 1);
pinMode(15, INPUT);
digitalWrite(15, 1);
pinMode(16, INPUT);
digitalWrite(16, 1);
pinMode(17, INPUT);
digitalWrite(17, 1);
attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание interrupt 0 на pin 2
attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание interrupt 0 на pin 3
Serial.begin (115200);
}
unsigned graydecode(unsigned gray)
{
unsigned bin;
for (bin = 0; gray; gray >>= 1)
bin ^= gray;
return bin;
}
void loop()
{
if(digitalRead(7)==LOW)
{
bytes[1]=7;
Serial.write( bytes,2);
while(digitalRead(7)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(8)==LOW)
{
bytes[1]=8;
Serial.write( bytes,2);
while(digitalRead(8)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(9)==LOW)
{
bytes[1]=9;
Serial.write( bytes,2);
while(digitalRead(9)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(10)==LOW)
{
bytes[1]=10;
Serial.write( bytes,2);
while(digitalRead(10)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(11)==LOW)
{
bytes[1]=11;
Serial.write( bytes,2);
while(digitalRead(11)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(12)==LOW)
{
bytes[1]=12;
Serial.write( bytes,2);
while(digitalRead(12)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(14)==LOW)
{
bytes[1]=14;
Serial.write( bytes,2);
while(digitalRead(14)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(15)==LOW)
{
bytes[1]=15;
Serial.write( bytes,2);
while(digitalRead(15)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(16)==LOW)
{
bytes[1]=16;
Serial.write( bytes,2);
while(digitalRead(16)==LOW){delay(50);}
bytes[1]=20;
}
if(digitalRead(17)==LOW)
{
bytes[1]=17;
Serial.write( bytes,2);
while(digitalRead(17)==LOW){delay(50);}
bytes[1]=20;
}
static uint8_t tmp_code = 0;
uint8_t gray_code = digitalRead(encoder1PinA) | (digitalRead(encoder1PinB) << 1),
code = graydecode(gray_code);
if (code == 0)
{
if (tmp_code == 3)
{
bytes[0]=3;
bytes[1]=20;
Serial.write( bytes,2);
bytes[0]=0;
} else if (tmp_code == 1)
{
bytes[0]=4;
bytes[1]=20;
Serial.write( bytes,2);
bytes[0]=0;
}
}
tmp_code = code;
delay(2);
}
// обработка прерывания
void doEncoderA()
{
if(digitalRead(encoder0PinB)==HIGH){bytes[0]=1;}else{bytes[0]=2;}
Serial.write( bytes,2);
bytes[0]=0;
}
// обработка прерывания
void doEncoderB()
{
if(digitalRead(encoder0PinA)==HIGH){bytes[0]=2;}else{bytes[0]=1;}
Serial.write( bytes,2);
bytes[0]=0;
}