1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Как создать перепрограммируе реле на ардуино?

Тема в разделе "Arduino", создана пользователем proger_xxx, 17 окт 2016.

  1. proger_xxx

    proger_xxx Гость

    Сообщения:
    4
    Симпатии:
    0
    Всем привет! Как реализовать примерную логику работы реле. То есть у нас имеется одна кнопка, одно реле, и три светодиода. Логика: Нажали один раз на кнопку в переменную время добавляется 10 мин и параллельно загорается индикация красный светодиод. Если еще раз нажать прошлое время обнуляется и добавляется еще 10 мин + светодиод желтый. В итоге 20 мин и пошло время срабатывание реле. А если еще нажать +10 мин загорается зеленый светодиод + ожидание времени срабатывание реле уже на 30 мин. После 30 мин все заново обнуляется (Или же 4 раз нажать кнопку все обнуляется)
     
  2. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    код написать :)
  3. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    по существу:
    из вашего поста ничего не понятно от слова совсем. Кто будет код писать - вы сами или вы хотите
    чтобы это сделал кто нибудь из форумчан ? логика работы не совсем понятна т.к. не описаны все условия
    выполнения поставленных задач, т.е. нужно по сути ТЗ в котором описан полный алгоритм работы. Например
    так: условие - нажата кнопка (как нажата - длительность нажатия или срабатывание на отпускание кнопки, или
    нажата и удерживается) - выполнить - зажечь светодиод\поморгать светодиодом и одновременно или через время включить реле.....и т.д. и т.п. и....... пока достаточно ;)
  4. proger_xxx

    proger_xxx Гость

    Сообщения:
    4
    Симпатии:
    0
    Вот примерно код:
    int switchPin =10;
    int ledPin =11;
    boolean lastButton = LOW;
    int ledLevel =0;
    boolean currentButton = LOW;

    void setup()
    {
    pinMode(switchPin, INPUT);
    pinMode(ledPin, OUTPUT);//
    }

    boolean debounce(boolean last)
    {
    boolean current = digitalRead(switchPin);
    if(last != current)
    {
    delay(5);
    current = digitalRead(switchPin);
    }
    return current;
    }

    void loop()
    {
    currentButton = debounce(lastButton);
    if(lastButton == LOW && currentButton == HIGH)
    {
    ledLevel = ledLevel +51;
    }
    lastButton = currentButton;
  5. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    блин ардуина...

    для начала как бы часы наверное надо написать, сделать переменные секунд и минут, потом
    эти минуты и считать.

    на обработку состояний можно применить конечный автомат
  6. proger_xxx

    proger_xxx Гость

    Сообщения:
    4
    Симпатии:
    0
    Спасибо вам огромное! То что надо! Почитаю, УРА! Если хотите помочь напишите примерную логику. Вместо swith что использовать для delay?!
  7. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    я вот в ардуинах вообще не силен, delay вроде как задержка, и применяется довольно широко
    в разных местах. А если надо время считать, то лучше таймер заводить, считать секунды, а из секунд минуты
    --- Сообщения объединены, 18 окт 2016 ---
    не знаю как ардуина, а вот на меге восьмой можно асинхронный таймер заводить, как раз для часов,
    на кварце 32768, очень удобно, прерывания как раз происходят один раз в секунду
  8. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.488
    Симпатии:
    345
    Адрес:
    Алматы
    На arduino уже есть такой таймер, смотрите функцию millis(). Она позволяет отсчитывать промежутки времени, как раз то, что вам нужно.
    Buba_Chkhadze нравится это.
  9. proger_xxx

    proger_xxx Гость

    Сообщения:
    4
    Симпатии:
    0
    Админ если есть времени приведи хоть один пример) Свяжи миллс и переменную) Не получается)
  10. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.488
    Симпатии:
    345
    Адрес:
    Алматы
    PHP:
    unsigned long startTime;
    unsigned long stopTime;
    unsigned long deltaTime;

    // Начало программы
    startTime millis();

    /*
      Далее функции работы программы
    */

    stopTime millis();

    // Далее вычисляем время выполнения функции
    deltaTime stopTime startTime;
    Аналогично, если нужно, чтобы функция включалась через определенное время, то применяешь условие типа:
    PHP:
    if(deltaTime 300) {
       
    // сделать что-нибудь
    }

Поделиться этой страницей