INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Neopixel - LEDS leuchten obwohl sie es nicht sollten
24.11.2020, 00:34 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2020 00:36 von Mauser.)
Beitrag #1
Neopixel - LEDS leuchten obwohl sie es nicht sollten
Moin,

ich habe mir eine Matrix aus w2812 LEDs gebastelt (15*18=270 LED). Jede LED ist einzeln ansprechbar.
An der Verdrahtung kann es somit nicht liegen.
Auf dieser Matrix möchte ich das Spiel Snake realisieren. Ich habe es auch geschafft. Die Schlange ist über eine IRFernbediedung steuerbar und wächst sofern sie ein random-gespawntes Pixel aufnimmt. Allerdings habe ich folgendes Problem.
Es gehen wahllos LEDs an, in den verschiedensten Farben. Diese LEDs bzw die Farben habe ich im Code nicht ein einziges Mal verwendet. Ebenso ist die Helligkeit bei diesen LEDs auf maximum. Dabei handelt es sich um 1-2 LED Streifen (sind ca 15 Pixel die aufleuchten und das im Farbwechsel)

Der ganze Code ist hier zu finden
https://pastebin.com/cFpS5s7W

ich hoffe ich habe es verständlich auskommentiert.
Soweit ich das beurteilen kann liegt der Fehler in Zeile 164. Die Länge des Weges (dieser enthält die "Bewegungsdaten" der Schlange) kann ich als konstante angeben, dabei wächst natürlich die Schlange nicht. Wird die Kommentierung aufgehoben liegt das o.g. Problem vor und die Schlange wächst. Steuerung funktioniert auch einwandfrei. Problem sind nur die zufällig aufleuchtenden Lichter. Ich habe schon einiges Versucht den Fehler zu finden, leider ohne Erfolg. Daher möchte ich euer Schwarmwissen nutzen.
Vielen Dank für die Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 11:34 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2020 11:35 von Tommy56.)
Beitrag #2
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
Wo in Deinem Beitrag siehst Du eine Projektvorstellung?

Stelle Deinen Sketch bitte direkt hier ins Forum. Benutzte dazu Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Welchen MC benutzt Du?

Gruß Tommy

@Mod: Bitte verschieben

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 11:54
Beitrag #3
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
(24.11.2020 00:34)Mauser schrieb:  Ich habe schon einiges Versucht den Fehler zu finden, leider ohne Erfolg.

Was genau hast du versucht ?
Wie hast du die Spannungsversorgung angeschlossen ?
Was für ein Netzteil verwendest du ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 14:20
Beitrag #4
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
(24.11.2020 11:34)Tommy56 schrieb:  Wo in Deinem Beitrag siehst Du eine Projektvorstellung?

Stelle Deinen Sketch bitte direkt hier ins Forum. Benutzte dazu Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Welchen MC benutzt Du?

Gruß Tommy

@Mod: Bitte verschieben

Hallo Tommy,

danke für die Info, code wird nun hoffentlich so angezeigt.

Code:
#include <IRremote.h>
#include <Adafruit_NeoPixel.h>

decode_results results;
#define LED_PIN    6
#define LED_COUNT 270
#define Zeilen_Zahl 1
#define Spalten_Zahl 15
#define RECV_PIN 11
IRrecv irrecv(RECV_PIN);

int weg[270]; // Hier befindet sich der Weg den die Schlange geht

int letzteZeile[15] = {255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 267, 268, 269, 270}; // Zur Abfrage angelegt bei vertikaler+ Bewegung
//int zeile = 0;


int i = 0;
int n = 0;
int zahler; // Zähler der die Durchläufe von LOOP zählt
int dot;    // Futter für die Schlange
int lange = 4; // Länge des Weges den die Schlange geht
int Eingabe; // Variable der IR Fernbedienung zur Steuerung
int Ergebnis; // Variable der IR Fernbedienung zur Steuerung
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_RGB);
void weg_einschalten(); // Die LED in Weg einschalten
void weg_verschieben(); // Die LED in Weg verschieben
void weg_0_ausschalten(); // Letzte Position in Weg ausschalten
void laufen_lassen(); // Automatische Bewegung der Schlange bei Ergebnis
void essen_aufnehmen(); // Schlange wachsen lassen
void setup() {

  strip.setBrightness(5);
  strip.show();
  Serial.begin(9600);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  irrecv.enableIRIn();
  //  while (i <= LED_COUNT) { // Matrix initialisieren
  //    for (int s = 0; s <= 14; s++) { // s = spaltenzähler
  //      matrix[zeile][s] = i; // zeile = zeilenzähler
  //      i = i + 1; // i = laufindex bis Anzahl LEDs
  //    }
  //    zeile = zeile + 1; // zeile = zeilenzähler
  //  }
  //  i = 0;

  //  while (i <= LED_COUNT) {
  //    for (int s = 0; s <= 14; s++) { // s = spaltenzähler
  //      matrix[zeile][s] = i; // zeile = zeilenzähler
  //      Serial.print(matrix[zeile][s]);
  //      i = i + 1; // i = laufindex bis Anzahl LEDs
  //    }
  //    Serial.println();
  //  }



}

