ehenkes
09.07.2020, 13:01
Ich reagiere auf Code der Fernbedienung. Das funktioniert auch gut.
Wenn ich mit
uint8_t getTaste(void)
{
uint8_t FB_TASTE = 0;
irco_update();
gfx_move(0,0);
gfx_print_text("RC5: ");
uint8_t REMOTE_CODE = LOBYTE(irco_rc5_cmd);
gfx_move(30,0);
print_hex(HIBYTE(irco_rc5_cmd)); //erster Druck: 0x38 zweiter Druck: 0x30 (für zweistellige Zahlen)
print_hex(REMOTE_CODE);
// Fernbedienung Einstellung: TV1, 023
switch(REMOTE_CODE)
{
case 0x01: //1 (Ziffernblock der Fernbedienung)
FB_TASTE = 1;
break;
case 0x02: //2
FB_TASTE = 2;
break;
case 0x03: //3
FB_TASTE = 3;
break;
case 0x04: //4
FB_TASTE = 4;
break;
case 0x05: //5
FB_TASTE = 5;
break;
case 0x06: //6
FB_TASTE = 6;
break;
case 0x07: //7
FB_TASTE = 7;
break;
case 0x08: //8
FB_TASTE = 8;
break;
case 0x09: //9
FB_TASTE = 9;
break;
case 0x00: //0
FB_TASTE = 0;
break;
case 0x20: //CH+ (Sonstige Tasten der Fernbedienung)
FB_TASTE = 10;
break;
case 0x21: //CH-
FB_TASTE = 11;
break;
case 0x10: //VOL+
FB_TASTE = 12;
break;
case 0x11: //VOL-
FB_TASTE = 13;
break;
case 0x0d: //LOUDSPEAKER OFF (green)
FB_TASTE = 14;
break;
case 0x0c: //ON/OFF (red)
FB_TASTE = 15;
break;
case 0x29: //PAUSE
FB_TASTE = 16;
break;
case 0x36: //STOP
FB_TASTE = 17;
break;
case 0x32: //RECORD (red point)
FB_TASTE = 18;
break;
case 0x3c: //REWIND (red)
FB_TASTE = 19;
break;
case 0x3f: //PLAY (yellow)
FB_TASTE = 20;
break;
case 0x2b: //FAST-FORWARD (blue)
FB_TASTE = 21;
break;
case 0x0b: //OK (green)
FB_TASTE = 22;
break;
case 0x37: //SCREEN2
FB_TASTE = 23;
break;
case 0x34: //SCREEN4
FB_TASTE = 24;
break;
}
return FB_TASTE;
}
und
// Fernbedienung abfragen
FB_TASTE = getTaste();
textout(20,56," ",0);
gfx_move(20,56);
print_hex(FB_TASTE);
// Reaktion auf Taste
switch(FB_TASTE)
{
case 12: //VOL+
SPEEDFACTOR++;
if(SPEEDFACTOR>MAXSPEEDFACTOR)
SPEEDFACTOR = MAXSPEEDFACTOR;
break;
case 13: //VOL-
if(SPEEDFACTOR>0)
SPEEDFACTOR--;
break;
}
in einer Endlos-while(1)-Schleife auf einen Tastendruck reagiere, wie kann ich das Signal/den RC5-Code auf einen Wert ohne Funktion zurücksetzen, damit es nicht bis zum Extremwert durchläuft? Geht das überhaupt?
Wenn ich mit
uint8_t getTaste(void)
{
uint8_t FB_TASTE = 0;
irco_update();
gfx_move(0,0);
gfx_print_text("RC5: ");
uint8_t REMOTE_CODE = LOBYTE(irco_rc5_cmd);
gfx_move(30,0);
print_hex(HIBYTE(irco_rc5_cmd)); //erster Druck: 0x38 zweiter Druck: 0x30 (für zweistellige Zahlen)
print_hex(REMOTE_CODE);
// Fernbedienung Einstellung: TV1, 023
switch(REMOTE_CODE)
{
case 0x01: //1 (Ziffernblock der Fernbedienung)
FB_TASTE = 1;
break;
case 0x02: //2
FB_TASTE = 2;
break;
case 0x03: //3
FB_TASTE = 3;
break;
case 0x04: //4
FB_TASTE = 4;
break;
case 0x05: //5
FB_TASTE = 5;
break;
case 0x06: //6
FB_TASTE = 6;
break;
case 0x07: //7
FB_TASTE = 7;
break;
case 0x08: //8
FB_TASTE = 8;
break;
case 0x09: //9
FB_TASTE = 9;
break;
case 0x00: //0
FB_TASTE = 0;
break;
case 0x20: //CH+ (Sonstige Tasten der Fernbedienung)
FB_TASTE = 10;
break;
case 0x21: //CH-
FB_TASTE = 11;
break;
case 0x10: //VOL+
FB_TASTE = 12;
break;
case 0x11: //VOL-
FB_TASTE = 13;
break;
case 0x0d: //LOUDSPEAKER OFF (green)
FB_TASTE = 14;
break;
case 0x0c: //ON/OFF (red)
FB_TASTE = 15;
break;
case 0x29: //PAUSE
FB_TASTE = 16;
break;
case 0x36: //STOP
FB_TASTE = 17;
break;
case 0x32: //RECORD (red point)
FB_TASTE = 18;
break;
case 0x3c: //REWIND (red)
FB_TASTE = 19;
break;
case 0x3f: //PLAY (yellow)
FB_TASTE = 20;
break;
case 0x2b: //FAST-FORWARD (blue)
FB_TASTE = 21;
break;
case 0x0b: //OK (green)
FB_TASTE = 22;
break;
case 0x37: //SCREEN2
FB_TASTE = 23;
break;
case 0x34: //SCREEN4
FB_TASTE = 24;
break;
}
return FB_TASTE;
}
und
// Fernbedienung abfragen
FB_TASTE = getTaste();
textout(20,56," ",0);
gfx_move(20,56);
print_hex(FB_TASTE);
// Reaktion auf Taste
switch(FB_TASTE)
{
case 12: //VOL+
SPEEDFACTOR++;
if(SPEEDFACTOR>MAXSPEEDFACTOR)
SPEEDFACTOR = MAXSPEEDFACTOR;
break;
case 13: //VOL-
if(SPEEDFACTOR>0)
SPEEDFACTOR--;
break;
}
in einer Endlos-while(1)-Schleife auf einen Tastendruck reagiere, wie kann ich das Signal/den RC5-Code auf einen Wert ohne Funktion zurücksetzen, damit es nicht bis zum Extremwert durchläuft? Geht das überhaupt?