нужна подсказка по прагроммированию!!!!

Gor
Offline
Зарегистрирован: 07.08.2015

[code]
int regim = 1;
int flag = 0;
void setup()
{
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop()
{ Serial.begin(9600);
  if (digitalRead(8) == HIGH && flag == 0) //если кнопка нажата
    // и перемення flag равна 0 , то ...
  {
    regim++;
    flag = 1;
    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга"  100%
    if (regim > 4) //ограничим количество режимов
    {
      regim = 1; //так как мы используем только одну кнопку,
      // то переключать режимы будем циклично
    }
  }

  if (digitalRead(8) == LOW && flag == 1) //если кнопка НЕ нажата
    //и переменная flag равна - 1 ,то ...
  {
    flag = 0; //обнуляем переменную "knopka"
  }
  if (regim == 1) //первый режим
  {
    digitalWrite(9, LOW); //выключаем все светодиоды
    digitalWrite(10, LOW);
    Serial.print("00"); //здесь может быть любое ваше действие
  }
  if (regim == 2) //второй режим
  {
    digitalWrite(10, HIGH); //включае красный светодиод
    digitalWrite(9, LOW);
    Serial.print("10");
  }
  if (regim == 3) //третий режим
  {
    digitalWrite(9, HIGH); //включае зеленый светодиод
    digitalWrite(10, LOW);
    Serial.print("01");
    //здесь может быть любое ваше действие
  }
  if (regim == 4) //четвертый режим
  {
    digitalWrite(9, HIGH); //включаем светодиоды одновременно
    digitalWrite(10, HIGH);
    Serial.print("11");
    //здесь может быть любое ваше действие
  }
}
[/code]

есть мега2560,два светодиода на 9 и 10 пинах, и кнопка на 8 .

при включении диоды не горят, нажал кнопку ,первый диод загорелся, нажал кнопку-первый погас, второй загорелся, нажал кнопку-загорелись два диода. нажал кнопку, погасли...и так по кругу.....решил попробовать передавать на комп сообщения на монитор последовательного порта, приходит вместо "00","10",01","11" , какие то хаотичные символы, во вторых-доходит до первого сообщения и или зависает, или останавливается. Если удаляю первый, доходит до следующего состояния и опять виснет. Вопрос, что не так????. И еще, в программе изначально сказано, что меня flag на 1, «/это нужно для того что бы с каждым нажатием кнопки     //происходило только одно действие     // плюс защита от "дребезга"  100%». 

Но проходит секунда три ,прежде чем, можно опять переключить режим…. Вопрос ,откуда такая задержка??? Как ускорить время реакции на нажатие кнопки.                                                                                                             Я третий день как пытаюсь разобраться, поэкспериментировать с Arduino.  Если что,,,,,извеняйте;)) 

 

vvadim
Offline
Зарегистрирован: 23.05.2012

защиты от дребезга здесь нет вообще.

у меня такой код работал нормально

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

У вас программа построена не верно, она будет "дрючить" Serial пока он не "отвалится". Нужно ограничить вывод - только при изменении переменной regim а не постоянно как сейчас. И убрать настройку порта в setup, в цикле ее не должно быть.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Gor пишет:
Я третий день как пытаюсь разобраться, поэкспериментировать с Arduino.  Если что,,,,,извеняйте;)) 

 


Все хотел спросить, что это значит, третий день пытаюсь разобраться. .. как вообще это выглядит? Ну попытки разобраться.

Radjah
Offline
Зарегистрирован: 06.08.2014

Для начала https://www.arduino.cc/en/Reference/SwitchCase

> как вообще это выглядит? Ну попытки разобраться.

Игра в гляделки. Гор смотрит на код, а код на Гора.

Andrey-S
Offline
Зарегистрирован: 02.01.2015

Я грешным делом подумал, что нужна подсказка по правильному написанию слова "ПРАГРОММИРОВАНИЮ"))

Joiner
Offline
Зарегистрирован: 04.09.2014

Andrey-S пишет:

Я грешным делом подумал, что нужна подсказка по правильному написанию слова "ПРАГРОММИРОВАНИЮ"))

:)))))