void loop() {
  if (irrecv.decode(&results)) {


    //Serial.println(results.value,DEC); // gebe den Code in Dezimalzahlen aus
    irrecv.resume();                    // Warte auf nähsten Wert
    Eingabe = results.value;

  }
  if (results.value == 16734885) { // Horizontal+
    Ergebnis = 1;
    //Serial.println(Ergebnis);
  }
  if (results.value == 16730805) { // Vertikal +
    Ergebnis = 2;
    //Serial.println(Ergebnis);
  }
  if (results.value == 16716015) { //Horizontal -
    Ergebnis = 3;
    //Serial.println(Ergebnis);
  }
  if (results.value == 16718055) { // Vertikal -
    Ergebnis = 4;
    //Serial.println(Ergebnis);
  }

  zahler = zahler + 1; // Nach dem 40 Durchlauf wird 1x Fressen gespawnt
  weg[0] = n; // Aktuelle Position des Kopfes ist gleich LED Nr. n
  if (zahler == 40) { // Fressen spawnen
    dot = random(0, 270);
    strip.setPixelColor(dot, 100, 100, 0);
    strip.show();
    zahler = 0;
  }

  weg_einschalten();  //Die LED in Weg einschalten
  essen_aufnehmen();  // Schlange wachsen lassen
  weg_verschieben();  //Die LED in Weg verschieben
  laufen_lassen();    //Automatische Bewegung der Schlange bei Ergebnis
}

void weg_einschalten() { // Die LED in Weg einschalten
  for (int w = 0; w < lange; w++) {
    strip.setPixelColor(weg[w], 100, 0, 0);
    strip.show();
  }
}
void weg_verschieben() { // Die LED in Weg verschieben

  int wegzw[270];
  for (int w = 0; w < lange; w++) { // Weg kopieren
    wegzw[w] = weg[w];
  }

  for (int w = 0; w < lange; w++) { // Weg nach rechts verschieben
    weg[w + 1] = wegzw[w];
  }

  weg[0] = n; // Kopf der Schlange ist Pixel Nr. n

  delay(500);
}
void laufen_lassen() {

  switch (Ergebnis) {
    case 1:// horizontaler Lauf+
      n = n + 1;
      if (n == 15)
        n = 0;
      break;
    case 2: // vertikaler Lauf+
      for (int m = 0; m <= 14; m++) { // vertikale Achse zurücksetzen
        if (n == letzteZeile[m])
          n = letzteZeile[m] - 18 * 15;
        //Serial.println(n);
      }
      n = n + 15;
      break;
    case 3: // horizontaler Lauf-
      n = n - 1;
      if (n == 0)
        n = 15;
      break;
    case 4: //vertikaler Lauf-
      for (int m = 0; m <= 14; m++) { // vertikale Achse zurücksetzen
        if (n == letzteZeile[m])
          n = letzteZeile[m] + 18 * 15;
      }
      n = n - 15;
      break;
  }
  weg_0_ausschalten(); // letzte Position des Schlangenendes ausschalten
  return n;
}
void weg_0_ausschalten() { // setzt letzten Eintrag in weg[lange] zurück
  int off;
  off = weg[lange];
  strip.setPixelColor(off, 0, 0, 0);
}
void essen_aufnehmen() { // Schlange wachsen lassen

  if (weg[0] == dot) {    // Wenn Kopf der Schlange == Fressen ist, Länge der Schlange++

    //lange=lange+1;      // Sofern Länge nicht auskommentiert ist, gehen wahllos LEDs an.

    strip.setPixelColor(dot, 0, 0, 0); // LED die Futter anzeigt ausschalten
    strip.show();
  }

}

