Помогите с Переключением режимов

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

Всем привет. Вот решил собрать светофор и добавить кнопку . Суть в чем,что при нажатии кнопки - должен меняться режим. певрый - светофор , второй - мигания одного YLED и третий - выкл.

Вот код. Вроде все компилируется ,но кнопка отказывается переключать режимы и после загрузки скетча работает только mode1 . В чем проблема ?

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

P.S. я только начал осваивать Ардуинку ,по-этому прошу без стёба)

b707
Offline
Зарегистрирован: 26.05.2017

ну как же без стеба, если вы даже код в форум не можете правильно выложить?

 

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

b707 пишет:

ну как же без стеба, если вы даже код в форум не можете правильно выложить?

 

 

Я не думал ,что  Вас это так сильно тронет. В след.раз я учту!
тем не менее код выложен весь и читается весь!

b707
Offline
Зарегистрирован: 26.05.2017

MaPcUaH пишет:

Я не думал ,что  Вас это так сильно тронет. В след.раз я учту!

Тогда и советы получите в следующий раз.

Пока не выложите код - вряд ли будет предметный разговор. Его и после этого может не получится... но без кода - шансов вовсе нет.

MaPcUaH
Offline
Зарегистрирован: 11.02.2019
const int YLED=3;
const int GLED=2;
const int RLED=4;
const int buttonPin=9;

boolean lastbuttonPin = LOW; 
boolean currentbuttonPin = LOW;
int ledMode = 0;

void setup ()
{
pinMode (YLED, OUTPUT); 
pinMode (GLED, OUTPUT); 
pinMode (RLED, OUTPUT);
pinMode (buttonPin, INPUT);
}

boolean debounce(boolean last)
{
 boolean current = digitalRead(buttonPin);
 if (last != current)
  {
   delay(15);
   current = digitalRead(buttonPin);
   return current;
  }
}  

void setMode(int mode)
{
 // светофор
 if (mode == 1)
   {
   digitalWrite(RLED, HIGH);
    delay(10000);
    digitalWrite(YLED, HIGH);
   delay(2000);
     digitalWrite(GLED, LOW);

   digitalWrite(GLED, HIGH);
   digitalWrite(RLED, LOW);
   digitalWrite(YLED, LOW);
   delay(10000);

   for (int x=0; x<6; x++){
    digitalWrite(GLED, HIGH);
    delay(500);
    digitalWrite(GLED, LOW);
    delay(500);
   }
   digitalWrite(YLED, HIGH);
   digitalWrite(GLED, LOW);
     delay(2000);
     digitalWrite(YLED, LOW);
   }
  if (mode == 2 )
   {
    digitalWrite(YLED, HIGH);
    delay(500);
    digitalWrite(YLED, LOW);
    delay(500);
  
  
   
    
   }
  else {
      digitalWrite(RLED, LOW);

    digitalWrite(YLED, LOW);

     digitalWrite(GLED, LOW);
  }

}
void loop()

{

currentbuttonPin = debounce(lastbuttonPin);

if (lastbuttonPin == LOW && currentbuttonPin == HIGH)

{

ledMode++;

}

lastbuttonPin = currentbuttonPin;

if (ledMode == 3)

ledMode = 0;

setMode(ledMode);

}

 

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

b707 пишет:

MaPcUaH пишет:

Я не думал ,что  Вас это так сильно тронет. В след.раз я учту!

Тогда и советы получите в следующий раз.

Пока не выложите код - вряд ли будет предметный разговор. Его и после этого может не получится... но без кода - шансов вовсе нет.

Вместо того ,что бы демонстрировать свою непонятную неприязнь , могли бы начать разговор с подсказки как правильно выложить код,так как, если Вы не заметили , это мое первое сообщение на форум и я могу некоторые тонкости не знать!
 В ином случае, можете не помогать( не настаиваю ) , надеюсь найдутся люди по гостеприимней .

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

В строка 18-27 записана функция debounce. Вопрос: что она возвращает в том случае, когда last==current (т.е. практически всегда)?

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

как я понял , это идет защита от дребезга кнопки ( такое решение я нашел в интернете ) .

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MaPcUaH пишет:

Вместо того ,что бы демонстрировать свою непонятную неприязнь , могли бы начать разговор с подсказки как правильно выложить код,так как, если Вы не заметили , это мое первое сообщение на форум и я могу некоторые тонкости не знать!

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

На Ваш вопрос я уже ответил. По крайней мере одно из "что не так" Вы уже знаете. Исправляйте, а там посмотрим дальше. Если после исправления, по-прежнему не нравится, исправленный код в студию (и без балабольства про "следующий раз").

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MaPcUaH пишет:

как я понял , это идет защита от дребезга кнопки ( такое решение я нашел в интернете ) .

Вы не поняли вопроса? Вопрос был: что возвращает эта функция в том случае, когда last==current ?

Ответьте себе (мне не надо, я и так знаю) и исправьте ошибку.

MaPcUaH
Offline
Зарегистрирован: 11.02.2019

я и не начинал "Бычить " как Вы говорите,а вполне цевелизовано вел диалог .
Исправлю код и сразу отпишусь об изменениях

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

это раздел "Программирование". Скажи спасибо, что просто не потёрли. В песочнице помогают начинающим, и не посылают сразу.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Чего-то Вы, уважаемый, перемудрили с кнопкой. Вам же просто нужен факт нажатия, а Вы в 82 строке устраиваете пляски с бубнами. Если Вам ракету не запускать в космос, так считывайте кнопку по отпусканию. Типа 

boolean pressButton(){
if (digitalRead(buttonPin)==0) 
{
return 0;
} else{
while(digitalRead(buttonPin)==1);
return 1;
}
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MaPcUaH пишет:

я и не начинал "Бычить " 

Вашу фразу "Вместо того ,что бы демонстрировать..." в адрес уважаемого на форуме человека, а называю "бычить". Вы можете называть по-другому - мы свободные люди.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

wdrakula пишет:
В песочнице помогают начинающим, и не посылают сразу.
Да и там помогают тем, у кого самописный код, а не 

ЕвгенийП пишет:

что возвращает?

MaPcUaH пишет:

нашел в интернете.

bwn
Offline
Зарегистрирован: 25.08.2014

То ТС, в общем, переместил в песочницу, чтобы не было мучительно больно, ознакомьтесь с первыми постами в головной теме.

P/S И если не трудно, ответьте на вопрос: Что подвигло постить в "Программирование", а не в раздел для начинающих? Он меня мучает последнее время.

KindMan
Offline
Зарегистрирован: 19.12.2018

Каким образом у вас вообще должно обрабатываться нажатие кнопки, если у вас одни delay в коде.