Szeretnék egy mennyzeti TV konzolt vezérelni Arduinoval és IR távirányítóval.
A vezérlés valami hasonló elgondolású:
Ha megnyomom a bekapcsoló gombot a távirányítón minden funkció működik, amíg ez nem történik meg semmit nem tudok csinálni.
Bekapcsolást követően tudom mozgatni a konzolt különböző irányokba (LE/FEL). Folyamatos gombnyomás esetén a mozgás folyamatosan történik.
Egyenlőre ledekkel kisérletezem, igy még konkrét mozgás nincs, csak ledeket kapcsolgatok a távirányítóval.
A problémám a következő:
Valamiért nem tudom, megoldani, hogy a bekapcsoló gomb megfelelően működjön, és ellássa a feladatát. Amikor csak a folyamatos mozgáshoz szükséges funkció fut le az Arduinon akkor működik, de amint bele illesztem az engedélyezéshez szükséges kódot gyakorlatilag egyik funkció sem csinálja azt amit kellene.
Kód :
Kód: Egész kijelölése
#include <IRremote.h>
int RECV_PIN = 11;
int LED_PIN2 = 2;
int LED_PIN3 = 4;
int LED_PIN4 = 3;
int LED_PIN5 = 5;
int LED_PIN6 = 7;
int kapcs = 8;
int SET;
int PRG;
int on_off;
int a;
String string1,string;
int cmd;
IRrecv irrecv(RECV_PIN);
decode_results results;
void bemenet_vizsgalat(){ //ellenőrzi, hogy az adott gomb folyamatosan van nyomva, vagy nem,
//folyamatos nyomás esetén amíg nyomom addig világít a led
a++;
if (irrecv.decode(&results)) {
// Serial.println(results.value);
a=0;
string1 =results.value;
if(results.value==4294967295){
string=string;
}else if(results.value<4294967295){
string= string1;
}
irrecv.resume();
Serial.print(string);
Serial.print(" full ");
}
else if(a>10){string="0";}
return string;
}
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(kapcs, INPUT);
pinMode(LED_PIN2, OUTPUT);
pinMode(LED_PIN3, OUTPUT);
pinMode(LED_PIN4, OUTPUT);
pinMode(LED_PIN5, OUTPUT);
pinMode(LED_PIN6, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) { //bekapcsolás vizsgálat--> ha a bekapcsoló gombot megnyomom az on_off változó értékét átírja 1-re, Led
//folyamatosan világít, mégegyszer megnyomom átírja on_off változót 0-ra Led nem világít
// Serial.println(results.value);
if(results.value==68157695)
{
if(on_off == 0)
{
digitalWrite(LED_PIN2, HIGH);
on_off = 1;
}
else if(on_off == 1)
{
digitalWrite(LED_PIN2,LOW);
on_off = 0;
}
}
irrecv.resume();
}
bemenet_vizsgalat(); //távirányítótól kapott információ vizsgálata
// Melyik gombra mi történjen
if(string=="68176055")cmd=2;
else if(string=="68208695")cmd=1;
else cmd=0;
switch(cmd){
case 0:
Serial.println("Nem mozog");
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN6, LOW);
break;
case 1:
Serial.println("LEFELÉ");
digitalWrite(LED_PIN4, HIGH);
digitalWrite(LED_PIN6, LOW);
break;
case 2:
Serial.println("Felfelé");
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN6, HIGH);
break;
}
}
Kérném a tapasztaltabb Arduino programozókat, segítsenek a hiba okának feltárásában.
Köszönöm előre is a segítséget.
Üdvözlettel
Szabolcs