Ich nutze einen Arduino Uno. Ich werde gleich noch ein paar Bilder hochladen um mein Problem zu verdeutlichen. Dir schonmal danke für die Antwort.

LG Mauser
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 14:43
Beitrag #5
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
(24.11.2020 11:54)hotsystems schrieb:  
(24.11.2020 00:34)Mauser schrieb:  Ich habe schon einiges Versucht den Fehler zu finden, leider ohne Erfolg.

Was genau hast du versucht ?
Wie hast du die Spannungsversorgung angeschlossen ?
Was für ein Netzteil verwendest du ?

Hallo hotsystems,

Ich habe damit angefangen die Unterfunktionen die in Loop aufgerufen werden auszuklammern um den Fehler einzugrenzen. Das hat mich dann auf den Befehl "Lange = Lange 1" gebracht. Ich habe zudem die Lange auf die Konstanten 3, 5, 10 abgeändert und das verlief ohne Probleme. Weiterhin habe ich mir das Array Weg[x] ausgeben lassen. Hier standen keine Merkwürdigen Elemente drin, sondern nur die Pixel die aktuell Eingeschaltet sein sollten.

Zur Spannungsversorgung nutzze ich den USB Port meines PCs. Bevor ich mit dem Programmieren angefangen habe, hatte ich alle 270 LED der Matrix über den 5V Anschluss einschaltten können. Demnach erschien mir das erstmal auszureichen.

Die spätere Stromversorgung wird über ein 5V Netzteil ablaufen.

Zur Schaltung möchte ich folgendes erläutern.

- Der PWM Pin 6 des Arduino ist mit dem Datenkontakt der ersten W2812 LED verbunden
- Der 5V Pol des Uno geht auf den Pluspol der ersten LED sowie auf den des IR-Sensor Moduls (Anschluss R)
- Der Ground Pol des Arduino ist mit dem Minuspol der ersten LED verbunden und mit dem IR-Sensor Modul (Anschluss G)
- PWM Pin 11 des Arduino ist mit dem Datenpol des IR-Sensor verbunden.

- Bei den LED handelt es sich um LED Streifen. Der ursprüngliche Streifen war 300 LED lang, ich habe diesen mehrmals aufgeteilt. Die letzte LED des ersten Streifens ist mit der ersten LED des zweiten Streifens verbunden usw. Ansprechbar sind alle LEDs.

Ich werde im nächsten Post mein Projekt vorstellen und 2 Bilder hochladen. Ich danke dir schoneinmal für deine Antwort.

LG Mauser
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 15:00 (Dieser Beitrag wurde zuletzt bearbeitet: 24.11.2020 15:02 von Mauser.)
Beitrag #6
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
Projektvorstellung

Ich habe mir von Amazon folgende W2812 LED bestellt.

https://www.amazon.de/-/en/gp/product/B0...UTF8&psc=1

Diese 300 LED Kette habe ich mehrfach aufgetrennt um eine LED Matrix zu kreiren. Die Matrix ist 18 Zeilen tief und 15 LEDs breit. In Summe stehen somit 270 Led zur Verfügung. Hier möchte ich das Spiel Snake realisieren. Um die LED gezielt anzusteuern nutze ich einen Arduino UNO. Der Bediener kann später über eine IR Fernbedienung die Snake steuern.

Dazu folgendes Bild im Anhang.
Auf diesem Bild ist also die Matrix zu sehen, sowie die Lötkontakte. Die erste LED des ersten Streifens ist mit dem Arduino verbunden. Die letzte LED des ersten Streifens ist mit der ersten LED des zweiten Streifens verbunden usw. Auf der Rückseite der Holzplatte habe ich einen Bereich für die Verkabelung ausgefräst, das ganze wird dann einfach mit einer Holzplatte verdeckt. Zur späteren Spannungsversorgung möchte ich ein 5V Netzteil verwenden mit einem USB-Mini Anschluss. Ein Arduino Nano soll später die Rechenarbeit ausführen. (Hoffe das es so geht)
Damit die Verkabelung an der Vorderseite nicht mehr zu sehen sein wird, ist ein Holzgitter geplant, dass ich über die LEDs legen möchte, um jeden Pixel ein Quadrat ausleuchten zu lassen. das ganze wird dann von einer "milchigen" Plexiglasplatte verdeckt, welche ich evtl. mit einer Spiegelfolie auskleiden werde. Die Matrix soll als Spiegel mit Beleuchtung, aber auch als Spiel dienen. Dabei ist mir das Spiel Snake in den Sinn gekommen, sowie Tetris. Das Programm für das Spiel Snake ist so gut wie fertig.

