PHP код:
#define encoder0PinC 3
#define ledPin 13 // цифровой выход светодиода
#define debounce 100 // ms время антидребезга при нажатии и отпускании кнопки
#define holdTime 500 // ms время удержания: как долго ждать срабатывания днинного нажатия
// Контакты джойстика
#define joy0PinA 22
#define joy0PinB 23
#define joy0PinC 24
#define joy0PinD 25
#define joy0PinE 26
#define joy0PinF 27
#define joy0PinG 28
#define joy0PinH 29
// Переменные кнопки
byte bytes[4];
int buttonVal = 0; // значение, считанное с кнопки
int buttonLast = 0; // буферное значение предыдущего состояния кнопки
long btnDnTime; // время, сколько кнопка была нажата
long btnUpTime; // время отпускания кнопки
boolean ignoreUp = false; // игнорировать отпускание кнопки,
//потому что сработало длительное нажатие
// Переменные энкодера
int encoder0PinA = 2;
int encoder0PinB = 4;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;
// Светодиод
boolean ledVal = false; // состояние LED
//=================================================
void setup()
{
// входы энкодера
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH );
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH );
// вход кнопки энкодера
pinMode(encoder0PinC, INPUT);
digitalWrite(encoder0PinC, HIGH );
// входы джойстика
pinMode(joy0PinA, INPUT);
digitalWrite(joy0PinA, HIGH );
pinMode(joy0PinB, INPUT);
digitalWrite(joy0PinB, HIGH );
pinMode(joy0PinC, INPUT);
digitalWrite(joy0PinC, HIGH );
pinMode(joy0PinD, INPUT);
digitalWrite(joy0PinD, HIGH );
pinMode(joy0PinE, INPUT);
digitalWrite(joy0PinE, HIGH );
pinMode(joy0PinF, INPUT);
digitalWrite(joy0PinF, HIGH );
pinMode(joy0PinG, INPUT);
digitalWrite(joy0PinG, HIGH );
pinMode(joy0PinH, INPUT);
digitalWrite(joy0PinH, HIGH );
// выход светодиода
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledVal);
Serial.begin(115200);
}
//=================================================
void loop()
{
// Энкодер
n = digitalRead(encoder0PinA);
if ((encoder0PinALast == LOW) && (n == HIGH)) {
if (digitalRead(encoder0PinB) == LOW) {
bytes[0] = 0xEE;
bytes[1] = 0;
bytes[2] = encoder0PinA;
bytes[3] = 1;
Serial.write( bytes,4); // EE000201
} else {
bytes[0] = 0xEE;
bytes[1] = 0;
bytes[2] = encoder0PinB;
bytes[3] = 1;
Serial.write( bytes,4); // EE000401
}
}
encoder0PinALast = n;
// \\ Энкодер
buttonVal = digitalRead(encoder0PinC); // прочитать состояние кнопки
// Проверить нажатие кнопки и записать длительность нажатия
if (buttonVal == LOW && buttonLast == HIGH && (millis() - btnUpTime) > long(debounce))
{
btnDnTime = millis();
}
// Проверить, отпущена ли кнопка и записать длительность отжатия
if (buttonVal == HIGH && buttonLast == LOW && (millis() - btnDnTime) > long(debounce))
{
if (ignoreUp == false) {
ledVal = !ledVal;
digitalWrite(ledPin, ledVal);
delay(200);
digitalWrite(13,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = encoder0PinC; bytes[3] = 1;
Serial.write( bytes,4); // EE000301
}
else { ignoreUp = false;
btnUpTime = millis();
}
}
// Проверить, нажата ли кнопка дольше времени удержания
if (buttonVal == LOW && buttonLast == LOW && (millis() - btnDnTime) > long(holdTime))
{
ledVal = !ledVal;
digitalWrite(ledPin, ledVal);
delay(200);
digitalWrite(13,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = encoder0PinC; bytes[3] = 2;
Serial.write( bytes,4); // EE000302
ignoreUp = true;
btnDnTime = millis();
}
buttonLast = buttonVal;
// Джойстик //
//////////////
if (digitalRead(joy0PinA)==LOW) {//влево
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinA; bytes[3] = 0;
Serial.write( bytes,4); // EE001900
}
if (digitalRead(joy0PinB)==LOW) {
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinB; bytes[3] = 0;
Serial.write( bytes,4); // EE001800
}
if (digitalRead(joy0PinC)==LOW) {
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinC; bytes[3] = 0;
Serial.write( bytes,4); // EE001700
}
if (digitalRead(joy0PinD)==LOW) {//
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinD; bytes[3] = 0;
Serial.write( bytes,4); // EE001600
}
if (digitalRead(joy0PinE)==LOW) {//
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinE; bytes[3] = 0;
Serial.write( bytes,4); // EE001C00
}
if (digitalRead(joy0PinF)==LOW) {//отмена
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinF; bytes[3] = 0;
Serial.write( bytes,4); // EE001B00
}
if (digitalRead(joy0PinG)==LOW) {//
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinG; bytes[3] = 0;
Serial.write( bytes,4); // EE001A00
}
if (digitalRead(joy0PinH)==LOW) {//вправо
digitalWrite(ledPin,HIGH);//включаем светодиод
delay(200);
digitalWrite(ledPin,LOW);//выключаем
bytes[0] = 0xEE; bytes[1] = 0; bytes[2] = joy0PinH; bytes[3] = 0;
Serial.write( bytes,4); // EE001D00
}
}