помогите привязать клавиши к разделу

Тема в разделе "Arduino & Shields", создана пользователем TJZ, 21 мар 2015.

  1. TJZ

    TJZ Нуб

    постоянно выдаёт ошибку

    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
     
  2. TJZ

    TJZ Нуб

    Код (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();}

    }

     
     
  3. Unixon

    Unixon Оракул Модератор

    Код (Text):

    #define ButtonT4Down_LOW 978
    #define ButtonT4Down_HIGH 1000

    #define ButtonT4Down_LOW 1020
    #define ButtonT4Down_HIGH 1050
     
    T4 переопределена дважды, T5 не определена вообще.
     
  4. Unixon

    Unixon Оракул Модератор

    А вы смысл этой ошибки совсем не понимаете?
     
  5. TJZ

    TJZ Нуб

    да(((
     
  6. Unixon

    Unixon Оракул Модератор

    А так? :)
     
  7. TJZ

    TJZ Нуб

    с т4 я понял
    нужно определить т5
     
  8. TJZ

    TJZ Нуб

    мне нужно изменить значения сопротивления кнопки Т5 что бы её можно было определить в этой области?
     
  9. TJZ

    TJZ Нуб

    я не знаю((((
    вообще печаль
     
  10. Unixon

    Unixon Оракул Модератор

    Вам нужно определить 4 макроса: ButtonT5Up_HIGH, ButtonT5Up_LOW, ButtonT5Down_HIGH, ButtonT5Down_LOW аналогично тому, как это было сделано для других кнопок.
     
  11. TJZ

    TJZ Нуб

    всё спасибо
    я всё понял)))))
     
  12. TJZ

    TJZ Нуб

    уже исправил)