Problem
Dazu eine Erklärung zu dem Bild.
In der ersten Zeile wandert die Grüne-Snake von links nach rechts (horizontal +). Jeden 40 Durchlauf des LOOP Teils spawnt ein Pixel in der Farbe Gelb.
Nimmt der Kopf der Schlange diesen Pixel auf verlängert sich deren Größe um +1; Das alles funktioniert schon. Jetzt das schon oben beschriebene Problem.
Die bunten Lichter die in der Mitte der Matrix zu sehen sind, sollten eigentlich nicht leuchten. Ich habe absolut keine Ahnung wieso. Der Code ist im vorherigen Beitrag zu sehen. Wird hier der Befehl Länge=Länge+1 ausgeklammert, leuchten die bunten Lichter nicht.

Und da würde ich euch gerne um Hilfe bitten.

LG Mauser


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 15:17
Beitrag #7
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
So beim drüberschauen finde ich nichts, was diesen Effekt erzeugt.
Du wirst also wohl den Weg gehen müssen, über serielle Ausgaben der Variablenwerte herauszufinden, wo Dein Sketch falsch abbiegt.

Mir ist aber aufgefallen, dass Du manchmal etwas ungünstig agierst:
Code:
// Dein Code
void weg_einschalten() { // Die LED in Weg einschalten
  for (int w = 0; w < lange; w++) {
    strip.setPixelColor(weg[w], 100, 0, 0);
    strip.show();
  }
}

// ist effektiver, weil nur 1 Mal die Interrupts gesperrt werden
void weg_einschalten() { // Die LED in Weg einschalten
  for (int w = 0; w < lange; w++) {
    strip.setPixelColor(weg[w], 100, 0, 0);
  }
  strip.show();
}

Hast Du das schon mit der IR-Fernbedienung getestet, weil Du dazu später schreibst? In den meisten Fällen vertragen sich WS2812 und IR-Empfang nicht miteinander, da das Zeitverhalten von show() sehr zeitkritisch ist und deshalb in dieser Zeit die Interrupts gesperrt werden. Deshalb kann dann über IR nichts empfangen werden.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2020, 15:23
Beitrag #8
RE: Neopixel - LEDS leuchten obwohl sie es nicht sollten
Dir ist hoffentlich klar, dass du ca. 16 A für deine Matrix (270 x 60mA) benötigst. Da reicht es def. nicht, die mit dem Arduino zu speisen. Auch nur ein Spannungsanschluß ist viel zu wenig. Aus meiner Erfahrung ist es nötig, die Spannung alle 2 Zeilen einzuspeisen.
Nur so wird das stabil funktionieren.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino startet nicht kpc 14 1.076 27.04.2021 22:24
Letzter Beitrag: hotsystems
  Arduino Mega wird nicht erkannt Gian-Luca 45 12.168 23.04.2021 15:45
Letzter Beitrag: Will Mew
  MKR1200 läuft nicht bei Batteriebetrieb kpc 24 3.648 05.04.2021 22:59
Letzter Beitrag: kpc
  Einfaches Projekt funktioniert am USB Anschluss, aber nicht mit Akkus PurpleLightning 3 623 05.04.2021 12:07
Letzter Beitrag: hotsystems
  Wie LEDs von Modellbahnampel an Arduino verdrahten? foto-herby 17 2.094 24.03.2021 11:26
Letzter Beitrag: hotsystems
  Sketche lassen sich aus IDE nicht mehr hochladen Steinspiel 9 1.661 19.03.2021 19:11
Letzter Beitrag: Chopp
  Sketches lassen sich nicht mehr hochladen. Was kann ich noch tun? Tonio 3 735 19.03.2021 15:32
Letzter Beitrag: Tommy56
  Hardware-Fehler bei WS2812 Einzel-LEDs Nordlicht 23 4.720 14.03.2021 18:37
Letzter Beitrag: Nordlicht
  Servo funktioniert nicht richtig an Arduino Nano Maxcruiser 25 3.601 14.03.2021 17:11
Letzter Beitrag: hotsystems
  2 I2C-Devices nicht zusammen wonk 36 5.364 04.03.2021 00:08
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste