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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren