Не выключается реле при отпускании клавиши !

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Mamaley, 8 сен 2015.

  1. Mamaley

    Mamaley Нуб

  2. не, такое нужно решать написанием программы на компьютере, которая будет отправлять команду при нажатии и отпускании кнопки
     
  3. Mamaley

    Mamaley Нуб

    а , простите какую команду ? в виде (если мол отпустил кнопку "d") отвечающую за вкл., то автоматически нажимается любая другая отвечающая за выкл. ?
     
  4. Unixon

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

    На компе постоянно крутится программа и следить за клавой. Когда нажимается нужная кнопка - ардуине посылается команда включить соответствующее реле, когда кнопка отпускается - посылается команда выключить реле. Команды - просто буквы, как у вас в примере, просто каждой команде на включение должна соответствовать еще одна на отключение.

    Пример для ардуины: реагирует на команды "+<номер_реле>" (вкл), "-<номер_реле>" (выкл).
    Код (Text):

    #define N_RELAYS 4
    const uint8_t PIN_RELAY[N_RELAYS] = {10,11,12,13};

    void setup()
    {
      Serial.begin(9600);
      for (uint8_t i = 0; i < N_RELAYS; i++) pinMode (PIN_RELAY[i], OUTPUT);
    }

    void loop()
    {
      if (Serial.available()>=2)
      {
       char cmd = Serial.read();
       if ('+'=cmd)
       {
        char n = Serial.read()-'0';
        if ((n>=0) && (n<N_RELAYS))
        {
         digitalWrite(PIN_RELAY[n], HIGH);
        }
       }
       else if ('-'=cmd)
       {
        char n = Serial.read()-'0';
        if ((n>=0) && (n<N_RELAYS))
        {
         digitalWrite(PIN_RELAY[n], LOW);
        }
       }
      }
    }
     
     
  5. Mamaley

    Mamaley Нуб

    Вот ... добрые люди кое что дали , но все-равно не работает !:(

    #define ledPin 13
    unsigned long time;
    char val;
    int flag = 1;

    void setup(){
    Serial.begin(9600);
    }


    void loop(){
    val=0;
    if (Serial.available() > 0) {
    val = Serial.read();

    if (val == 'd' && flag == 1) {
    digitalWrite(ledPin, HIGH); // включаем, если пришло 'd'
    time = millis(); // старт отсчета
    flag = 0; // разрешаем проверку
    }
    }

    if(flag == 0){
    if(time+1000 < millis()){ // ждем 1 сек
    flag = 1;
    // если по истечении 1 сек переменная val пустая, значит ничего не приходит
    if (val == 0) digitalWrite(ledPin, LOW);
    }
    }

    }
     
  6. Mamaley

    Mamaley Нуб

    :) Ура код найден всё работает, кому интересно вот ...
    срабатывает на кнопку "d" , отпускаешь выключается.
    Код (Text):
    #define ledPin 13
    unsigned long times;
    char val;
    int flag = 1;
    void setup(){
      Serial.begin(9600);
      Serial.setTimeout(25);
      pinMode (ledPin, OUTPUT);
    }
    void loop(){
      val=0;
      if (Serial.available() > 0) {
          val = Serial.read();
          if (val == 'd') {
          times = millis(); // старт отсчета
          if (flag == 1) {
              digitalWrite(ledPin, HIGH); // включаем, если пришло 'd'
              flag = 0; // разрешаем проверку
          }
          }
      }
      if(flag == 0){
      if(times+1000 < millis()){ // ждем 1 сек
        flag = 1;
        // если по истечении 1 сек переменная val пустая, значит ничего не приходит
        if (val == 0) digitalWrite(ledPin, LOW);
      }
      }
    }