Hilfe. Fehlermeldungen :o

Halbwegs gelöst

Hi.
Ich, als Anfänger, wollte gerade einfach mal etwas rumspielen, und hänge nun ziemlich fest…

delay(delayTime);
analogWrite (WHITE, 255);
analogWrite (RED, 0);

An der markierten Stelle bekomme ich die Fehlermeldung;
exit status 1
‘WHITE’ was not declared in this scope
Komischerweise, hatte er in den Zeilen davor kein Problem mit White…
Das Program hat auch vorher schon Funktioniert. Seitdem ich die Anzahl der LED´s verdoppelt habe, mag er nicht mehr :confused:
Trotz googlen bin ich da gerade schwer überfragt und bräuchte mal Hilfe.

Falls es hilft, einmal dass ganze Programm:

// Define Pins
#define BLUE 1
#define YELLOW 2
#define GREEN 3
#define RED 4
#define WHITE2 5
#define BLUE2 6
#define YELLOW2 7
#define GREEN2 8
#define RED2 9
#define WHITE2 10

void setup()
{
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(WHITE, OUTPUT);
  pinMode(RED2, OUTPUT);
  pinMode(GREEN2, OUTPUT);
  pinMode(BLUE2, OUTPUT);
  pinMode(YELLOW2, OUTPUT);
  pinMode(WHITE2, OUTPUT);

  digitalWrite(RED, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);
  digitalWrite(YELLOW, LOW);
  digitalWrite(WHITE, LOW);
  digitalWrite(RED2, LOW);
  digitalWrite(GREEN2, LOW);
  digitalWrite(BLUE2, LOW);
  digitalWrite(YELLOW2, LOW);
  digitalWrite(WHITE2, LOW);
}

// define variables
int redValue;
int greenValue;
int blueValue;
int yellowValue;
int whiteValue;
int red2Value;
int green2Value;
int blue2Value;
int yellow2Value;
int white2Value;
int i;

// main loop
void loop()
{
#define delayTime 100 // fading time between colors

  redValue = 0; // choose a value between 1 and 255 to change the color.
  greenValue = 0;
  blueValue = 0;
  yellowValue = 0;
  whiteValue = 0;


  for (int i = 0; i < 5 ; i++) {

    delay(delayTime);
    analogWrite (BLUE, 255);

    delay(delayTime);
    analogWrite (YELLOW, 255);

    delay(delayTime);
    analogWrite (GREEN, 255);

    delay(delayTime);
    analogWrite (RED, 255);

    delay(delayTime);
    analogWrite (WHITE, 255);

    delay(delayTime);
    analogWrite(BLUE, 0);
    analogWrite(YELLOW, 0);
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(WHITE, 0);

  }
  delay(delayTime);
  for (int i = 5; i < 10 ; i++) {

    analogWrite (BLUE, 255);

    delay(delayTime);
    analogWrite (YELLOW, 255);
    analogWrite (BLUE, 0);

    delay(delayTime);
    analogWrite (GREEN, 255);
    analogWrite (YELLOW, 0);

    delay(delayTime);
    analogWrite (RED, 255);
    analogWrite (GREEN, 0);

    delay(delayTime);
    analogWrite (WHITE, 255);
    analogWrite (RED, 0);

    delay(delayTime);
    analogWrite(WHITE, 0);

  }

}

Lösung:
Man sollte am Anfang auch White definieren, und nicht 2mal White2.
Aber warum fällt ihm so ein Fehler erst so spät auf?
Fall übrigens wer Tipps für die Programierung hat, freue ich mich immer mehr zu erfahren.

RGB_LED_Lauf.ino (2.14 KB)

franz_johan:
An der markierten Stelle bekomme ich die Fehlermeldung;
exit status 1
'WHITE' was not declared in this scope
Komischerweise, hatte er in den Zeilen davor kein Problem mit White...
Das Program hat auch vorher schon Funktioniert. Seitdem ich die Anzahl der LED´s verdoppelt habe, mag er nicht mehr :confused: ...
Trotz googlen bin ich da gerade schwer überfragt und bräuchte mal Hilfe.

Falls es hilft, einmal dass ganze Programm:

// Define Pins

#define BLUE 1
#define YELLOW 2
#define GREEN 3
#define RED 4
#define WHITE2 5
#define BLUE2 6
#define YELLOW2 7
#define GREEN2 8
#define RED2 9
#define WHITE2 10

