2 Sketche in einem

Hallo zusammen,

ich habe einen Sketch für ein Auto.
In diesen Sktech will ich jetzt meine RGB-LED miteinfügen die als Lichter fungieren sollen.
Nur hab ich leider keine Ahnung wie ich das hinbekomme....
Gesteuert soll über "W" an PIN 9.

Hier die Sketche:

char t;
 
void setup() {
pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
Serial.begin(9600);
 
}
 
void loop() {
if(Serial.available()){
  t = Serial.read();
  Serial.println(t);
}
 
if(t == 'F'){            //move forward(all motors rotate in forward direction)
  digitalWrite(13,HIGH);
  digitalWrite(11,HIGH);
}
 
else if(t == 'B'){      //move reverse (all motors rotate in reverse direction)
  digitalWrite(12,HIGH);
  digitalWrite(10,HIGH);
}
 
else if(t == 'L'){      //turn right (left side motors rotate in forward direction, right side motors doesn't rotate)
  digitalWrite(11,HIGH);
}
 
else if(t == 'R'){      //turn left (right side motors rotate in forward direction, left side motors doesn't rotate)
  digitalWrite(13,HIGH);
}

else if(t == 'W'){    //turn led on or off)
  digitalWrite(9,HIGH);
}
else if(t == 'w'){
  digitalWrite(9,LOW);
}
 
else if(t == 'S'){      //STOP (all motors stop)
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
}
delay(100);
}

2.Sketch:

#include <FastLED.h>
 
#define NUM_LEDS 8
 
CRGB leds[NUM_LEDS*3];
 
void setup() {
  FastLED.addLeds<WS2812B, 2, GRB>(leds, 0, NUM_LEDS); //Heckblitzer Rot/Orange
  FastLED.addLeds<WS2812B, 3, GRB>(leds, NUM_LEDS, NUM_LEDS); // Mitte Blau
  FastLED.addLeds<WS2812B, 4, GRB>(leds, 2*NUM_LEDS, NUM_LEDS); // Frontblitzer  Weiß/Blau
 
  for(int i=0;i<NUM_LEDS*3;i++){  //NUM_LEDS*3 Antahl der Stripes bei 2 hier 2 eintragen
    leds[i] = CRGB::Black;
    FastLED.show();
  }
}
 
void loop() {
  // Heckblitzer Rot nicht blinkend, Orange blinkend
  leds[0] = CRGB::Red;
  leds[1] = CRGB::Red;
  leds[2] = CRGB::Orange;
  leds[3] = CRGB::Orange;
  leds[4] = CRGB::Orange;
  leds[5] = CRGB::Orange;
  leds[6] = CRGB::Red;
  leds[7] = CRGB::Red;
 
  // Mitte blinkend Blau
  leds[8] = CRGB::Blue;
  leds[9] = CRGB::Blue;
  leds[10] = CRGB::Blue;
  leds[11] = CRGB::Blue;
  leds[12] = CRGB::Blue;
  leds[13] = CRGB::Blue;
  leds[14] = CRGB::Blue;
  leds[15] = CRGB::Blue;
 
  // Frontblitzer Weiß nicht blinkend, Blau blinkend
  leds[16] = CRGB::Blue;
  leds[17] = CRGB::Blue;
  leds[18] = CRGB::White;
  leds[19] = CRGB::White;
  leds[20] = CRGB::White;
  leds[21] = CRGB::White;
  leds[22] = CRGB::Blue;
  leds[23] = CRGB::Blue;
  
  FastLED.show();
  delay(125);
  leds[0] = CRGB::Red;
  leds[1] = CRGB::Red;
  leds[2] = CRGB::Black;
  leds[3] = CRGB::Black;
  leds[4] = CRGB::Black;
  leds[5] = CRGB::Black;
  leds[6] = CRGB::Red;
  leds[7] = CRGB::Red;
 
  leds[8] = CRGB::Black;
  leds[9] = CRGB::Black;
  leds[10] = CRGB::Black;
  leds[11] = CRGB::Black;
  leds[12] = CRGB::Black;
  leds[13] = CRGB::Black;
  leds[14] = CRGB::Black;
  leds[15] = CRGB::Black;
 
  leds[16] = CRGB::Black;
  leds[17] = CRGB::Black;
  leds[18] = CRGB::White;
  leds[19] = CRGB::White;
  leds[20] = CRGB::White;
  leds[21] = CRGB::White;
  leds[22] = CRGB::Black;
  leds[23] = CRGB::Black;
  FastLED.show();
  delay(125);  
}

Grüße
MarkusVorformatierter Text

Die allgemeinen Foren sind englischsprachig. ich habe deinen Beitrag ins deutsche Forum verschoben.

Bitte nehmen Sie sich die Zeit, die Posting-Regeln zu lesen und Code-Tags zu Ihrem ersten Post hinzuzufügen.


Was sehen Sie, wenn Sie w oder W drücken?

Hallo,

wenn W gedrückt wird geht eine normale LED an oder wieder aus.
Diese soll jetzt gegen die RGB-LEDs ersetzt werden.

Soll ich den Code nochmals posten?

Nein, bearbeite einfach deinen ersten Post

Nein, das ist nicht nötig.
Den ersten Beitrag editieren (Bleistift-Symbol), den Code markieren und </> drücken.

Edit: J-M-L war schneller :slight_smile:

Ist erledigt:-)

versuch mal sowas:

(Ihre zweite Sketch hat eine seltsame Art, die LEDs zu deklarieren, nicht sicher, ob sie kompiliert wird)

#include <FastLED.h>
#define NUM_LEDS 8
CRGB leds[NUM_LEDS] = {CRGB::Black};

