Hallo freunde
Ich probiere mich gerade an einer IR Fernbedienung. Es klappt auch alles super, ich schalte damit meine Software Uhr wärend des betriebs, also ich kann die stunden, Minuten und Sekunden vor oder zurück stellen, das macht mir keine Probleme. Jedoch ist an der fernbedienung oben ein Tastenfeld für vor, zurück und seitliches schalten, diese Tasten möchte ich gerne so schalten das wenn ich die Taste dauernd gedrückt halte die Uhrzeit auch durchgehend vor oder zurück läuft. jedoch muss ich den Taster jedesmal neu dücken um z.B.1 Std vor oder zurück zu springen. Da wenn ich den Taster dauernd gedrückt halte jedesmal nur um eine Stelle weitergesprungen wird in der Zeit. obwohl im Serielen Monitor angzeigt wird das der Code der Taste dauernd ausgegeben wird. Ich stelle einmal ein Bild der Fernbedienung ein und en Sketch.
#include <FastSPI_LED2.h>
#include <IRremote.h>
#define NUM_LEDS 5
#define DATA_PIN A4
CRGB leds[NUM_LEDS];
char time[]=__TIME__;
int stunden,minuten,sekunden;
int farbe;
int satt;
int hell;
int RECV_PIN = 11; //define input pin on Arduino
int ledpin = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;
void tickOneSecond() // UHR laufen lassen
{
//Uhrzeite berechnen
if (sekunden == 60) {sekunden=0;minuten++;}
if (minuten == 60) {minuten=0;stunden++;}
if (stunden == 24) {stunden=0;}
analogWrite(ledpin,255);
}
void logofarbwechsel()
{
farbe=255/stunden*3;
satt=255;
hell=60;
}
void setup()
{
pinMode(ledpin,OUTPUT);
Serial.begin(9600);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
for (int i=0;i < NUM_LEDS; i++) {leds[i] = CHSV(255,0,0);}
stunden=atoi(time);
minuten=atoi(&time[3]);
sekunden=atoi(&time[6]);
/*
stunden = 2; // wenn Uhr von Hand gestellt wird
minuten = 0;
sekunden = 0;
*/
irrecv.enableIRIn(); // Start the receiver
pinMode(ledpin,OUTPUT);
}
unsigned long alteSekunde;
void loop() {
//for (int i=0;i < NUM_LEDS; i++) {leds[i] = CHSV(0,0,0);}
if (irrecv.decode(&results)) {
FastLED.show();
Serial.println(results.value,HEX);
if (results.value == 0xFF6897) //Taste 1
{
stunden=stunden+1;
digitalWrite(ledpin,HIGH);
leds[0] = CHSV(100,255,60);
}
if (results.value == 0xFF9867) //Taste 2
{
stunden=stunden-1;
leds[1] = CHSV(100,255,60);
}
if (results.value == 0xFFB04F) //Taste 3
{
minuten=minuten+1;
leds[2] = CHSV(100,255,60);
}
if (results.value == 0xFF30Cf) //Taste 4
{
minuten=minuten-1;
leds[3] = CHSV(100,255,60);
}
if (results.value == 0xFF18E7) //Taste 5
{
sekunden=sekunden+1;
leds[4] = CHSV(100,255,60);
}
if (results.value == 0xFF7A85) //Taste 6
{
sekunden=sekunden-1;
}
if (results.value == 0xFF10EF) //Taste 7
{
logofarbwechsel();
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CHSV(farbe,satt,hell);}
}
/*
if (results.value == 0xFF38C7) //Taste 8
if (results.value == 0xFF5AA5) //Taste 9
if (results.value == 0xFF4AB5) //Taste 0 für Aus
*/
irrecv.resume(); // Receive the next value
}
if ((stunden == 12) or (stunden == 17)){leds[0] = CHSV(255,250,60);}
if ((stunden == 13) or (stunden == 18)){leds[1] = CHSV(255,250,60);}
if ((stunden == 14) or (stunden == 19)){leds[2] = CHSV(255,250,60);}
if ((stunden == 15) or (stunden == 20)){leds[3] = CHSV(255,250,60);}
if ((stunden == 16) or (stunden == 21)){leds[4] = CHSV(255,250,60);}
if ((stunden >= 22) or (stunden <= 11)){for (int i=0;i < NUM_LEDS; i++) {leds[i] = CHSV(0,0,0);}}
if (alteSekunde==millis()/1000) return; // selbe Sekunde, loop verlassen
analogWrite(ledpin,LOW);
delay(100);
alteSekunde=millis()/1000;
tickOneSecond(); // Uhrzeit weiterticken lassen
sekunden++; // Sekundenzähler für UHR
FastLED.show();
Serial.print("Uhreit: Std. ");
Serial.print(stunden);
Serial.print(" Min. ");
Serial.print(minuten);
Serial.print(" Sek. ");
Serial.print(sekunden);
Serial.println(" ");
}


