Официальный сайт компании Arduino по адресу arduino.cc
таймер в режимах (одна кнопка)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 23/06/2016 - 04:36
Друзья,товарищи помогите несчастному))
суть проблемы в том что есть 3 режима, 2 из них через заданное время (разное время) должны переходить на 3й режим .НО! этого не происходит )) помогите разобраться новичку ))
if (digitalRead(battonPin) == HIGH && flag == 0) { previousMillis1 = millis(); previousMillis2 = millis(); regim ++; //увелечение flag = 1; //шаг if (regim > 2) { regim = 0; } } if (digitalRead(battonPin) == LOW && flag == 1) {flag = 0;} if (regim == 0) {lcd. noDisplay();} if (regim == 1) { lcd.display(); lcd.setCursor(1,0); lcd.print("T="); lcd.print(round(t)); lcd.print("\1"); //lcd.backlight(); lcd.setCursor(1,1); lcd.print("H="); lcd.print(round(h)); lcd.print("%"); lcd.setCursor(1,2); lcd.print("W="); lcd.print(round(solidH)); lcd.print("%"); } if(millis()- previousMillis1 >= 2000) {(regim = 0);} if (regim == 2) { lcd.clear(); lcd.backlight(); lcd.setCursor(0,1); lcd.print(" P O L I V"); delay(500); lcd.clear(); } //else{(regim = 0);} if(millis()- previousMillis2 >= 9000) {(regim = 0);}
Во первых принято выкладывать весь скетч, может Вы pinMode там в сетапе не прописали... еще проверьте просто работает ли у Вас кнопка, подтянута ли она сопротивлением.. теперь опишим словами что делает программа, а вообще сначало лучше комментировать каждую строку, что происходит. необходимо помнить что все операции выполняются последовательно. Итак:
Если кнопка нажата и нет флага то обновляем счетчики, увеличиваем режим и торжественно поднимаем флаг.
Если режим больше 2 то он равен нулю (то есть в 3 режим мы не попадаем вообще, так как он сразу же обнуляется)
Если кнопка не нажата флажек поднят то приспускаем флажек
Если режим 0 то тушим дисплей
Если режим 1 то пишем очень коряво на дисплее, при этом подсветку не включаем и хрен поймешь что там, скорее всего во 2 строке будет "THW=90%"(смотрим работу функции setCursor)
Если прошло 2000 милисекунд с момента обноления счетчиков(они то у нас обновляются только по кнопке) то режим = 0
Если режим 2 то включаем наконец подсветку, чистим экран,выставляем криво курсор, пишем полив, тупим 500 мс и чистим снова экран
Если прошло 9000 милисекунд с момента обновления счетчиков то режим = 0
Mr.Privet, благодарю вас что вы откликнулись но мои призывы о помощи!)
режима 2 вы правы)
подсветка на дисплее не нужно включать он OLED (видно все хорошо)
проблема в том что в режиме 2 выставленно 9000 милисекунд ,но он гад переходит в режим =0 через 2000 милисекунд как в режиме один! в этом моя основная проблема и непонимание . кнопка работает резюк подтянут ...
я просто хочу что бы дисплей работал в разных режимах разное время логика с режимами карявая но она гасит мне дисплей)
вот весь мой код
По первому посту с режимами попробуйте так
vosara,Спасибо вам огромное! все за работало !я месяц боролся с этим! скобка такая мелочь, что я только не пробовал! спасибо вам за помощь добрые люди низкий вам поклон ))
Почему-то кажется, что переменная flag совершенно лишняя и, если ее исключить, второй if то же не нужен.
Если не поднимать флаг то при нажатии кнопки ( у нас цыкл бежит очень быстро) будет выполняться операция много раз. флаг нужен чтобы действие выполнялось один раз до следующего отпускания-нажатия
Все правильно флаг нужен а вот previousMillis2 можно удалить тогда строка №59 будет такая if(millis()- previousMillis1 >= 9000)