Доброго времени суток, товарищи.
Не получается добавить RGB светодиод, который бы изменял свои цвета по таймеру.
Хотелось бы, сделать так:
с начала цикла скетча светодиод горел одним цветом, затем когда на 4 разрядном 7 сегментном индикаторе счетчик достигал определенного значения, допустим 20, менял свой цвет и т.д
Пытался писать с помощью библиотек ТМ1637, но как выяснилось моим пытливым умом, этот сея девайс существенно отличается.
До этого мне удавалось достичь результатов, которые приводили к отказу индикатора вовсе обрабатывать функцию “таймера”, но при этом статично горел светодиод, затем было исправлено, но тем не менее не добился искомого результата. Текущий скетч упорно отказывается обрабатывать простую команду “если…иначе”.
#include <TimerOne.h>
int a = 7;
int b = 3;
int c = 4;
int d = 5;
int e = 6;
int f = 2;
int g = 8;
int p = 9;
int d4 = A1;
int d3 = A2;
int d2 = A3;
int d1 = A4;
long n = 0;
int x = 100;
int del = 5;
int count = 0;
int rled = 11;
int gled = 9;
int bled = 10;
void setup()
{
//пины на вывод
pinMode(d1, OUTPUT);
pinMode(d2, OUTPUT);
pinMode(d3, OUTPUT);
pinMode(d4, OUTPUT);
pinMode(a, OUTPUT);
pinMode(b, OUTPUT);
pinMode(c, OUTPUT);
pinMode(d, OUTPUT);
pinMode(e, OUTPUT);
pinMode(f, OUTPUT);
pinMode(g, OUTPUT);
pinMode(rled, OUTPUT);
pinMode(gled, OUTPUT);
pinMode(bled, OUTPUT);
Timer1.initialize(100000);
Timer1.attachInterrupt( add );
}
void loop()
{
clearLEDs();
pickDigit(0); //включаем первую цифру
pickNumber((n/1000)); //значение тысячи
delay(del); //пауза 5мс
clearLEDs();
pickDigit(1); //включаем вторую цифру
pickNumber((n%1000)/100); //значение сотни
delay(del); //пауза 5мс
clearLEDs();
pickDigit(2); //включаем третью цифру
pickNumber(n%100/10); //значение десятки
delay(del); //пауза 5мс
clearLEDs();
pickDigit(3); //включаем четвертую цифру
pickNumber(n%10); //значение единицы
delay(del); //пауза 5мс
rgb();
}
// определение разряда
void pickDigit(int x)
{
digitalWrite(d1, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d4, HIGH);
switch(x)
{
case 0:
digitalWrite(d1, LOW); //включаем d1
break;
case 1:
digitalWrite(d2, LOW); //включаем d2
break;
case 2:
digitalWrite(d3, LOW); //включаем d3
break;
default:
digitalWrite(d4, LOW); //включаем d4
break;
}
}
// определение символа (цифры)
void pickNumber(int x)
{
switch(x)
{
default:
zero();
break;
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
case 7:
seven();
break;
case 8:
eight();
break;
case 9:
nine();
break;
}
}
// очистка
void clearLEDs()
{
digitalWrite(a, LOW);
digitalWrite(b, LOW);
digitalWrite(c, LOW);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
// вывод 0
void zero()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
// вывод 1
void one()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, LOW);
}
// вывод 2
void two()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, LOW);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// вывод 3
void three()
{
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// вывод 4
void four()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, LOW);
digitalWrite(g, HIGH);
}
// вывод 5
void five()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// вывод 6
void six()
{
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// вывод 7
void seven()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, LOW);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, LOW);
}
// вывод 8
void eight()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, HIGH);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
// вывод 9
void nine()
{
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
digitalWrite(c, HIGH);
digitalWrite(d, HIGH);
digitalWrite(e, LOW);
digitalWrite(f, HIGH);
digitalWrite(g, HIGH);
}
void rgb()
{
if (count <= 20);
digitalWrite(gled, HIGH);
else
digitalWrite(gled, LOW);
}
// счетчик
void add()
{
count ++;
if(count == 10)
{
count = 0;
n++;
if(n == 10000)
{
n = 0;
}
}
}
}