постоянно выдаёт ошибку sketch_mar21b.ino: In function 'int ReadKey(int)': sketch_mar21b.ino:154:15: error: 'ButtonT5Up_HIGH' was not declared in this scope sketch_mar21b.ino:154:42: error: 'ButtonT5Up_LOW' was not declared in this scope sketch_mar21b.ino:155:15: error: 'ButtonT5Down_HIGH' was not declared in this scope sketch_mar21b.ino:155:44: error: 'ButtonT5Down_LOW' was not declared in this scope
Код (Text): #include <EEPROM2.h> #include <LiquidCrystal.h> // RS, E, D4, D5, D6, D7 LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //8, 9, 4, 5, 6, 7 #include <TimerOne.h> //переменная для текущего значения температуры // переменная для заданного значения температуры float temp1=0; int setTmp1=0; float temp2=0; int setTmp2=0; float temp3=0; int setTmp3=0; float temp4=0; int setTmp4=0; float temp5=0; int setTmp5=0; #define RELAY1_PIN 10 //Реле подключено к пину D53 boolean relayStatus1=LOW; //Объявим переменную для хранения состояния реле #define RELAY2_PIN 11 //Реле подключено к пину D52 boolean relayStatus2=LOW; //Объявим переменную для хранения состояния реле #define RELAY3_PIN 12 //Реле подключено к пину D51 boolean relayStatus3=LOW; //Объявим переменную для хранения состояния реле #define RELAY4_PIN 13 //Реле подключено к пину D50 boolean relayStatus4=LOW; //Объявим переменную для хранения состояния реле #define RELAY5_PIN 14 //Реле подключено к пину D49 boolean relayStatus5=LOW; //Объявим переменную для хранения состояния реле //Аналоговая клавиатура подключена к пину A8 #define KEYPAD_PIN A1 //Определим значения на аналоговом входе для клавиатуры #define ButtonT1Up_LOW 670 #define ButtonT1Up_HIGH 698 #define ButtonT1Down_LOW 730 #define ButtonT1Down_HIGH 770 #define ButtonT2Up_LOW 780 #define ButtonT2Up_HIGH 825 #define ButtonT2Down_LOW 830 #define ButtonT2Down_HIGH 895 #define ButtonSelect_LOW 896 #define ButtonSelect_HIGH 919 #define ButtonT3Up_LOW 921 #define ButtonT3Up_HIGH 950 #define ButtonT3Down_LOW 951 #define ButtonT3Down_HIGH 960 #define ButtonT4Up_LOW 961 #define ButtonT4Up_HIGH 977 #define ButtonT4Down_LOW 978 #define ButtonT4Down_HIGH 1000 #define ButtonT4Down_LOW 1020 #define ButtonT4Down_HIGH 1050 void setup() { //Настроим пин для управления реле pinMode(RELAY1_PIN,OUTPUT); digitalWrite(RELAY1_PIN,LOW); pinMode(RELAY2_PIN,OUTPUT); digitalWrite(RELAY2_PIN,LOW); pinMode(RELAY3_PIN,OUTPUT); digitalWrite(RELAY3_PIN,LOW); pinMode(RELAY4_PIN,OUTPUT); digitalWrite(RELAY4_PIN,LOW); pinMode(RELAY5_PIN,OUTPUT); digitalWrite(RELAY5_PIN,LOW); setTmp1=EEPROM_read_byte(0); setTmp2=EEPROM_read_byte(1); setTmp3=EEPROM_read_byte(2); setTmp4=EEPROM_read_byte(3); setTmp5=EEPROM_read_byte(4); //Выведем на дисплей стартовое сообщение на 2 секунды lcd.begin(16, 2 ); lcd.setCursor(0, 0); lcd.print(" KOMETA"); lcd.setCursor(0, 1); lcd.print(" v 1"); delay(3000); lcd.clear(); } double Thermister(int RawADC) { double Temp; double Temp1; // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula Temp = log(((10240000/RawADC) - 10000)); Temp = 1 / (0.00041594 + (0.000237835 * Temp) + (0.00000000485948 * Temp * Temp * Temp)); Temp = Temp - 273.15; // Convert Kelvin to Celcius return Temp; } //Определим функцию для опроса аналоговой клавиатуры //Функция опроса клавиатуры, принимает адрес пина, к которому подключена клавиатура, и возвращает код клавиши: // 1 - T1up // 2 - T1Down // 3 - LEFT // 4 - RIGHT // 5 - SELECT // 6 - Ok // 7 - T3up // 8 _ T3down // 9 - T4up // 10 - T5up // 11 - T5down int ReadKey(int keyPin) { int KeyNum=0; int KeyValue1=0; int KeyValue2=0; //Читаем в цикле аналоговый вход, для подавления дребезга и нестабильности читаем по два раза подряд, пока значения не будут равны. //Если значения равны 1023 – значит не была нажата ни одна клавиша. do { KeyValue1=analogRead(keyPin); KeyValue2=analogRead(keyPin); } while (KeyValue1==KeyValue2&&KeyValue2!=1300); //Интерпретируем полученное значение и определяем код нажатой клавиши if (KeyValue2<ButtonT1Up_HIGH&&KeyValue2>ButtonT1Up_LOW) {KeyNum=1;}//T1Up if (KeyValue2<ButtonT1Down_HIGH&&KeyValue2>ButtonT1Down_LOW) {KeyNum=2;}//T1Down if (KeyValue2<ButtonT2Up_HIGH&&KeyValue2>ButtonT2Up_LOW) {KeyNum=3;}//T2Up if (KeyValue2<ButtonT2Down_HIGH&&KeyValue2>ButtonT2Down_LOW) {KeyNum=4;}//T2Down if (KeyValue2<ButtonSelect_HIGH&&KeyValue2>ButtonSelect_LOW) {KeyNum=5;}//Select if (KeyValue2<ButtonT3Up_HIGH&&KeyValue2>ButtonT3Up_LOW) {KeyNum=6;}//T3up if (KeyValue2<ButtonT3Down_HIGH&&KeyValue2>ButtonT3Down_LOW) {KeyNum=7;}//T3Down if (KeyValue2<ButtonT4Up_HIGH&&KeyValue2>ButtonT4Up_LOW) {KeyNum=8;}//T4up if (KeyValue2<ButtonT4Down_HIGH&&KeyValue2>ButtonT4Down_LOW) {KeyNum=9;}//T4Down if (KeyValue2<ButtonT5Up_HIGH&&KeyValue2>ButtonT5Up_LOW) {KeyNum=10;}//T5up if (KeyValue2<ButtonT5Down_HIGH&&KeyValue2>ButtonT5Down_LOW) {KeyNum=11;}//T5Down //Возвращаем код нажатой клавиши return KeyNum; } /////////////////////////////////////////////////////////////////////////////////////////////////////////// //Определим процедуру редактирования заданной температуры //Вызывается по нажатию клавиши Select, отображает на дисплее заданную температуру и позволяет изменять ее клавишами Up и Down void setTemperature() { int keyCode=0; //выводим на дисплей заданное значение температуры lcd.begin(16,4); lcd.setCursor(0, 0); lcd.print("Set temp t1 "); lcd.print(setTmp1); lcd.setCursor(0, 1); lcd.print("Set temp t2 "); lcd.setCursor(13, 1); lcd.print(setTmp2); lcd.setCursor(0, 2); lcd.print("Set temp t3 "); lcd.setCursor(13, 2); lcd.print(setTmp3); lcd.setCursor(0, 3); lcd.print("Set temp t4 "); lcd.setCursor(13, 3); lcd.print(setTmp4); lcd.setCursor(0, 4); lcd.print("Set temp t5 "); lcd.setCursor(13, 4); lcd.print(setTmp5); //Опрашиваем клавиатуру, если нажата клавиша Up увеличиваем значение на 1, если Down – уменьшаем на 1 //Если нажаты клавиши Select или Right – цикл опроса прерывается //Задержки введены для борьбы с дребезгом, если клавиши срабатывают четко – можно уменьшить время задержек или вообще их убрать do { keyCode=ReadKey(KEYPAD_PIN); if (keyCode==1){setTmp1++;delay(50);lcd.setCursor(13, 0);lcd.print(setTmp1);lcd.print("* ");} if (keyCode==9){setTmp1--;delay(50);lcd.setCursor(13, 0);lcd.print(setTmp1);lcd.print("* ");} if (keyCode==2){setTmp2++;delay(50);lcd.setCursor(13, 1);lcd.print(setTmp2);lcd.print("* ");} if (keyCode==8){setTmp2--;delay(50);lcd.setCursor(13, 1);lcd.print(setTmp2);lcd.print("* ");} if (keyCode==3){setTmp3++;delay(50);lcd.setCursor(13, 2);lcd.print(setTmp3);lcd.print("* ");} if (keyCode==7){setTmp3--;delay(50);lcd.setCursor(13, 2);lcd.print(setTmp3);lcd.print("* ");} if (keyCode==4){setTmp4++;delay(50);lcd.setCursor(13, 3);lcd.print(setTmp4);lcd.print("* ");} if (keyCode==6){setTmp4--;delay(50);lcd.setCursor(13, 3);lcd.print(setTmp4);lcd.print("* ");} if (keyCode==10){setTmp5++;delay(50);lcd.setCursor(13, 4);lcd.print(setTmp5);lcd.print("* ");} if (keyCode==11){setTmp5--;delay(50);lcd.setCursor(13, 4);lcd.print(setTmp5);lcd.print("* ");} } while (keyCode!=5); delay(50); //По клавише Select – созраняем в EEPROM измененное значение if (keyCode==5){ EEPROM_write_byte(0, setTmp1); EEPROM_write_byte(1, setTmp2); EEPROM_write_byte(2, setTmp3); EEPROM_write_byte(3, setTmp4); EEPROM_write_byte(4, setTmp5); } lcd.clear(); } void loop() { double temp1 = Thermister(analogRead(4)); // Read sensor delay(100); lcd.setCursor(0, 0); lcd.print("1 "); lcd.print(temp1); lcd.print("/"); lcd.print(setTmp1); lcd.print("* "); double temp2 = Thermister(analogRead(5)); delay(100); lcd.setCursor(0, 1); lcd.print("2 "); lcd.print(temp2); lcd.print("/"); lcd.print(setTmp2); lcd.print("* "); double temp3 = Thermister(analogRead(6)); delay(100); lcd.setCursor(0, 2); lcd.print("3 "); lcd.print(temp3); lcd.print("/"); lcd.print(setTmp3); lcd.print("* "); double temp4 = Thermister(analogRead(7)); delay(100); lcd.setCursor(0, 3); lcd.print("4 "); lcd.print(temp4); lcd.print("/"); lcd.print(setTmp4); lcd.print("* "); double temp5 = Thermister(analogRead(7)); delay(100); lcd.setCursor(0, 3); lcd.print("5 "); lcd.print(temp5); lcd.print("/"); lcd.print(setTmp5); lcd.print("* "); //Проверка условия включения/выключения нагревателя if (temp1<setTmp1&&relayStatus1==LOW){relayStatus1=HIGH; digitalWrite(RELAY1_PIN,HIGH);} if (temp1>setTmp1&&relayStatus1==HIGH){relayStatus1=LOW; digitalWrite(RELAY1_PIN,LOW);} if (temp2<setTmp2&&relayStatus2==LOW){relayStatus2=HIGH; digitalWrite(RELAY2_PIN,HIGH);} if (temp2>setTmp2&&relayStatus2==HIGH){relayStatus2=LOW; digitalWrite(RELAY2_PIN,LOW);} if (temp3<setTmp3&&relayStatus3==LOW){relayStatus3=HIGH; digitalWrite(RELAY3_PIN,HIGH);} if (temp3>setTmp3&&relayStatus3==HIGH){relayStatus3=LOW; digitalWrite(RELAY3_PIN,LOW);} if (temp4<setTmp4&&relayStatus4==LOW){relayStatus4=HIGH; digitalWrite(RELAY4_PIN,HIGH);} if (temp4>setTmp4&&relayStatus4==HIGH){relayStatus4=LOW; digitalWrite(RELAY4_PIN,LOW);} if (temp5<setTmp5&&relayStatus5==LOW){relayStatus5=HIGH; digitalWrite(RELAY5_PIN,HIGH);} if (temp5>setTmp5&&relayStatus5==HIGH){relayStatus5=LOW; digitalWrite(RELAY5_PIN,LOW);} // Опрос клавиатуры int Feature = ReadKey(KEYPAD_PIN); if (Feature==5 ) {delay(100);setTemperature();} //Переход к редактированию заданной температуры if (Feature==1 ) {increase_speed();} if (Feature==9 ) {decrease_speed();} if (Feature==2 ) {change_direction(BACKWARD);} if (Feature==8 ) {change_direction(FORWARD);} if (Feature==3 ) {emergency_stop();} }
Код (Text): #define ButtonT4Down_LOW 978 #define ButtonT4Down_HIGH 1000 #define ButtonT4Down_LOW 1020 #define ButtonT4Down_HIGH 1050 T4 переопределена дважды, T5 не определена вообще.
Вам нужно определить 4 макроса: ButtonT5Up_HIGH, ButtonT5Up_LOW, ButtonT5Down_HIGH, ButtonT5Down_LOW аналогично тому, как это было сделано для других кнопок.