Ganz klar, Du definierst 2 mal WHITE2 und genau 0 mal WHITE.
Vermutlich sollte das erste WHITE2 ein WHITE sein.

Gruß, Jürgen

franz_johan:
Aber warum fällt ihm so ein Fehler erst so spät auf?

Schalte mal in der IDE die ausführliche Ausgabe bei der Kompilierung ein, dann kommt mehr.

franz_johan:
Fall übrigens wer Tipps für die Programierung hat, freue ich mich immer mehr zu erfahren.

  • Vermeide delay, verwende millis zusammen mit einer Schrittkette (=endlicher Automat, = finite state machine).
  • Verwende Felder anstelle einzelner Variablen.
  • Unterscheide zwischen Konstanten und Variablen.
  • Verwende die richtigen Variablentypen.
  • Verwende beim UNO nicht Pin 1.
  • Verwende anstelle von vielen LEDs wenn möglich besser APA102.

Gut, Fehler selbst noch gefunden.

"Rubber Duck Debugging" scheint gut zu funktionieren. :slight_smile:

Gruß, Jürgen

Arbeitskollegen, die sich gerade bei der Arbeit langweilen, eignen sich hervorragend als Quietscheentchen-Ersatz :grin:

Die aktiven Mitglieder dieses Forums natürlich ebenso ...

Trotz googlen bin ich da gerade schwer überfragt und bräuchte mal Hilfe.

Und wieso kannte Google deinen Sketch noch nicht ?
Hast du den noch nicht veröffentlicht ?

Danke euch beiden, für die schnelle Antwort. Jetzt funktioniert auch alles.

agmue:
Schalte mal in der IDE die ausführliche Ausgabe bei der Kompilierung ein, dann kommt mehr.

  • Vermeide delay, verwende millis zusammen mit einer Schrittkette (=endlicher Automat, = finite state machine).
  • Verwende Felder anstelle einzelner Variablen.
  • Unterscheide zwischen Konstanten und Variablen.
  • Verwende die richtigen Variablentypen.
  • Verwende beim UNO nicht Pin 1.
  • Verwende anstelle von vielen LEDs wenn möglich besser APA102.

Frage 1: Wie soll ich millis nutzen? Gibt mir das nicht "nur" ne "vergangene Zeit" zurück?
Frage 2: Wie nutze ich Felder? In wiefern unterscheiden die sich von Variablen?
Frage 3: Wie genau meinst du das mit, Unterscheiden zwischen Konstanten und Variablen?
Frage 4: Welchen Variablentypen empfiehlst du mir? Hatte mit int BIS JETZT noch keine Probleme. :slight_smile:
Frage 5: Ich kann eben alle ab Pin 2 einstecken. Aber warum nicht Pin 1?
"Frage" 6: War jetzt erstmal nur zum Testen gedacht. Später wird umgerüstet auf nen LED Streifen. Hatte erst an WS2812B gedacht. Kannst du/ihr mir da was Empfehlen? (Also Chiptyp: APA102 oder WS2812B oder etc.)

Tut mir leid, wenn die Fragen jetzt in irgend einer Weise blöd sind, allerdings ist das mein erster Abend mit dem Chip, und sowas wie praxisorientiertes "Programmieren", wurde auf meiner Schule leider nie wirklich gemacht, im Info Unterricht.

Zu 1:
delay ist böse. In der Zeit macht der Microcontroller nix anderes als zu warten. Mag ja jetzt in Deinem Fall ja noch gehen. Aber spätestens wenn Du mit einem Tastendruck noch etwas bewirken möchtest, fällt Dir das ganze Ding auf die Füße. Dann musst Du nämlich so lange die Taste drücken bis Dein delay abgelaufen ist.
Normalerweise löst man sowas besser mit millis(). In der IDE gibt es das Beispiel BlinkWithoutDelay. Schau Dir das mal an und die schöne “Nachtwächtererklärung” https://forum.arduino.cc/index.php?topic=423688.0

Zu 5:
Pin 0 und Pin 1 gehen an die serielle Schnittstelle und wenn Du da was anklemmst, blockiert das eventuell die Verbindung zum Rechner. Also kein Upload vom Sketch, keine Ausgaben mit Serial.print…

Gruß, Jürgen

