Всем привет!
Я начинающий в деле кодирования Arduino, потому сильно не ругайте за дичь которую я понаписал.
Программа следующая:
При отсутствии сигнала с ИК датчика светодиоды горят красным.
При наличии сигнала светодиоды начинают переливаться в зеленый.
По условию, после того как "красный" падает до нуля, начинается мягкий перелив яркости зеленого по всем светодиодам.
В чем проблема:
Когда программа входит в цикл "Перелива яркости зеленого по всем светодиодам", не удается ее оборвать. Пытался всяко разно, кучу способов перепробовал. По итогу складывается ощущение, что он не считывает сигнал во время цикла.
По задаче нужно, чтобы в любой момент, когда сигнал от ИК пропадет, все снова загаралось красным.
Делается это все на Digispark Attiny85. Пробовал еще с attachInterrupt, поискал информацию, вроде на Digispark не пашет.
Буду благодарен совету!
Я начинающий в деле кодирования Arduino, потому сильно не ругайте за дичь которую я понаписал.
Программа следующая:
При отсутствии сигнала с ИК датчика светодиоды горят красным.
При наличии сигнала светодиоды начинают переливаться в зеленый.
По условию, после того как "красный" падает до нуля, начинается мягкий перелив яркости зеленого по всем светодиодам.
В чем проблема:
Когда программа входит в цикл "Перелива яркости зеленого по всем светодиодам", не удается ее оборвать. Пытался всяко разно, кучу способов перепробовал. По итогу складывается ощущение, что он не считывает сигнал во время цикла.
По задаче нужно, чтобы в любой момент, когда сигнал от ИК пропадет, все снова загаралось красным.
Делается это все на Digispark Attiny85. Пробовал еще с attachInterrupt, поискал информацию, вроде на Digispark не пашет.
Буду благодарен совету!
C++:
#include <iarduino_NeoPixel.h>
iarduino_NeoPixel led(0,4);
uint8_t j; ///сдвиг
uint8_t k;
uint8_t r, g, blue; ////RGB
uint8_t z; ///delay
int IR_signal=1; /////IR Pin
bool IR;
//////////////////////ПЕРЕМЕННЫЕ ДЛЯ ПЕРЕЛИВА ЯРКОСТИ КАЖДОГО СВЕТОДИОДА//////////////////////
uint8_t a_1;
uint8_t a;
uint8_t b_1;
uint8_t b;
uint8_t c_1;
uint8_t c;
uint8_t d_1;
uint8_t d;
/////////////////////////////////////////////////////////////////////////
void setup() {
led.begin();
pinMode(IR_signal, INPUT);
}
void loop() {
IR = !digitalRead(IR_signal);
//////////////////////ПЕРЕЛИВ ВСЕХ СВЕТОДИОДОВ ОТ КРАСНОГО К ЗЕЛЕНОМУ//////////////////////
if(IR == 1)
{
j++;
z=50;
r=255-g; g=j*3; blue=0;
led.setColor(NeoPixelAll, r,g,blue);
led.write();
delay(z);
a_1=45; ///значения яркости при переливе светодиодов
a=45;
b_1=90;
b=90;
c_1=135;
c=135;
d_1=180;
d=180;
//////////////////////ПЕРЕЛИВ КАЖДОГО СВЕТОДИОДА ПО ЯРКОСТИ////////////////////////////////////
while(r == 0){
z=1;
if (a>0){
led.setColor(0, r, a_1--, 0);
led.write();
delay(z);
a--;
}
else {
led.setColor(0, r, a_1++, 0);
led.write();
delay(z);
}
////////
if (b>0){
led.setColor(1, r, b_1--, 0);
led.write();
delay(z);
b--;
}
else {
led.setColor(1, r, b_1++, 0);
led.write();
delay(z);}
/////////
if (c>0){
led.setColor(2, r, c_1--, 0);
led.write();
delay(z);
c--;
}
else {
led.setColor(2, r, c_1++, 0);
led.write();
delay(z);}
///////////
if (d>0){
led.setColor(3, r, d_1--, 0);
led.write();
delay(z);
d--;
}
else {
led.setColor(3, r, d_1++, 0);
led.write();
delay(z);}
if(a_1>180){
a=180;}
if(b_1>180){
b=180;}
if(c_1>180){
c=180;}
if(d_1>180){
d=180;}
if(IR == 0) break;
}
}
//////////////////////ВСЕ СВЕТОДИОДЫ КРАСНЫЕ ПРИ ОТСУТСТВИИ СИГНАЛА С ИК-ДАТЧИКА//////////////////////
if (IR == 0){
j = 0;
r = 255;
g = 0;
blue = 0;
led.setColor(NeoPixelAll, r,g,blue);
led.write();
}
}