Повтор части кода

d1mmk4
Offline
Зарегистрирован: 28.11.2016

Привет Всем!

Народ, помогите пожалуйста! В общем, нужно сделать повтор части кода. Например, чтобы красный диод мигал, а не моргнул 1 раз и "сдох".

unsigned long x;
int r = 2; //Красный диод
int g = 3; //Зелёный диод
int b = 4; //Синий диод
int d = 1;

void setup()

{

Serial.begin(9600);
Serial.setTimeout(4);

pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);

}

void loop()

{
  if (Serial.available())
  
{
  x = Serial.parseInt(); 

//Красный
if (x>=2 && x<=100)
                  {
                   d = 101-x;
                  {
                   analogWrite(r, 0);
                   analogWrite(g, 255);
                   analogWrite(b, 255);
                   delay(d); 
                   analogWrite(r, 255);
                   delay(d);
                  }
                  } 

//Зелёный
if (x>=102 && x<=200) 
                  {
                   d = 201-x;
                  {
                   analogWrite(r, 255);
                   analogWrite(g, 0);
                   analogWrite(b, 255);
                   delay(d); 
                   analogWrite(g, 255);
                   delay(d);
                  }
                  } 

//Синий
if (x>=202 && x<=300) 
                  {
                   d = 301-x;
                  {
                   analogWrite(r, 255);
                   analogWrite(g, 255);
                   analogWrite(b, 0);
                   delay(d);
                   analogWrite(b, 255);
                   delay(d);
                  }
                  } 
}
}

 

d1mmk4
Offline
Зарегистрирован: 28.11.2016

Забыл дописать: команды идут через блютуз модуль HC-05, со смартфона.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Закрывающую фигурную скобку из строки 69 вставьте после строки 26.

d1mmk4
Offline
Зарегистрирован: 28.11.2016

неа, всё так же, 1 раз моргнул и погас

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

про скобку правильно сказали, и почему analogWrite ?

уверены, что PWM есть на этих пинах ?

В двух словах задачу то опишите.

d1mmk4
Offline
Зарегистрирован: 28.11.2016

Переместив скобку получил тоже самое, ничего не изменилось. Суть следующая: имеется Arduino Mega 2560, HC-05, 12 RGB диодов, смартфон и программа, сделанная в App Invertor'e. Чтобы упростить код оставил только 1 лампочку. Плавное изменение цвета я делать не буду, интересует только ВКЛ/ВЫКЛ. Управление будет осуществляться, соответственно, со смартфона, 3-мя слайдерами. PWM на пинах 2-13.

Как то раз получилось сделать через оператор "return", но как так вышло так и не понял. Просто игрался со скобками и случайно вышло.

El
Offline
Зарегистрирован: 10.03.2016

Он моргает один раз после каждого поступления команды с модуля?

d1mmk4
Offline
Зарегистрирован: 28.11.2016

Нуу хочу чтоб мигал постоянно. Двинул слайдер красного диода - мигает, например, чаще. Двинул в другую - реже. Двинул слайдер зелёного диода - замигал зелёный. Как то так)

El
Offline
Зарегистрирован: 10.03.2016

На сколько я могу судить у тебя код считывает целое число из сериал.  Далее ты иксу присваиваешь значение. Далее ты прогоняешь все по ифам. а потом ты ждешь нового значения в сериал и цыкл у тебя замкнут на это ожидание. по этому при приходе какого-либо значения у тебя красный/синий/желтый моргает только один раз.

Тебе надо уйти от вечного ожидания значения. я ыижу это так:

  if (Serial.available())
  
{
  x = Serial.parseInt(); 
}
else { все, что у тебя написано ниже}

 

d1mmk4
Offline
Зарегистрирован: 28.11.2016

Дописал "else"... И тут понял: косяк были и в коде, и в приложении. Скачал Bluetooth Terminal, ввёл "50" и лампочка замигала. Сейчас всё работает. Спасибо всем, кто откликнулся, не оставили в беде! :-)