franz_johan:
Frage 1: Wie soll ich millis nutzen? Gibt mir das nicht "nur" ne "vergangene Zeit" zurück?
Frage 2: Wie nutze ich Felder? In wiefern unterscheiden die sich von Variablen?
Frage 3: Wie genau meinst du das mit, Unterscheiden zwischen Konstanten und Variablen?
Frage 4: Welchen Variablentypen empfiehlst du mir? Hatte mit int BIS JETZT noch keine Probleme. :slight_smile:
Frage 5: Ich kann eben alle ab Pin 2 einstecken. Aber warum nicht Pin 1?
"Frage" 6: War jetzt erstmal nur zum Testen gedacht. Später wird umgerüstet auf nen LED Streifen. Hatte erst an WS2812B gedacht. Kannst du/ihr mir da was Empfehlen? (Also Chiptyp: APA102 oder WS2812B oder etc.)

  • Deine Armbanduhr zeigt Dir die Zeit seit Mitternacht, millis die Zeit seit Reset. Selbst wenn Dein Freund in Australien lebt, funktioniert eine Verabredung "wir schicken uns in 10 Minuten eine Nachricht" ohne Probleme. Genau so funktioniert auch millis.
  • Felder sind eine Ansammlung von Variablen/Konstanten, die mittels Index angesprochen werden kann. Sowas wie pinmode kann dann mit einer Schleife erledigt werden.
  • Wenn Du versuchst, konstante Werte zu verändern, wird Dich der Kompiler auf diesen Fehler aufmerksam machen. Also const byte ledpin = 5;
  • Immer den zum Wertebereich passenden. Der Speicher eines µCs ist knapp, da sind Bytes, die immer 0 sind, Verschwendung.
  • siehe #7
  • Kommt drauf an, was Du vorhast. APA102 haben ein paar Vorteile, beispielsweise sind sie ca. zehnmal schneller bei Animationen und sind beim Timing unkritischer. Leider sind WS2812b weiter verbreitet und in mehr Bauformen erhältlich.

Und benutze #define nur, wenn du weisst was du tust und warum du es tust.

Danke euch.
Ihr habt mir sehr geholfen.
Bis auf die Sache mit dem delay und den Felder, habe ich das soweit verstanden und auch angewendet (hoffentlich richtig).
Zumindest funzt es. Die beiden Sachen, versuche ich mir noch anzulesen, damit ich auch wären ein Effekt läuft, umschalten kann.
Wenn ihr noch Verbesserungen habt, immer gerne her damit.

#include "IRremote.h"
// Define Pins
const byte BLUE     =2;
const byte YELLOW   =3;
const byte GREEN    =4;
const byte RED      =5;
const byte WHITE    =6;
const byte BLUE2    =7;
const byte YELLOW2  =8;
const byte GREEN2   =9;
const byte RED2     =10;
const byte DATA     =11;
const byte WHITE2   =12;
const byte FREE     =13;
// Define Timing
const int delayTimeEffects = 100;
const int delayTimeColor = 10000;
// Define HilfsVar
byte j = 0;

IRrecv irrecv(DATA);     // create instance of 'irrecv'
decode_results results;      // create instance of 'decode_results'

void setup()
{
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  pinMode(YELLOW, OUTPUT);
  pinMode(WHITE, OUTPUT);
  pinMode(RED2, OUTPUT);
  pinMode(GREEN2, OUTPUT);
  pinMode(BLUE2, OUTPUT);
  pinMode(YELLOW2, OUTPUT);
  pinMode(WHITE2, OUTPUT);

  digitalWrite(RED, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, LOW);
  digitalWrite(YELLOW, LOW);
  digitalWrite(WHITE, LOW);
  digitalWrite(RED2, LOW);
  digitalWrite(GREEN2, LOW);
  digitalWrite(BLUE2, LOW);
  digitalWrite(YELLOW2, LOW);
  digitalWrite(WHITE2, LOW);

  Serial.begin(9600);
  Serial.println("IR Receiver Button Decode");
  irrecv.enableIRIn(); // Start the receiver

}

