Супруга заказала колобочка. Сделал как мне кажется самый простенький и доступный вариант.
Картинный образ:
Схема:
Скетч:
//Сферробот ИК управление (пульт от триколора)
//////////
#include <IRremote.h>
#define LV_1 4 //
#define LV_2 5 //
#define PR_1 6 //
#define PR_2 7 //
#define LED 13 //
#define plus 12 //
#define minus 11 //
int RECV_PIN = 10; // Pin, an den der Empf�nger angeschlossen ist
IRrecv irrecv(RECV_PIN); // Instanz der Receiver-Klasse
decode_results results; // Zur Aufnahme des ermittelsten Codes
/////////
long Y=0;//переменная хранения моментов времени
void setup()
{
pinMode(LED,OUTPUT);//сигнальный светодиод
digitalWrite(LED,LOW);
//
pinMode(LV_1,OUTPUT);//мотор левый
digitalWrite(LV_1,LOW);
pinMode(LV_2,OUTPUT);//
digitalWrite(LV_2,LOW);
pinMode(PR_1,OUTPUT);//мотор правый
digitalWrite(PR_1,LOW);
pinMode(PR_2,OUTPUT);//
digitalWrite(PR_2,LOW);
pinMode(plus,OUTPUT);//
digitalWrite(plus,HIGH);// плюс питания ик приёмника
pinMode(minus,OUTPUT);//
digitalWrite(minus,LOW);// минус питания ик приёмника
//
irrecv.enableIRIn(); // Startet den Receiver
}
/////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
//
if (irrecv.decode(&results)) //Если произошло событие/кнопка была нажата
{
switch ( results.value )
{
case 0x8A857://исполнить команду вперёд
digitalWrite(LED,HIGH);digitalWrite(LV_1,HIGH);digitalWrite(LV_2,LOW); digitalWrite(PR_2,HIGH);digitalWrite(PR_1,LOW);
Y=millis();
break;
case 0x88877://исполнить команду назад
digitalWrite(LED,HIGH);digitalWrite(LV_1,LOW);digitalWrite(LV_2,HIGH); digitalWrite(PR_2,LOW);digitalWrite(PR_1,HIGH);
Y=millis();
break;
case 0x848B7://исполнить команду вправо
digitalWrite(LED,HIGH);digitalWrite(LV_1,HIGH);digitalWrite(LV_2,LOW); digitalWrite(PR_2,LOW);digitalWrite(PR_1,HIGH);
Y=millis();
break;
case 0x828D7://исполнить команду влево
digitalWrite(LED,HIGH);digitalWrite(LV_1,LOW);digitalWrite(LV_2,HIGH); digitalWrite(PR_2,HIGH);digitalWrite(PR_1,LOW);
Y=millis();
break;
case 0xFFFFFFFF:// если кнопку удерживают, то не отключать команду ещё 200 мс
Y=millis();
break;
}
irrecv.resume();//Считываем следующую значение/кнопку
}
//
if(millis()-Y>200){digitalWrite(LED,LOW);digitalWrite(LV_1,LOW);digitalWrite(LV_2,LOW); digitalWrite(PR_1,LOW);digitalWrite(PR_2,LOW);}//если кнопка не удерживается, то через 200 мс отключить команду
}
/////////////////////////////////////////////////////////////////////////////////////////////////