#include <IRremote.h>
IRrecv IR(11);
int ledPin = 8;
void setup() {
// put your setup code here, to run once:
IR.enableIRIn();
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (IR.decode()) {
Serial.println(IR.decodedIRData.decodedRawData, HEX);
if (IR.decodedIRData.decodedRawData == 0xB946FF00) {
digitalWrite.(ledPin, HIGH);
}
if (IR.decodedIRData.decodedRawData == 0xEA15FF00) {
digitalWrite.(ledPin, LOW);
}
delay(200);
IR.resume();
}
}
und jetzt bekomme ich diese Fehlermeldung:
C:\Users\Unbekannt\AppData\Local\Temp\.arduinoIDE-unsaved2024014-9228-jsammq.n5gia\sketch_jan14a\sketch_jan14a.ino: In function 'void loop()':
C:\Users\Unbekannt\AppData\Local\Temp\.arduinoIDE-unsaved2024014-9228-jsammq.n5gia\sketch_jan14a\sketch_jan14a.ino:18:20: error: expected unqualified-id before '(' token
digitalWrite.(ledPin, HIGH);
^
C:\Users\Unbekannt\AppData\Local\Temp\.arduinoIDE-unsaved2024014-9228-jsammq.n5gia\sketch_jan14a\sketch_jan14a.ino:21:20: error: expected unqualified-id before '(' token
digitalWrite.(ledPin, LOW);
^
exit status 1
Compilation error: expected unqualified-id before '(' token
Manche von euch werden vielleicht jetzt sagen der Fehler ist doch eh eindeutig aber ich weiß leider nicht was ich falsch gemacht habe.
@wno158
noch eine Frage: hab den Code jetzt erweitert:
#include <IRremote.h>
IRrecv IR(11);
#define BLUE 3
#define GREEN 5
#define RED 6
void setup() {
// put your setup code here, to run once:
IR.enableIRIn();
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}
int redValue;
int greenValue;
int blueValue;
void loop() {
// put your main code here, to run repeatedly:
if (IR.decode()) {
Serial.println(IR.decodedIRData.decodedRawData, HEX);
if (IR.decodedIRData.decodedRawData == 0xF30CFF00) {
digitalWrite(BLUE, HIGH);
}
if (IR.decodedIRData.decodedRawData == 0xE718FF00) {
digitalWrite(BLUE, LOW);
}
if (IR.decodedIRData.decodedRawData == 0xF708FF00) {
digitalWrite(RED, HIGH);
}
if (IR.decodedIRData.decodedRawData == 0xE31CFF00) {
digitalWrite(RED, LOW);
}
if (IR.decodedIRData.decodedRawData == 0xBD42FF00) {
digitalWrite(GREEN, HIGH);
}
if (IR.decodedIRData.decodedRawData == 0xAD52FF00) {
digitalWrite(GREEN, LOW);
}
if (IR.decodedIRData.decodedRawData == 0xBA45FF00) {
#define delayTime 10 // fading time between colors
redValue = 255; // choose a value between 1 and 255 to change the color.
greenValue = 0;
blueValue = 0;
// this is unnecessary as we've either turned on RED in SETUP
// or in the previous loop ... regardless, this turns RED off
// analogWrite(RED, 0);
// delay(1000);
for (int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
{
redValue -= 1;
greenValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(RED, 255 - redValue);
// analogWrite(GREEN, 255 - greenValue);
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
delay(delayTime);
}
redValue = 0;
greenValue = 255;
blueValue = 0;
for (int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
{
greenValue -= 1;
blueValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(GREEN, 255 - greenValue);
// analogWrite(BLUE, 255 - blueValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(delayTime);
}
redValue = 0;
greenValue = 0;
blueValue = 255;
for (int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
{
// The following code has been rearranged to match the other two similar sections
blueValue -= 1;
redValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(BLUE, 255 - blueValue);
// analogWrite(RED, 255 - redValue);
analogWrite(BLUE, blueValue);
analogWrite(RED, redValue);
delay(delayTime);
}
}
if (IR.decodedIRData.decodedRawData == 0xB847FF00) {
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
}
delay(200);
IR.resume();
}
}
und das mit den einzelnen Farben ein aus funktioniert ja super. Aber sobald ich den Knopf für das Farbwechseln drücke fängt die LED zwar an wird aber nach ein paar Farben rot und geht nicht mehr weiter.
Hast du vielleicht eine Ahnung woran das liegen könnte?
Deine drei for-Schleifen lassen doch die Farbe von Rot zu Grün, gefolgt zu Blau und wieder gefolgt zu Rot wechseln. Der Code ist an der Stelle abgearbeitet. Was soll da weiter gehen?
(Auch werden dich diese Schleifen nicht glücklich machen, da sie blockieren, und in dieser Zeit keine Eingabe möglich ist)
Ahja stimmt die wiederholen sich ja nicht vielleicht eine Idee wie die Led die ganze Zeit Farben wechselt und sobald man einen gewissen Knopf drückt das sie sich wieder auschaltet?
Aber danke schonmal!
#include <IRremote.h>
IRrecv IR(11);
#define BLUE 3
#define GREEN 5
#define RED 6
bool lauflicht = false;;
void setup()
{
// put your setup code here, to run once:
IR.enableIRIn();
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}
int redValue;
int greenValue;
int blueValue;
void laufLicht()
{
#define delayTime 10 // fading time between colors
redValue = 255; // choose a value between 1 and 255 to change the color.
greenValue = 0;
blueValue = 0;
// this is unnecessary as we've either turned on RED in SETUP
// or in the previous loop ... regardless, this turns RED off
// analogWrite(RED, 0);
// delay(1000);
for (int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
{
redValue -= 1;
greenValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(RED, 255 - redValue);
// analogWrite(GREEN, 255 - greenValue);
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
delay(delayTime);
}
redValue = 0;
greenValue = 255;
blueValue = 0;
for (int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
{
greenValue -= 1;
blueValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(GREEN, 255 - greenValue);
// analogWrite(BLUE, 255 - blueValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
delay(delayTime);
}
redValue = 0;
greenValue = 0;
blueValue = 255;
for (int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
{
// The following code has been rearranged to match the other two similar sections
blueValue -= 1;
redValue += 1;
// The following was reversed, counting in the wrong directions
// analogWrite(BLUE, 255 - blueValue);
// analogWrite(RED, 255 - redValue);
analogWrite(BLUE, blueValue);
analogWrite(RED, redValue);
delay(delayTime);
}
}
void loop()
{
// put your main code here, to run repeatedly:
if (IR.decode())
{
lauflicht = false;
Serial.println(IR.decodedIRData.decodedRawData, HEX);
switch (IR.decodedIRData.decodedRawData)
{
case 0xF30CFF00:
digitalWrite(BLUE, HIGH);
break;
case 0xE718FF00:
digitalWrite(BLUE, LOW);
break;
case 0xF708FF00:
digitalWrite(RED, HIGH);
break;
case 0xE31CFF00:
digitalWrite(RED, LOW);
break;
case 0xBD42FF00:
digitalWrite(GREEN, HIGH);
break;
case 0xAD52FF00:
digitalWrite(GREEN, LOW);
break;
case 0xBA45FF00:
lauflicht = true;
break;
case 0xB847FF00:
{
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
}
break;
}
IR.resume();
}
if (lauflicht)
{ laufLicht(); }
}
Du musst das Lauflicht noch auflösen.
Die Schleifen müssen da raus und als Schrittkette umgebaut werdren.
Keine delays verwenden, Du machst Dir damit Deine IR-Abfrage kaputt.
Die define muessen insgesamt raus.
Was den Code auflösen, oder das was ich Dir vorgelegt habe?
Letzteres ist nur Dein Code um die ganzen ifs erleichtert und das Lauflicht lauffähig gemacht mit einem Merker.
Nochmal: Der Code ist von Dir. Die Prüfung auf den IR-Code habe ich von if auf switch/case umgestellt. Nicht mehr. Das ist also das selbe, wie Du vorher auch hattest, nur dass nicht jeder if ausgeführt wird, sondern vorher festgestellt wird (swicth) was ausgeführt werden soll udn nur dieser Zweig dann abgearbeitet wird. (case)
Im Bereich wo Du Dein Luflicht hast, setze ich eine Variable und diese bleibt erhalten, bis Du irgendwann wieder eine Taste drückst.
Damit bleibt das Lauflich ständig am laufen, auch wenn Du die dazugehörige Taste loslässt
Wenn ich Dir das Lauflicht blockadefrei umschreiben soll, kann ich das versuchen noch in der kurzen Zeit zu machen, aber für mich ist hier gleich Schluß...
// edit - schaff ich nicht mehr. Bring ich ggfls. morgen mit.
Na ja, was state für Werte annehmen kann und was die bedeuten, müsste ich mehr Arbeit reinstecken als mir lieb wäre.
Und warum es zusätzlich noch bool lauflicht als Zustandsvariable gibt?
(Warum-Fragen sollte man nur 4jährigen zugestehen, diese Frage ziehe ich zurück)
Da müsste ich erstmal state verstehen, um zu wissen, ob das nicht nur ein zusätzlicher Zustand ist. Und wenn das schon selbsterklärend ist, lass ich es lieber.
Das LL wird durch einen IR-Code aktiviert.
Im Gegensatz zu allen anderen IR-Codes, die nur einen Schaltzustand auf den LED auslösen, muss der Zustand erhalten bleiben.
Es ist unwichtig, was state macht.
Erhalte den Zustand ohne Merker.
Das weiss ich auch nicht, denn ich hab keine Hardware.
Aber ein paar Serielle Ausgaben sollten evtl. Licht ins Dunkel bringen.
Also versuchen wir mal und schaun, was auf dem Serielen Monitor rauskommt:
#include <IRremote.h>
IRrecv IR(11);
const byte BLUE = 3;
const byte GREEN = 5;
const byte RED = 6;
bool lauflicht = false;
const unsigned long delayTime = 10;
unsigned long lastMillis;
byte state;
void setup()
{
// put your setup code here, to run once:
IR.enableIRIn();
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
Serial.begin(9600);
}
byte redValue;
byte greenValue;
byte blueValue;
//
void loop()
{
checkIR();
if (lauflicht)
{ laufLicht(); }
}
//
void checkIR()
{
// put your main code here, to run repeatedly:
if (IR.decode())
{
Serial.println(F("Decode aktiv"));
lauflicht = false;
Serial.println(IR.decodedIRData.decodedRawData, HEX);
switch (IR.decodedIRData.decodedRawData)
{
case 0xF30CFF00:
digitalWrite(BLUE, HIGH);
break;
case 0xE718FF00:
digitalWrite(BLUE, LOW);
break;
case 0xF708FF00:
digitalWrite(RED, HIGH);
break;
case 0xE31CFF00:
digitalWrite(RED, LOW);
break;
case 0xBD42FF00:
digitalWrite(GREEN, HIGH);
break;
case 0xAD52FF00:
digitalWrite(GREEN, LOW);
break;
case 0xBA45FF00:
Serial.println(F("Lauflicht aktiviert"));
lauflicht = true;
state = 0;
break;
case 0xB847FF00:
{
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
digitalWrite(RED, LOW);
}
break;
}
IR.resume();
}
}
//
void laufLicht()
{
if (millis() - lastMillis > delayTime)
{
lastMillis = millis();
Serial.print(F("Next Step on case: "));
Serial.println(state);
switch (state)
{
case 0:
redValue = 255; // choose a value between 1 and 255 to change the color.
greenValue = 0;
blueValue = 0;
state++;
break;
case 1:
if (greenValue < 255)
{ greenValue++; }
if (redValue)
{ redValue--; }
else
{
state++;
}
break;
case 2:
if (blueValue < 255)
{ blueValue++; }
if (greenValue)
{
greenValue--;
}
else
{
state++;
}
break;
case 3:
if (redValue < 255)
{ redValue++; }
if (blueValue)
{
blueValue--;
}
else
{
state++;
}
break;
default:
state = 0;
break;
}
analogWrite(RED, redValue);
analogWrite(GREEN, greenValue);
analogWrite(BLUE, blueValue);
}
}