// main loop
void Kette()
{
  Serial.println("1");
  for (byte i = 0; i < 5; i++)
  {
    delay(delayTimeEffects);
    analogWrite (BLUE, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW, 255);

    delay(delayTimeEffects);
    analogWrite (GREEN, 255);

    delay(delayTimeEffects);
    analogWrite (RED, 255);

    delay(delayTimeEffects);
    analogWrite (WHITE, 255);

    delay(delayTimeEffects);
    analogWrite (BLUE2, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 255);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 255);

    delay(delayTimeEffects);
    analogWrite (RED2, 255);

    delay(delayTimeEffects);
    analogWrite (WHITE2, 255);

    delay(delayTimeEffects);
    analogWrite(BLUE, 0);
    analogWrite(YELLOW, 0);
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(WHITE, 0);
    analogWrite(BLUE2, 0);
    analogWrite(YELLOW2, 0);
    analogWrite(GREEN2, 0);
    analogWrite(RED2, 0);
    analogWrite(WHITE2, 0);
    delay(delayTimeEffects);
  }
}
void Durchlauf()
{
  Serial.println("2");
  for (byte i = 0; i < 5; i++)
  {
    analogWrite (BLUE, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW, 255);
    analogWrite (BLUE, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN, 255);
    analogWrite (YELLOW, 0);

    delay(delayTimeEffects);
    analogWrite (RED, 255);
    analogWrite (GREEN, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE, 255);
    analogWrite (RED, 0);

    delay(delayTimeEffects);
    analogWrite(WHITE, 0);
    analogWrite (BLUE2, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 255);
    analogWrite (BLUE2, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 255);
    analogWrite (YELLOW2, 0);

    delay(delayTimeEffects);
    analogWrite (RED2, 255);
    analogWrite (GREEN2, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE2, 255);
    analogWrite (RED2, 0);

    delay(delayTimeEffects);
    analogWrite(WHITE2, 0);
  }
}

void Kette2()
{
  Serial.println("3");
  for (byte i = 0; i < 5; i++)
  {
    delay(delayTimeEffects);
    analogWrite (BLUE, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW, 255);

    delay(delayTimeEffects);
    analogWrite (GREEN, 255);

    delay(delayTimeEffects);
    analogWrite (RED, 255);

    delay(delayTimeEffects);
    analogWrite (WHITE, 255);

    delay(delayTimeEffects);
    analogWrite (BLUE2, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 255);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 255);

    delay(delayTimeEffects);
    analogWrite (RED2, 255);

    delay(delayTimeEffects);
    analogWrite (WHITE2, 255);

    //aus
    delay(delayTimeEffects);
    analogWrite (BLUE, 0);

    delay(delayTimeEffects);
    analogWrite (YELLOW, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN, 0);

    delay(delayTimeEffects);
    analogWrite (RED, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE, 0);

    delay(delayTimeEffects);
    analogWrite (BLUE2, 0);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 0);

    delay(delayTimeEffects);
    analogWrite (RED2, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE2, 0);
  }
}

void DurchlaufBounce() {
  Serial.println("4");
  analogWrite (BLUE, 255);
  for (byte i = 0; i < 5; i++)
  {
    delay(delayTimeEffects);
    analogWrite (YELLOW, 255);
    analogWrite (BLUE, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN, 255);
    analogWrite (YELLOW, 0);

    delay(delayTimeEffects);
    analogWrite (RED, 255);
    analogWrite (GREEN, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE, 255);
    analogWrite (RED, 0);

    delay(delayTimeEffects);
    analogWrite(WHITE, 0);
    analogWrite (BLUE2, 255);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 255);
    analogWrite (BLUE2, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 255);
    analogWrite (YELLOW2, 0);

    delay(delayTimeEffects);
    analogWrite (RED2, 255);
    analogWrite (GREEN2, 0);

    delay(delayTimeEffects);
    analogWrite (WHITE2, 255);
    analogWrite (RED2, 0);



    delay(delayTimeEffects);
    analogWrite (RED2, 255);
    analogWrite (WHITE2, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN2, 255);
    analogWrite (RED2, 0);

    delay(delayTimeEffects);
    analogWrite (YELLOW2, 255);
    analogWrite (GREEN2, 0);

    delay(delayTimeEffects);
    analogWrite (BLUE2, 255);
    analogWrite (YELLOW2, 0);

    delay(delayTimeEffects);
    analogWrite(BLUE2, 0);
    analogWrite (WHITE, 255);

    delay(delayTimeEffects);
    analogWrite (RED, 255);
    analogWrite (WHITE, 0);

    delay(delayTimeEffects);
    analogWrite (GREEN, 255);
    analogWrite (RED, 0);

    delay(delayTimeEffects);
    analogWrite (YELLOW, 255);
    analogWrite (GREEN, 0);

    delay(delayTimeEffects);
    analogWrite (BLUE, 255);
    analogWrite (YELLOW, 0);
  }
  delay(delayTimeEffects);
  analogWrite(BLUE, 0);
}

