Arduino Adafruit Neopixel Strip und Mikrofon

OP #5877217
Lesenswert?
• ▲
▼
Hi @all,

habe einen Adafruit Neopixel Strip mit (nur noch) 58 LEDs und will nun, 
dass er zum Musiktakt (im Skript Beat) anfängt Leuchtprogramm zu 
starten.

Meine Bauteile:
- Arduino
- Neopixel Strip mit eigener Stromversorgung (5V)
- Soundsensor

Jetzt ist es so, dass der Strip durchläuft (mit der entsprechenden 
Verzögerung) und weiter nichts tut. Natürlich habe ich davor sehr viel 
gesucht, verschiedene Skripte getestet, aber bis jetzt will er nicht.

Heisst, mit Beispielprogrammen leuchtet er und wird scheinbar auch 
richtig angesprochen, aber das mit dem Mikro-Input...
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 500;
5
int speaker = 7;
6

7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11
void loop() {
12
  int beat = digitalRead(speaker);
13
  for(int i=0;i<NUMPIXELS;i++){
14
    if(beat == 1){
15
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
16
      pixels.show();
17
      delay(delayval);
18
      digitalWrite(led, HIGH);
19
    } else {
20
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
21
      pixels.show();
22
      delay(delayval);
23
      digitalWrite(led, LOW);    
24
    }
25
  }
26
}

Vielleicht hat hier noch jemand Interesse an sowas bzw. schon in Betrieb 
zum teilen.

Danke euch und LG,
Kerstin
#5877253
Lesenswert?
• ▲
▼
Also wenn das richtig toll aussehen soll dann am besten mit nem MSGEQ7..

Welcher Soundsensor, welcher Arduino?

Habe da auch mal ein Projekt mit ESP8266 und Webinterface gebaut..
schau mal im Loop, ist garkein Hexenwerk:
https://github.com/schuppeste/Sofaleds/blob/master/sofaleds/sofaleds.ino

Zeile92: Equalizer auf und ab der einzelnen Bänder..
Zeile107: Lichtorgel/Blinken der einzelnen Bänder..


Demo-Video:
https://www.youtube.com/watch?v=mlMS-kUvTjY
#5878299
Lesenswert?
• ▲
▼
Frage:
was soll das delay(500); nach jeder der 58 LEDs?

da dauert ja ein Durchgang innerhalb der for Schleife schon 29s bis sich 
was ändert.

was soll das digitalWrite(led, HIGH); digitalWrite(led, LOW);?
Die Ausgabe macht doch pixels.show();
wenn du warten willst vor einer neue Anzeige doch dann nach der Ausgabe 
aller LEDs also einmal delay am Ende der for-Schleife nicht innerhalb 
der Schleife.

  for(int i=0;i<NUMPIXELS;i++){
    if(beat == 1){
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
      pixels.show();
      delay(delayval);
      digitalWrite(led, HIGH);
    } else {
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
      pixels.show();
      delay(delayval);
      digitalWrite(led, LOW);
    }
  }

keine Lust das jetzt mal schnell zusammenzustecken, ist zu warm

statt int beat = digitalRead(speaker);

könntest du auch mal analogRead versuchen, auch mit Poti zum Einstellen.
OP #5879232
Lesenswert?
• ▲
▼
Habe den Vorschlag mit delay und auch nochmal mit A5 und analog Read 
versucht, aber nach wie vor durchläuft er einmal die Schleife (also 
einmal rot, denn leuchtet der Strip weiter rot.

Zwischendurch auch nochmal Lib Fastled mit anderem Prog, leider auch 
nichts geworden.

Mal schauen vllt lässt sich heute noch was passendes finden. Hoffe doch.
#5879390
Lesenswert?
• ▲
▼
Ich würde es zum testen so probieren:
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 100;
5
int speaker = 7;
6

7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11

12
void loop() {
13
int temp =analogRead(speaker);
14
int beat =map(temp,0,1024,0,NUMPIXELS);
15
  for(int i=0;i<NUMPIXELS;i++){
16
    
17
    if(i<beat){
18
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
19
         
20
      digitalWrite(led, HIGH);
21
    } else {
22
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
23
   
24
      digitalWrite(led, LOW);    
25
    }
26
  }
27
pixels.show();
28
delay(delayval);
29

30
}
EDIT: natürlich map zu 1024.
#5881824
Lesenswert?
• ▲
▼
Kerstin S. schrieb:
> Habe das gleich mal probiert, aber der Strip leuchtet dann teils blau
> und rot, dann drei LEDs mehr blau, aber das wars dann.

da gibt es ja auch zig Möglichkeiten die man selbst ausprobieren muss, 
da kann man nicht einfach was hochladen und das wars. Das wäre der 
Equalizer Effekt..

die 1024 kann man als sensitivität verkleinern.. oder so als Lichtorgel:
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 100;
5
int speaker = 7;
6
int threshold=512;
7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11

12
void loop() {
13
int temp =analogRead(speaker);
14
//int beat =map(temp,0,1024,0,NUMPIXELS);
15
  for(int i=0;i<NUMPIXELS;i++){
16
    
17
    if(threshold>temp){
18
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
19
         
20
      digitalWrite(led, HIGH);
21
    } else {
22
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
23
   
24
      digitalWrite(led, LOW);    
25
    }
26
  }
27
pixels.show();
28
delay(delayval);
29

30
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.