Как с помощью кнопки. Добиться перепрограммирование (Посмотрите скетч. Переделка нужна)

Тема в разделе "Arduino & Shields", создана пользователем Proger_xxx, 13 окт 2016.

  1. Proger_xxx

    Proger_xxx Нуб

    Всем привет! Имеется следующий скетч. Вот собственно кодинг:

    Код (C++):
    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;

    if (ledLevel > 255) ledLevel = 0;
    analogWrite(ledPin, ledLevel);
    }
    Необходимо переделать данный скетч. Логика примерная следующая. При нажатий кнопки (switchPin) изменялась время, то есть вместо яркости светодиода (ledLevel = ledLevel + 51). Например: Нажали кнопку к Delay прибавляется 10 мин. И загорается желтый светодиод. Нажали еще раз. Прибавляется еще 10 мин. И загорается синий светодиод (Уже через 20 мин что-то должно сработать). Нажали еще +10 мин опять и зеленый светодиод. Уже 30 мин должно получиться! И допустим замыкание реле
     
  2. ATishchenko

    ATishchenko Нерд

    Не очень ясно, где живут все светодиоды, но это и не важно. Заведите переменную long curDelay, поставьте в нужное Вам начальное значение в setup() или при инициализации, а дальше ставьте в рамки на 10/20/30 минут и соответственно нужный диод включайте, а остальные выключайте. И пороговое условие - при превышении времени Ч замкнуть реле (digitalWrite(relayPin, HIGH)). Текущее время контроллера (с момента запуска) Вы можете узнать в loop() при помощи функции long curr = millis();
     
  3. qwone

    qwone Гик

    Если в голове у ТС каша, то точно будет каша в его коде. Наверно код "гранаты" При однократном нажатии желий светодиод и "подрыв" 10 минут. Повторное нажатие синий светодиод и "подрыв"через 20 мин. Тетье нажатие горит зеленый светодиод и "подрыв" на 30 минуте. Отсчет разумеется от первого нажатия. А подрыв обозначается щелчком реле.
    ПС: А вообще "заказчики" они как бабы, хотят, но незнают что, но очень сильно хотят. Вот так и здесь "беремены идеей",, но часто мерворожденой и "не нужной. никому" но очень гениальной.
     
  4. ostrov

    ostrov Гуру

    Гугл-переводчик с китайского все популярнее.
     
  5. Proger_xxx

    Proger_xxx Нуб

    Здесь я не вижу никакой кашы. Две кнопки, одно увеличения времени при котором должно сработать реле. А второе уменьшения времени. А светодиоды для сигнала времени / сколько осталось до вкл.реле вот и все. А сам код примерное решения логики

    Спасибо попробую! Отпишусь. На счет светодиодов вы правы. Так себе индикация. А две кнопки + и - времени реле. И еще текущее время до щелчка не нужна будет вскорей всего. Послужат светодиоды...
     
    Последнее редактирование модератором: 15 окт 2016
  6. qwone

    qwone Гик

    Вот и я говорю. Сначало была просто кнопка, а сейчас две. Мы что в дурака играем. И ТС как шулер информацию в рукавах держит.
     
  7. Proger_xxx

    Proger_xxx Нуб

    Здесь я не вижу никакой кашы. Две кнопки, одно увеличения времени при котором должно сработать реле. А второе уменьшения времени. А светодиоды для сигнала времени / сколько осталось до вкл.реле вот и все. А сам код примерное решения логики

    Ну и пусть. Разница какая?! Главное логика исправно работала
     
    Последнее редактирование модератором: 15 окт 2016
  8. ATishchenko

    ATishchenko Нерд

    Вы уж не обижайтесь, чтобы логика исправно работала - надо суть задачи понимать. Код Вы предоставили практически "блюмовский", описание задачи, ну как описали. Давайте от печки - что же таки надо сделать? Повышать/понижать время реакции реле? Одна кнопка в цикле или две в +/- ? Критерий отключения реле - время или датчик или еще что? По идее, того что я Вам писал выше должно было хватить для начала...
     
  9. Proger_xxx

    Proger_xxx Нуб

    Да, да правильно. Повышать время работы реле. По сути в конечном этого должно получиться перепрограммируе реле за счет кнопок. Можно использовать одну кнопку. То есть нажал значение 10 мин, еще нажали 20 мин. Еще раз и 30 мин.И обратное возвращение 0 мин. Денег на дисплей не было. По этому индикация за счет светодиодов) Вот и вся задача. (Одно реле, одна кнопка, три светодиода по времени. А логика самого реле зависит от времени которую я устанавливаю за счет кнопки)
     
  10. ostrov

    ostrov Гуру

    Таки я не понял, сделали или все еще вола душат?