RGB_LED_Lauf.ino (10.4 KB)

void Weiss()
{
  Serial.println("VOL+");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (WHITE, 255);
    analogWrite (WHITE2, 255);
    delay(delayTimeColor);
    analogWrite (WHITE, 0);
    analogWrite (WHITE2, 0);
    }
  }

  void Rot()
{
  Serial.println("FUNC/STOP");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (RED, 255);
    analogWrite (RED2, 255); 
    delay(delayTimeColor);
    analogWrite (RED, 0);
    analogWrite (RED2, 0);
    }
  }

  void Gruen()
{
  Serial.println("FAST BACK");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (GREEN, 255);
    analogWrite (GREEN2, 255); 
    delay(delayTimeColor);
    analogWrite (GREEN, 0);
    analogWrite (GREEN2, 0);
    }
  }

  void Gelb()
{
  Serial.println("PAUSE");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (YELLOW, 255);
    analogWrite (YELLOW2, 255); 
    delay(delayTimeColor);
    analogWrite (YELLOW, 0);
    analogWrite (YELLOW2, 0);
    }
  }

  void Blau()
{
  Serial.println("FAST FORWARD");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (BLUE, 255);
    analogWrite (BLUE2, 255); 
    delay(delayTimeColor);
    analogWrite (BLUE, 0);
    analogWrite (BLUE2, 0);
    }
  }

  void Alle()
{
  Serial.println("ST/REPT");
  for (byte i = 0; i < 1; i++)
  {
    analogWrite (WHITE, 255);
    analogWrite (WHITE2, 255); 
    analogWrite (RED, 255);
    analogWrite (RED2, 255);
    analogWrite (GREEN, 255);
    analogWrite (GREEN2, 255);
    analogWrite (YELLOW, 255);
    analogWrite (YELLOW2, 255);
    analogWrite (BLUE, 255);
    analogWrite (BLUE2, 255);
    delay(delayTimeColor);
    analogWrite (WHITE, 0);
    analogWrite (WHITE2, 0); 
    analogWrite (RED, 0);
    analogWrite (RED2, 0);
    analogWrite (GREEN, 0);
    analogWrite (GREEN2, 0);
    analogWrite (YELLOW, 0);
    analogWrite (YELLOW2, 0);
    analogWrite (BLUE, 0);
    analogWrite (BLUE2, 0);
    }
  }

void translateIR() // takes action based on IR code received
{
  switch (results.value)
  {
    case 0xFFA25D: Serial.println("POWER"); break;
    case 0xFFE21D: j=2;                     break;
    case 0xFF629D: j=1;                     break;
    case 0xFF22DD: j=3;                     break;
    case 0xFF02FD: j=4;                     break;
    case 0xFFC23D: j=5;                     break;
    case 0xFFE01F: Serial.println("DOWN");  break;
    case 0xFFA857: Serial.println("VOL-");  break;
    case 0xFF906F: Serial.println("UP");    break;
    case 0xFF9867: Serial.println("EQ");    break;
    case 0xFFB04F: j=6;                     break;
    case 0xFF6897: Serial.println("0");     break;
    case 0xFF30CF: j=7;                     break;
    case 0xFF18E7: j=8;                     break;
    case 0xFF7A85: j=9;                     break;
    case 0xFF10EF: j=10;                     break;
    case 0xFF38C7: Serial.println("5");     break;
    case 0xFF5AA5: Serial.println("6");     break;
    case 0xFF42BD: Serial.println("7");     break;
    case 0xFF4AB5: Serial.println("8");     break;
    case 0xFF52AD: Serial.println("9");     break;
    case 0xFFFFFFFF: Serial.println(" REPEAT"); break;

    default:
      Serial.println(" other button   ");
  }// End Case
  delay(500); // Do not get immediate repeat
}

void loop()
{
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
    translateIR();
    irrecv.resume(); // receive the next value
  }
  else
   {
    switch (j)
    {
      case 1: Weiss();                 break;
      case 2: Rot();                   break;
      case 3: Gruen();                 break;
      case 4: Gelb();                  break;
      case 5: Blau();                  break;
      case 6: Alle();                  break;
      case 7: Kette();                 break;
      case 8: Durchlauf();             break;
      case 9: Kette2();                break;
      case 10: DurchlaufBounce();      break;
      }

    }
}

