Frage zu Methode eingabewert

Hallo,

Ich verwende Arduino noch nicht ewig und hätte eine frage zu einem kleinen mini Projekt.
Hier der Code:

//RGB DEKLARIEREN
byte LED_R = 6;
byte LED_G = 5;
byte LED_B = 3;

//RGB ZEITEN DEKLARIEREN
unsigned long StartTimeLed = 0;
const long interval = 1000;

int Led_Set = 0;


void setup() {
  pinMode(LED_B, OUTPUT);                       //BLAU VON RGB ERSTELLEN
  pinMode(LED_G, OUTPUT);                       //GRÜN VON RGB ERSTELLEN
  pinMode(LED_R, OUTPUT);                       //ROT VON RGB ERSTELLEN
  Serial.begin(9600);
}

void loop() {
  Blinken(1000, 200);
}

void LED_GELB() {
  analogWrite(LED_G, 100);
  analogWrite(LED_R, 100);
}
void LED_ROT() {
  analogWrite(LED_R, 100);
}

void LED_AUS() {
  analogWrite(LED_G, 0);
  analogWrite(LED_R, 0);
  analogWrite(LED_B, 0);
}

void Blinken(int Aus, int An) {
  if (millis() - StartTimeLed >= Aus && Led_Set == 0) {
    Serial.println("1");
    StartTimeLed = millis();
    LED_GELB();
    Led_Set = 1;
  }
  if (millis() - StartTimeLed >= An && Led_Set == 1) {
    Serial.println("2");
    StartTimeLed = millis();
    LED_AUS();
    Led_Set = 0;
  }
}

Ich würde gerne verschiedene Farben über die RGB LED blinken lassen. Das mit dem Blinken funktioniert schon, aber gibt es eine Möglichkeit die Farbe die blinkt über irgendein Eingabewert zu bestimmen?

L.g Niklas

du übergibst ja schon 2 Parameter: Aus und An.

Du könntest da einfach noch 3 weitere Parameter ergänzen, für
rot
gruen
blau

und direkt die übergebenen Farben von 0..255 in analogWrite schreiben.

Anmerkung:
Variablen mit kleinem Buchstaben beginnen lassen.
Funktionsnamen mit kleinem Buchstaben beginnen lassen.

1 Like

Übergeben im Seriellen Monitor; RotZahl - Komma - GruenZahl - Komma - BlauZahl (z.B. 127,127,127)

//RGB DEKLARIEREN
byte LED_R = 6;
byte LED_G = 5;
byte LED_B = 3;

//RGB ZEITEN DEKLARIEREN
unsigned long StartTimeLed = 0;
const long interval = 1000;

int Led_Set = 0;
byte r, g, b, index;
char buf[12] = {'\0'};

void setup()
{
  pinMode(LED_B, OUTPUT);                       //BLAU VON RGB ERSTELLEN
  pinMode(LED_G, OUTPUT);                       //GRÜN VON RGB ERSTELLEN
  pinMode(LED_R, OUTPUT);                       //ROT VON RGB ERSTELLEN
  Serial.begin(9600);
  r = 255;
  g = 127;
  b = 65;
}

void loop()
{
  farbeLesen();
  Blinken(1000, 200);
}

void farbeLesen()
{
  if (Serial.available() > 0)  // Es liegen Zeichen an
  {
    byte myByte = Serial.read(); // lese ein Zeichen
    if (!isControl(myByte))      // kein Control-Zeichen
    {
      buf[index] = myByte;       // nimm es in den Buffer auf
      index++;                   // nächste Position
    }
    else
    {
      if (myByte == '\n')        // Zeichen ist "NewLine"
      {
        r = atoi(strtok(buf, ",")); // Teile den Puffer an jedem Komma
        g = atoi(strtok(NULL, ","));
        b = atoi(strtok(NULL, ","));
        memset(buf, 0, sizeof(buf));// lösche den Puffer
        index = 0;                  // und fange an von vorn
      }
    }
  }
}
/*
  void LED_GELB() {
  analogWrite(LED_G, 100);
  analogWrite(LED_R, 100);
  }
  void LED_ROT() {
  analogWrite(LED_R, 100);
  }
*/
void LED(const byte rot, const byte gruen, const byte blau)
{
  analogWrite(LED_G, gruen);
  analogWrite(LED_R, rot);
  analogWrite(LED_B, blau);
}
void Blinken(int Aus, int An)
{
  if (millis() - StartTimeLed >= Aus && Led_Set == 0)
  {
    Serial.print(r); Serial.print(' ');
    Serial.print(g); Serial.print(' ');
    Serial.print(b); Serial.print(' ');
    Serial.println("1");
    StartTimeLed = millis();
    LED(r, g, b);
    Led_Set = 1;
  }
  if (millis() - StartTimeLed >= An && Led_Set == 1)
  {
    Serial.println("2");
    StartTimeLed = millis();
    LED(0, 0, 0);
    Led_Set = 0;
  }
}

Bitte schalte mal die Warnungen ein:
DATEI - VOREINSTELLUNGEN - Ausführliche Ausgabe während [x] Kompilierung
Und darunter Compiler-Warnungen: ALLE

1 Like

Entschuldigung für die späte Antwort und vielen dank für die Hilfe :slight_smile:

Habe es so wie du gesagt hast gemacht und es Funktioniert danke :slight_smile:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.