Осторожно, C++
#include <IRremote.h> // подключаем ИК-библиотеку
IRsend irsend; // по умолчанию 3й выход для ИК-диода
int remin; // объявляем ремотИн
int remout = 5; // объявляем ремотАут и назначаем ему порт 5
bool rem_state=false; // статус ремоут
unsigned long rem_Time; // время ремоута
int button1; // кнопка лепестка
int button1_state = 0; // статус кнопки лепестка
unsigned long button1_Time; //время нажатия кнопки на лепестке
int wheel; // кнопки руля
int wheel_state = 0; // статус кнопки руля
int wheel2_state = 0; // статус кнопки 2 руля
int wheel3_state = 0; // статус кнопки громкости вверх
int wheel4_state = 0; //статус кнопки громкости вниз
int wheel5_state = 0; // статус кнопки меню
unsigned long wheel_Time; //время нажатия кнопки руля
unsigned long wheel2_Time; //время нажатия кнопки 2 руля
unsigned long wheel3_Time; //время кнопки громкости вверх
unsigned long wheel4_Time; //время кнопки громкости вниз
unsigned long wheel5_Time; //время кнопки меню
void setup() {
// Serial.begin (9600);
pinMode(button1,INPUT); // лепесток = вход
pinMode(remout, OUTPUT); // ремАут - выход
pinMode(remin,INPUT); // ремИн - вход
digitalWrite(remout, LOW); // задаем начальное состояние реле "выключено"
pinMode(wheel,INPUT); // рулевой адаптер - вход
}
void loop() {
remin=analogRead(A2); // считываем показания на входе ремоута
button1=analogRead(A0); // считываю напряжение на входе с лепестка
wheel=analogRead(A4); // показания с адаптера руля
//------------------------------скетч выполнения программы REMOTE и команды play/pause--------------------
if(remin > 100) // если ремоут приходит - замыкаем реле
{
digitalWrite(remout, HIGH);
rem_Time = millis();
if (!rem_state) // если ремоут приходит - посылаем команду play
{
irsend.sendNEC(0x20202FD, 32);
rem_state=true;
}
}
if(remin < 100) // если ремоут пропадает, отключаем реле через 1 час
{
if(millis() - rem_Time > 3600000)
{
digitalWrite(remout, LOW);
}
if (rem_state) // если ремоут пропадает, посылаем команду PAUSE
{
irsend.sendNEC(0x20202FD, 32);
rem_state=false;
}
}
//----------------------------скетч передачи команд с лепестка-------------------------------
if (button1 < 840 && button1 > 820 && button1_state==0) // фиксируем время, когда последний раз кнопка была отпущена
{
button1_Time = millis();
}
if (millis()-button1_Time > 10 && millis()-button1_Time < 500 && button1 < 1015 && button1 > 1000) // если было короткое нажатие кнопки
{
button1_state=1; // статус кнопки: "было короткое нажатие"
}
if (button1 < 840 && button1 > 820 && button1_state==1 && wheel < 330 && wheel > 320) // если кнопка отпущена, но короткое нажатие было, посылаем сигнал
{
irsend.sendNEC(0x202B04F, 32);
button1_state=0; //обнуляем статус кнопки
}
if ( millis()- button1_Time > 300 && button1 < 1015 && button1 > 1000 && button1_state==1) // если зафиксировано долгое нажатие, посылаем сигнал пульта
{
irsend.sendNEC(0x20242BD, 32);
button1_state=2; // статус кнопки: зажата
}
if (button1 < 840 && button1 > 820 && button1_state==2) // если кнопка была зажата, но уже отпущена - обнуляем статус кнопки
{
button1_state=0;
}
if (button1 < 1000 && button1 > 980) // если лепесток повернут вперед, посылаем команду вверх
{irsend.sendNEC(0x202D02F, 32);
delay (100);
}
if(button1 < 970 && button1 > 945) // если лепесток повернут назад, посылаем команду вниз
{irsend.sendNEC(0x202708F, 32);
delay (100);
}
//----------------------------скетч передачи команд с руля---------------------------------
//volume up----------------------------------
if (wheel < 330 && wheel > 320 && wheel3_state==0)
{
wheel3_Time = millis();
}
if (millis()-wheel3_Time > 10 && millis()-wheel3_Time < 600 && wheel < 275 && wheel > 265)
{
wheel3_state=1;
}
if (wheel < 330 && wheel > 320 && wheel3_state==1)
{
irsend.sendNEC(0x202A857, 32); //громкость вверх 1 раз
wheel3_state=0;
}
if ( millis()- wheel3_Time > 600 && wheel < 275 && wheel > 265 && wheel3_state==1)
{
irsend.sendNEC(0x202A857, 32); //громкость вверх, если кнопка зажата
wheel3_state=2;
}
if (wheel < 275 && wheel > 265 && wheel3_state==2)
{
irsend.sendNEC(0x202A857, 32); //громкость вверх, если кнопка все еще зажата
}
if (wheel < 330 && wheel > 320 && wheel3_state==2)
{
wheel3_state=0;
}
//volume down----------------------------------------------
if (wheel < 330 && wheel > 320 && wheel4_state==0)
{
wheel4_Time = millis();
}
if (millis()-wheel4_Time > 20 && millis()-wheel4_Time <= 600 && wheel < 290 && wheel > 280)
{
wheel4_state=1;
}
if (wheel < 330 && wheel > 320 && wheel4_state==1)
{
irsend.sendNEC(0x20238C7, 32);
wheel4_state=0;
}
if ( millis()- wheel4_Time > 600 && wheel < 290 && wheel > 280 && wheel4_state==1)
{
irsend.sendNEC(0x20238C7, 32);
wheel4_state=2;
}
if (wheel < 290 && wheel > 280 && wheel4_state==2)
{
irsend.sendNEC(0x20238C7, 32);
}
if (wheel < 330 && wheel > 320 && wheel4_state==2)
{
wheel4_state=0;
}
//next track & right--------------------------------------------------
if (wheel < 330 && wheel > 320 && wheel_state==0)
{
wheel_Time = millis();
}
if (millis()-wheel_Time > 10 && millis()-wheel_Time < 600 && wheel < 231 && wheel > 225)
{
wheel_state=1;
}
if (wheel < 330 && wheel > 320 && wheel_state==1)
{
irsend.sendNEC(0x202F807, 32); // следующий трэк
delay (200);
wheel_state=0;
}
if ( millis()- wheel_Time > 600 && wheel < 231 && wheel > 225 && wheel_state==1) // если зафиксировано долгое нажатие, посылаем "RIGHT"
{
irsend.sendNEC(0x2028877, 32); //перемотка
wheel_state=2;
delay(500);
}
if (wheel < 231 && wheel > 225 && wheel_state==2)
{
irsend.sendNEC(0x2028877, 32); //перемотка
delay(500);
}
if (wheel < 330 && wheel > 325 && wheel_state==2)
{
wheel_state=0;
}
//prev track & left----------------------------------------------
if (wheel < 330 && wheel > 320 && wheel2_state==0)
{
wheel2_Time = millis();
}
if (millis()-wheel2_Time > 10 && millis()-wheel2_Time < 600 && wheel < 255 && wheel > 250)
{
wheel2_state=1;
}
if (wheel < 330 && wheel > 320 && wheel2_state==1)
{
irsend.sendNEC(0x2027887, 32); //предыдущий трэк
delay (200);
wheel2_state=0;
}
if ( millis()- wheel2_Time > 1000 && wheel < 255 && wheel > 250 && wheel2_state==1) // если зафиксировано долгое нажатие, посылаем "LEFT"
{
irsend.sendNEC(0x20208F7, 32); //перемотка назад
wheel2_state=2;
delay(500);
}
if (wheel < 255 && wheel > 250 && wheel2_state==2)
{
irsend.sendNEC(0x20208F7, 32); //перемотка назад
delay(500);
}
if (wheel < 330 && wheel > 320 && wheel2_state==2) // если кнопка была зажата, но уже отпущена - обнуляем статус кнопки
{
wheel2_state=0;
}
// play-pause----------------------------------------
if (wheel < 100 && wheel > 85)
{irsend.sendNEC(0x20202FD, 32);
delay (100);
}
// menu (home)-----------------------------------------
if (wheel < 330 && wheel > 320 && wheel5_state==0)
{
wheel5_Time = millis();
}
if (millis()-wheel5_Time > 10 && millis()-wheel5_Time < 600 && wheel < 235 && wheel >= 232) // если было короткое нажатие кнопки
{
wheel5_state=1;
}
if (wheel < 330 && wheel > 320 && wheel5_state==1) // если кнопка отпущена, но короткое нажатие было, посылаем сигнал пульта "OK"
{
wheel5_state=0;
}
// menu (green)-----------------------------------------
if ( millis()- wheel5_Time > 3000 && wheel < 235 && wheel >= 232 && wheel5_state==1)
{ irsend.sendNEC(0x20258A7, 32); // меню короткое нажатие+длинное
wheel5_state=2;
}
if (wheel < 330 && wheel > 320 && wheel5_state==2) // фиксируем время, когда последний раз кнопка2 была отпущена
{
wheel5_state=0;
}
if ( button1 < 1015 && button1 > 1000 && wheel < 235 && wheel >= 232)
{ irsend.sendNEC(0x202DA25, 32); //меню "грин" длинное нажатие + лепесток
delay (200);
}
}
Социальные закладки