const byte leftMotorForwardPin = 13;    //left motors forward
const byte leftMotorReversedPin = 12;   //left motors reverse
const byte rightMotorForwardPin = 11;   //right motors forward
const byte rightMotorReversedPin = 10;  //right motors reverse

const byte ledDataPin = 2;

void setup() {
  pinMode(leftMotorForwardPin, OUTPUT);
  pinMode(leftMotorReversedPin, OUTPUT);
  pinMode(rightMotorForwardPin, OUTPUT);
  pinMode(rightMotorReversedPin, OUTPUT);

  FastLED.addLeds<WS2812B, ledDataPin, GRB> (leds, NUM_LEDS);
  FastLED.show();
}

void loop() {
  switch (Serial.read()) {
    case 'S': //  STOP (all motors stop)
      digitalWrite(leftMotorForwardPin, LOW);
      digitalWrite(leftMotorReversedPin, LOW);
      digitalWrite(rightMotorForwardPin, LOW);
      digitalWrite(rightMotorReversedPin, LOW);
      break;

    case 'F': //  move forward(all motors rotate in forward direction)
      digitalWrite(leftMotorForwardPin, HIGH);
      digitalWrite(rightMotorForwardPin, HIGH);
      break;

    case 'B': //  move reverse (all motors rotate in reverse direction)
      digitalWrite(leftMotorReversedPin, HIGH);
      digitalWrite(rightMotorReversedPin, HIGH);
      break;

    case 'L': //  turn right (left side motors rotate in forward direction, right side motors doesn't rotate)
      digitalWrite(rightMotorForwardPin, HIGH);
      break;

    case 'R': //  turn left (right side motors rotate in forward direction, left side motors doesn't rotate)
      digitalWrite(leftMotorForwardPin, HIGH);
      break;

    case 'W': //  turn led on
      leds[0] = CRGB::Red;
      leds[1] = CRGB::Red;
      leds[2] = CRGB::Orange;
      leds[3] = CRGB::Orange;
      leds[4] = CRGB::Orange;
      leds[5] = CRGB::Orange;
      leds[6] = CRGB::Red;
      leds[7] = CRGB::Red;
      FastLED.show();
      break;

    case 'w': //  turn led off
      for (int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB::Black;
      FastLED.show();
      break;

    default: // ignore
      break;
  }
}

Super Dankeschön.
Werde es gleich testen.

jetzt kam der Fehler...hmmmm

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xbb
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xbb
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xbb

Dies bedeutet nicht, dass der Code falsch ist, nur dass die IDE nicht "uploaden" konnte

Vielleicht haben Sie nicht die richtige Board oder Serial Port ausgewählt?

Ich gehe mal davon aus, dass dein Arduino nicht zum beschreiben resettet oder ein falsches Board in der IDE ausgewählt wurde.

hab das Board nochmals von der Steckplatine entfernt.
Jetzt ging es.
Aber der Code funktionert nicht es bewegt sich nichts...hmmm

Hab den 1 Sketch wieder aufgespielt dann gehts wieder

Teile doch mal den vollständigen ersten und zweiten Sketch mit uns oder baue dir Anweisungen ein welche dir im Seriellen Monitor anzeigen ob dein Tastenschlag überhaupt beim Arduino ankommt und ob er wirklich "W" ist.

Ups, ich habe die Serial.begin () verpasst

void setup() {
  pinMode(leftMotorForwardPin, OUTPUT);
  pinMode(leftMotorReversedPin, OUTPUT);
  pinMode(rightMotorForwardPin, OUTPUT);
  pinMode(rightMotorReversedPin, OUTPUT);

  FastLED.addLeds<WS2812B, ledDataPin, GRB> (leds, NUM_LEDS);
  FastLED.show();

  Serial.begin(9600); // <<<===== 
}

(mit 115200 Baud ist besser)

Wow jetzt hat es geklappt.
Jetzt muss ich nur noch schauen wie ich die 2 anderen LED rein bekomme

auf die gleiche Weise :slight_smile:

Für die danach folgende weitere Verfeinerung würde ich erwägen, die drei Stripes auch getrennt zu verwalten. Sie hängen ja eh' schon an verschiedenen Pins und das würde mittelfristig die Möglichkeit eröffnen, ohne großes Rumgerechne die Teile unabhängig voneinander mit verschiedenen Frequenzen blitzen zu lassen:
Statt

also eher

const byte ledPinFront = 4;
const byte ledPinMitte = 3;
const byte ledPinHeck = 2;

const byte NUM_LEDS_FRONT = 8;
const byte NUM_LEDS_MITTE = 8;
const byte NUM_LEDS_HECK = 8;

CRGB ledsFront[NUM_LEDS_FRONT];
CRGB ledsMitte[NUM_LEDS_MITTE];
CRGB ledsHeck[NUM_LEDS_HECK];

...
  FastLED.addLeds<WS2812B, ledPinHeck, GRB>(ledsHeck, 0, NUM_LEDS_HECK); //Heckblitzer Rot/Orange
  FastLED.addLeds<WS2812B, ledPinMitte, GRB>(ledsMitte, 0, NUM_LEDS_MITTE); // Mitte Blau
  FastLED.addLeds<WS2812B, ledPinFront, GRB>(ledsFront, 0, NUM_LEDS_FRONT); // Frontblitzer  Weiß/Blau

Bei der Gelegenheit vielleicht auch gleich die "MagicNumbers" aus dem Code entfernen - das erhöht Lesbarkeit und die Möglichkeit der Wiederverwendung in verwandten Projekten und verringert mögliche Fehler bei einer Änderung.

Wenn das geschafft ist, sollten die delay() noch rausoperiert werden :slight_smile:

Ah okay.
Und dann einfach wieder 0-7 die Farben hinterlegen oder?
Wie mach ich aber das mit dem blinken? Da brauch ich doch das delay(125) oder?