Code funktioniert nicht

Hallo,
hab gerade diesen Code geschreiben:

#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.

Das Interessante an der Fehlermeldung ist das before '('.
Vor der öffnenden Klammer hast Du einen Punkt - der hat da nix zu suchen.

Oh. Ups! Stimmt. Danke!!

@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!

Ja, die Forschleifen und das delay durch Statemaschiene(n) ersetzen und mit millis() arbeiten.

#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.

Danke, aber das ist mir leider zu kompliziert.

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.

Ich bin ja noch ziemlich neu hier und habe auch (fast) keinerlei Programmierkenntnisse und deswegen versteh ich da gerade fast nur Bahnhof.

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 :slight_smile:
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.

Das ist nicht schlimm. Jeder hat mal angefangen.
Ändern an dem Zustand kannst nur du etwas.

Tipp: Fange klein an. Wenn du etwas nicht verstehst, Frage explizit danach.

Beschäftige dich mal mit Beispielen und Tutorial zum Thema Statemachine und Blink without Delay.

Benenne Dinge die du nicht verstehst. Mit Aussagen „Ist mir zu schwierig“ und „verstehe nur Bahnhof“ kann dir niemand helfen.

Auch kannst du nach gewissen Dingen googeln, die du nicht verstehst.

Nimm mal den und spiel den auf.

#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())
  {
    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;
        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();
    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);
  }
}

Es sollte selbsterklärend sein.

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)

Hast Du ja nicht nötig.

Bau mir das ohne Merker.

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.

state ist nur ein schalter.

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.

Ich weiß nicht ob das jetzt mein Fehler ist aber wenn ich jetzt die selbe Taste drücken wird die Led rot und bleibt auch so.

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);
  }
}