Mir ist natürlich bewusst, dass man das bestimmt auch iwie hätte kurzer machen können, aber das übersteigt aktuell meine Kompetenzen bei weitem :confused: . Aber was nicht ist, kann ja noch werden.

Unter Felder findet man wahrscheinlich wenig. zu Array schon viel mehr.
Statt
White
White2
White3
ecc

White[index]

So kannst Du mit einer Indexvariablen alle Elmente des Arrays abklappern.

analogWrite(BLUE, 0);
    analogWrite(YELLOW, 0);
    analogWrite(GREEN, 0);
    analogWrite(RED, 0);
    analogWrite(WHITE, 0);
    analogWrite(BLUE2, 0);
    analogWrite(YELLOW2, 0);
    analogWrite(GREEN2, 0);
    analogWrite(RED2, 0);
    analogWrite(WHITE2, 0);

Welchen Arduino hast Du der 10 analoge Ausgänge hat?

APA102 vs WS2812b
Der Unterschied ist das Dateninterface.
Der WS2812B hat ein Datensignal. 1 und 0 wird durch die Länge von HIGH und LOW Der Richteckspannung bei einer fixen Frequenz von 800kHz definiert.
Der APA102 hat ein Datensignal und ein Taktsignal. Die Daten am Datenkanal sind gültig beim L-H Flanke des Taktsignals. Dadurch kann die Taktfrequenz fast beliebig geändert werden.

Grüße Uwe

Danke dir.

uwefed:
Unter Felder findet man wahrscheinlich wenig. zu Array schon viel mehr.
Statt
White
White2
White3
ecc

White[index]

So kannst Du mit einer Indexvariablen alle Elmente des Arrays abklappern.

Lohnt sich das den bei 2 Pins pro Lampe? Also für jede Farbe ein Array? Komplett zusammenlegen geht nicht, da ich bei manchen Effekten die Lampen einzeln brauche.

Den Uno R3. Aber mir fällt gerade auf, das der 13 DIGITALE Ausgänge hat. Macxht das nen unterschied, wenn ich die LED´s mit digitalWrite statt analogWrite anspreche?

uwefed:
APA102 vs WS2812b
Der Unterschied ist das Dateninterface.
Der WS2812B hat ein Datensignal. 1 und 0 wird durch die Länge von HIGH und LOW Der Richteckspannung bei einer fixen Frequenz von 800kHz definiert.
Der APA102 hat ein Datensignal und ein Taktsignal. Die Daten am Datenkanal sind gültig beim L-H Flanke des Taktsignals. Dadurch kann die Taktfrequenz fast beliebig geändert werden.

Also verstehe ich das richtig, dass nen APA102 schneller und "sauberer" ist?

LG Thorben

Den Uno R3. Aber mir fällt gerade auf, das der 13 DIGITALE Ausgänge hat. Macxht das nen unterschied, wenn ich die LED´s mit digitalWrite statt analogWrite anspreche?

Der UNO hat nur 6 analoge PWM Ausgänge ( 3,5,6,9,10,11). Da kannst Du nicht 10 LEDs in der Helligkeit regeln.

Ja, einen Unterschied gibt es: Digital kann nur ein-aus. PWM kann die Helligkeit in 256 Stufen regeln.

PS der Arduino UNO hat 20 Digitale Aus/Eingänge. D0 bis D13 und A0 bis A5. Alle Pins sind digitale Ein-Ausgänge und haben dazu noch andere Funktionen wie analoge Eingänge, Serielle Schnittstellen, Interrupteingänge. In der Arduino "Sprache" ist das leider etwas unglücklich gewählt.

Grüße Uwe

franz_johan:
Also verstehe ich das richtig, dass nen APA102 schneller und "sauberer" ist?

Ja, das könnte man so formulieren.

franz_johan:
Den Uno R3. Aber mir fällt gerade auf, das der 13 DIGITALE Ausgänge hat. Macxht das nen unterschied, wenn ich die LED´s mit digitalWrite statt analogWrite anspreche?

Mit den MobaTools kann jeder digitale Ausgang PWM. Kann man über den Bibliotheksmanager installieren.