Здравствуйте. Есть такой код (там есть немного лишнего, но сейчас нету особой надобности убирать):
UPD: время от времени редактирую код (делаю "красивим" и "покороче", убираю лишнее)
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
const int kod1 = 5592323; //коди клавиш
const int kod2 = 5592332;
const int kod3 = 5592335;
const int kod4 = 5592368;
const int kod5 = 5592371;
const int kod6 = 5592380;
const int kod7 = 5592383;
const int kod8 = 5592512;
const int kod9 = 5592515;
const int kod10 = 5592524;
const int kod11 = 5592527;
const int kod12 = 5592560;
const int red = 12; //виходи на ленту
const int green = 11;
const int blue = 10;
int kod;
int i;
void setup() {
pinMode(2, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(2, 1);
digitalWrite(5, 0);
Serial.begin(9600);
mySwitch.enableReceive(1); // приемник на пин2
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
void loop() {
kod = mySwitch.getReceivedValue();
if (kod == kod1) {
analogWrite(red, 20);
analogWrite(green, 0);
analogWrite(blue, 0);
}
else if (kod == kod2) {
analogWrite(red, 0);
analogWrite(green, 20);
analogWrite(blue, 0);
}
else if (kod == kod3) {
analogWrite(red, 0);
analogWrite(green, 0);
analogWrite(blue, 20);
}
else if (kod == kod4) {
analogWrite(green, 0);
for (i = 0; i < 30; i++)
{
analogWrite(red, 30);
analogWrite(blue, i);
delay(30);
}
analogWrite(blue, 30);
analogWrite(red, 30);
delay(300);
for (i = 30; i > 0; i--)
{
analogWrite(blue, 30);
analogWrite(red, i);
delay(30);
}
analogWrite(blue, 30);
delay(300);
for (i = 0; i < 30; i++)
{
analogWrite(blue, 30);
analogWrite(green, i);
delay(30);
}
analogWrite(green, 30);
analogWrite(blue, 30);
delay(300);
for (i = 30; i > 0; i--)
{
analogWrite(green, 30);
analogWrite(blue, i);
delay(30);
}
analogWrite(green, 30);
delay(300);
for (i = 0; i < 30; i++)
{
analogWrite(green, 30);
analogWrite(red, i);
delay(30);
}
analogWrite(green, 30);
analogWrite(red, 30);
delay(300);
for (i = 30; i > 0; i--)
{
analogWrite(red, 30);
analogWrite(green, i);
delay(30);
}
analogWrite(red, 30);
delay(300);
}
else if (kod == kod5) {
for (i = 1; i < 40; i++) {
analogWrite(red, 50);
analogWrite(green, 0);
analogWrite(blue, 10 + i);
delay(40);
}
analogWrite(red, 50);
analogWrite(green, 0);
analogWrite(blue, 49);
delay(150);
for (i = 40; i > 1; i--) {
analogWrite(red, 50);
analogWrite(green, 0);
analogWrite(blue, 10 + i);
delay(40);
}
analogWrite(red, 50);
analogWrite(green, 0);
analogWrite(blue, 11);
delay(150);
}
else if ((kod == kod6) || (kod == kod7) || (kod == kod8) || (kod == kod9)
|| (kod == kod10) || (kod == kod11) || (kod == kod12)) {
analogWrite(red, 0);
analogWrite(green, 0);
analogWrite(blue, 0);
}
}
Суть: по нажатию кнопки на пульте менять режим свечение RGB ленты.
Если запущен режим типа "хамелеон" то выход с него не моментальный, а пока не пройдет весь "цикл цветов".
Как сделать моментальным?
Пока единственная идея добавить еще одну ардуину (самую простую). И что бы она при приходе кода пульта отличного от того, который пришел до нее ранее, она выдавала единичку на свой выход, который соединён с прерыванием основной ардуини (или с reset что бы наверняка).
Может есть другие варианты?
Видео работы сейчас:
1 - красный (переключается моментально)
2 - зеленый (переключается моментально)
3 - синий (переключается моментально)
4 - хамелеон (с него очень долго переключается )
5 - вариации розового (с него переключается быстрее, но всё равно долго)
Вот такой длинновопрос =)
Спасибо!
P.S. в сети много уроков как сделать ардуину пультом, но нету как сделать ардуино исполнительным устройством (ну вы поняли). Есть смысл расписать в песочнице как это сделать?