Помогите с кодом

Neznayka_V_shlape
Offline
Зарегистрирован: 22.07.2018

Я написал, пользуясь книгой, код (ардуино UNO), при котором RGB  по нажатию кнопки меняет цвета (всего 7)

Но очень хотелось бы изменить код так, чтобы каждый цвет еще и мигал (ну или допустим, изменял яркость). 

Буду очень признателен за помощь!

 

Вот код:

const int BUTTON=2;
const int GLED=10;
const int RLED=11;
const int BLED=9;


boolean lastButton = LOW;
boolean currentButton = LOW;
int ledMode=0;

void setup() 
{
  
  pinMode (BLED, OUTPUT);
  pinMode (GLED, OUTPUT);
  pinMode (RLED, OUTPUT);
  pinMode (BUTTON, INPUT);

}


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

void setMode( int mode)
{
  // КРАСНЫЙ
  if (mode ==1)
  {
  
digitalWrite(RLED, HIGH);     
digitalWrite(GLED, LOW);
digitalWrite(BLED, LOW);
}
 // зеленый
else if( mode==2)
{
digitalWrite(RLED, LOW);
digitalWrite(GLED,HIGH );
digitalWrite(BLED, LOW);
}

// синий
else if( mode==3)
{
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
digitalWrite(BLED, HIGH);
}
//ПУРПУРНЫЙ КР+С
else if( mode==4)
{
digitalWrite(RLED, 127);
digitalWrite(GLED, 0);
digitalWrite(BLED, 127);
}
//бирюзовый с+зел
else if( mode==5)
{
digitalWrite(RLED, 0);
digitalWrite(GLED, 200);
digitalWrite(BLED, 90);
}
//ОРАНЖЕВЫЙ ЗЕЛ+КР
else if( mode==6)
{
digitalWrite(RLED, 224);
digitalWrite(GLED, 1);
digitalWrite(BLED, 0);
}
// БЕЛЫЙ  ЗЕЛ+КР+С
else if( mode==7)
{
digitalWrite(RLED, 127);
digitalWrite(GLED, 127);
digitalWrite(BLED, 127);
}

 else 
 {
digitalWrite(RLED, LOW);
digitalWrite(GLED, LOW);
digitalWrite(BLED, LOW);
 }
}
void loop() 
{
currentButton = debounce(lastButton);
if (lastButton == LOW &&  currentButton== HIGH) 
{
ledMode++;
}
lastButton=currentButton;
if (ledMode==8)
ledMode=0;
setMode(ledMode);
}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Для начала почитайте ещё раз про digitalWrite(). Функция умеет устанавливать вывод только в HIGH и LOW. А у Вас там какие-то циферки фигурируют. Не иначе с analogWrite() попутали. Уж определитесь.

А по вопросу, посмотрите пример из поставки Blink without delay. Там один диод мигает. Переделаете на три.

Neznayka_V_shlape
Offline
Зарегистрирован: 22.07.2018

спасибо!

digitalWrite заменю!

с программой blink я знаком, но не зню как ее правильно вставить! Попробовал просто заменить  это:

 

digitalWrite(RLED, HIGH);    
  digitalWrite(GLED, LOW);
  digitalWrite(BLED, LOW);

на фрагменты из программы blink с мигание, вроде работало, но кнопка перестала отвечать сразу (раза после 5 только срабатывала,  поэтому и задал вопрос!

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Ещё раз - пример в поставке называется BlinkWithoutDelay. С ним кнопка будет работать.

Оно же здесь: Мигаем светодиодом без delay()

Neznayka_V_shlape
Offline
Зарегистрирован: 22.07.2018

Классно! Все вроде получилось! Спасибо еще раз!

 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Эту прогу не надо вставлять. Её надо понять. Как она работает. Тогда по аналогии можна формировать любые временные интервалы абсолютно аналогичным способом.

Neznayka_V_shlape
Offline
Зарегистрирован: 22.07.2018

получилось у меня: RGB светодиод - некоторые цвета мигают!