05-03-2018, 19:16
(Ten post był ostatnio modyfikowany: 05-03-2018, 20:00 przez majsterek.
Powód edycji: Rozwiązanie problemu
)
Witam, mój problem polega na tym, że chcę sterować diodą LED za pomocą pilota od TV. Załączanie diody, regulacja jasności i wyłącznie mam na tą chwilę ogarnięte, lecz chcę, żeby przy zadanej wartości dioda zaczęła mrugać, sygnalizując np. 1/2 jasności, następnie 3/4, po czym można by dalej zmieniać jasność na "-" jak i na "+". próbowałem różnych komend i warunków, lecz nie mogę znaleźć nic działającego :/.
Poniżej wklejam kod z arduino, a w liniach 40-47 jest moje kombinowanie, które nie działa. Czy moje myślenie jest dobre?
Pozdrawiam, Krystian.
Pojawiło się rozwiązanie problemu. Wystarczy sama funkcja if (bez do...while).
Poniżej wklejam kod z arduino, a w liniach 40-47 jest moje kombinowanie, które nie działa. Czy moje myślenie jest dobre?
Kod:
#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;
#define diodaPin 5
int jasnosc = 0;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(diodaPin, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
switch (results.value) {
case 0x10410:
if (jasnosc < 255) {
jasnosc = jasnosc + 5;
}
Serial.println(jasnosc);
delay(20);
analogWrite(diodaPin, jasnosc);
break;
case 0x10411:
if (jasnosc > 0) {
jasnosc = jasnosc - 5;
}
Serial.println(jasnosc);
delay(20);
analogWrite(diodaPin, jasnosc);
break;
if (jasnosc==60); //linia 40
do{
analogWrite(diodaPin, LOW);
delay(500);
analogWrite(diodaPin, HIGH);
delay(500);
}
while (jasnosc == 60); //linia 47
}
irrecv.resume();
}
}
Pojawiło się rozwiązanie problemu. Wystarczy sama funkcja if (bez do...while).
Kod:
#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;
#define diodaPin 5
int jasnosc = 0;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(diodaPin, OUTPUT);
}
void loop() {
if (jasnosc == 245)
{
digitalWrite(diodaPin, LOW);
delay(50);
analogWrite(diodaPin, jasnosc);
delay(50);
}
if (irrecv.decode(&results)) {
switch (results.value) {
case 0x10410:
if (jasnosc < 255) {
jasnosc = jasnosc + 5;
}
Serial.println(jasnosc);
delay(20);
analogWrite(diodaPin, jasnosc);
break;
case 0x10411:
if (jasnosc > 0) {
jasnosc = jasnosc - 5;
}
Serial.println(jasnosc);
delay(20);
analogWrite(diodaPin, jasnosc);
break;
}
irrecv.resume();
}
}