Помогите с выключателем!!

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

  1. Mysterion

    Mysterion Нуб

    Мне нужно подключить выключатель(не путать с тактовой кнопкой) к Ардуино уно. При включении этого выключателя должна вызываться функция. Функция вызывается до тех пор, пока не вернуть выключатель в первоначальное положение. Как осуществить?
     
  2. 9xA59kK

    9xA59kK Гик

    Также как и с тактовой кнопкой, если выключатель с возвратом. А Если с фиксацией положения, то немного будет отличаться. Какой у вас выключатель? И нарисуйте схему. НУ и код не помешал бы хоть какой то.
     
  3. Mysterion

    Mysterion Нуб

    upload_2015-10-16_17-26-49.png
    const int buttonPin = 2;
    const int ledPin = 13;


    int buttonState = 0;

    void setup() {

    pinMode(ledPin, OUTPUT);

    pinMode(buttonPin, INPUT);}
    void blink()
    {
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);

    delay(200);
    }

    void loop() {
    // read the state of the pushbutton value:
    buttonState = digitalRead(buttonPin);


    if (buttonState == HIGH) {
    blink();
    }
    }
    И да, выключатель с фиксацией положения
     
    Последнее редактирование: 16 окт 2015
  4. DrProg

    DrProg Вечный нерд

    Конструкция if - else решит эту задачу. А то и просто if, если в другом случае ничего делать не надо. В этом же случае можно так:

    Код (C++):
    while (!digitalRead (PIN)); // пока выкл крутимся тут
    // тут сама функция
     
    Последнее редактирование: 16 окт 2015
    ИгорьК нравится это.
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    Неоднозначно. Надо жестко сидеть внутри этой функции, пока активен выключатель, или надо при активном выключателе тупо вызывать функцию, параллельно делая что-то еще?
     
  6. Mysterion

    Mysterion Нуб

    " Надо жестко сидеть внутри этой функции, пока активен выключатель"- вот именно так
     
  7. DrProg

    DrProg Вечный нерд

    Ну и в чем проблема, у вас все верно. Разве что можно сократить до:
    if (buttonState) {
    blink();
    }
     
    ИгорьК нравится это.
  8. Mysterion

    Mysterion Нуб

    проблема в том, что при таком использовании функция вызывается лишь один раз и то после того как выключатель возвращается в исходное положение.
     
  9. DrProg

    DrProg Вечный нерд

    Если после возвращение а исходное, то надо ждать нуля, то есть if(!buttonState), и вооще вот так:
    Код (C++):
    while (digitalRead(PIN)): // ждем вкл
    while(!digitalRead(PIN)) { // ждем выкл
    // тут функция
    }
    Если не будет работать, то вцкл знак переставить в первое условие, а во втором убрать. Не знаю как у вас притянут переключатель.
     
    ИгорьК нравится это.
  10. Mysterion

    Mysterion Нуб

    не, не работает
     
  11. DrProg

    DrProg Вечный нерд

    PIN на buttonPIN поменяли хоть?
     
    ИгорьК нравится это.
  12. Mysterion

    Mysterion Нуб

    А как же, все поменял. Пробовал даже с buttonState. Результата ноль.
     
  13. DrProg

    DrProg Вечный нерд

    Проверяте схему тестером, когда там HIGH, а когда LOW. Проблема в ней.
     
    ИгорьК нравится это.
  14. Mysterion

    Mysterion Нуб

    Всё, Спасибо за помощь! Нашел ошибку. Случайно перекинул провод питания на Брэдборде
     
  15. DrProg

    DrProg Вечный нерд

    Ставьте лайки )
     
    ИгорьК нравится это.