Hallo liebe arcuino gemeinde,
ich möchte für meine Tochter ein Pupenhaus mit 8Räumen mit licht ausstatten aber nicht einfach nur mit simplen lämpchen sondern mit Neopixel stripes in jedem Raum und weil noch einige über waren auch am rhamen aussen herum.
In jedem raum wird später ein Taster verbaut sein der dann das licht im jeweiligen Raum steuern soll ich dachte da erstmal an drei Colors Weiss/grün/aus
Für die aussenumrhamung dachte ich an sowas wie die sketche zum stripe testen solche lightshows, dies soll aber mit einem taster am dach gesteuert werden z.b. start stop oder so.
Hab im netz auch ein video gefunden in dem eine bestimme menge an neopixeln ansteuerbar ist mit einem taster... das funktioniert für einen stripe und einen taster auch ausgezeichnet aber das ganze muss ich ja jetzt 8mal haben für jeden raum und da wirds irgendwie schwierig ich bekomme schon den zweiten nicht richtig ans laufen entweder reagiert ein stripe auf alle taster oder beide stripes reagieren gleich
und dann noch das Pin-Anzahl Problem....
Wenn ich 8 Neopixel Stripes mit je 20LEDs pro raum habe und alle einzeln steuere dann benötige ich dafür schonmal 8 Pins und dann noch die Taster... so kahm ich auf die idee wiedermal die Analog eingänge zu verwenden sprich auswerten welcher wert anliegt ich würde maximal 2Taster pro AI verwenden...
Auch hier geht das zwar einen stripe zu steuern mit einem taster aber sobald ich es erweitern will ist schluss ![]()
Mein Code ist mitlerweile so unfunktional und völlig durch das ich ihn eigentlich nicht zeigen will...
In den lightshows sieht mann auch immer wieder das nur einzelne abschnitte angesprochen werden evtl. ist es ja möglich und damit für mein projekt sinnvoller die stripes später wieder als einen stripe zu behandeln in dem es dann 8 abschnitte für die zimmer gibt die dann von den tastern gesteuert werden? In diesem Fall wären auch wieder genug Digital Pins frei weil für die LEDs dann ja nur noch einer benötigt wird.
Leider steht weinachten ja schon Quasi vor der tür und das muss auch alles noch verbaut werden.
Zur anwendung kommt ein Original Arduino UNO
#include <Adafruit_NeoPixel.h> //Libary für Neopixel
#include <Bounce2.h> //Libary extras für Taster etc.
//////////////////////////////////////////LEDstreifen1(Zimmer1)
#define neoPixelPin 3
#define numPixels 20
#define buttonPin LED_1
/////////////////////////////////////////LEDstreifen2(Zimmer2)
#define neoPixelPin1 4
#define numPixels 20
#define buttonPin1 LED_2
/////////////////////////////////////////LEDstreifen3(Zimmer3)
#define neoPixelPin2 5
#define numPixels 20
#define buttonPin2 LED_3
/////////////////////////////////////////LEDstreifen4(Zimmer4)
#define neoPixelPin3 6
#define numPixels 20
#define buttonPin3 LED_4
/////////////////////////////////////////LEDstreifen5(Zimmer5)
#define neoPixelPin4 7
#define numPixels 20
#define buttonPin4 LED_5
/////////////////////////////////////////LEDstreifen6(Zimmer6)
#define neoPixelPin5 9
#define numPixels 20
#define buttonPin5 LED_6
/////////////////////////////////////////LEDstreifen7(Zimmer7)
#define neoPixelPin6 10
#define numPixels 20
#define buttonPin6 LED_7
/////////////////////////////////////////LEDstreifen8(Zimmer8)
#define neoPixelPin7 11
#define numPixels 20
#define buttonPin7 LED_8
/////////////////////////////////////////LEDstreifen9(HausaussenLightshow)optional
#define neoPixelPin8 12
#define numPixels 120
#define buttonPin8 LED_9
const unsigned int BUTTON_PIN = A0; //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A1; //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A2; //Anschluss Taster für Analogauswertung
const unsigned int BUTTON_PIN = A3; //Anschluss Taster für Analogauswertung
const unsigned int Taster1 = LED_1; //Ergebnis der Tastenauswertung Taster1 übergabe als digitalwert (Raum1)
const unsigned int Taster2 = LED_2; //Ergebnis der Tastenauswertung Taster2 übergabe als digitalwert (Raum2)
const unsigned int Taster3 = LED_3; //Ergebnis der Tastenauswertung Taster3 übergabe als digitalwert (Raum3)
const unsigned int Taster4 = LED_4; //Ergebnis der Tastenauswertung Taster4 übergabe als digitalwert (Raum4)
const unsigned int Taster5 = LED_5; //Ergebnis der Tastenauswertung Taster5 übergabe als digitalwert (Raum5)
const unsigned int Taster6 = LED_6; //Ergebnis der Tastenauswertung Taster6 übergabe als digitalwert (Raum6)
const unsigned int Taster7 = LED_7; //Ergebnis der Tastenauswertung Taster7 übergabe als digitalwert (Raum7)
const unsigned int Taster8 = LED_8; //Ergebnis der Tastenauswertung Taster8 übergabe als digitalwert (Raum8)
const unsigned int taster9 = LED_9; //Ergebnis der Tastenauswertung Taster9 übergabe als digitalwert (Außen Beleuchtung /Lightshow-Start)
const unsigned int BUTTON_TOLLERANCE = 300; //Tollerance für analogwertabweichung
const unsigned int BUTTON[9] = { //Array für Tasterwerte
355, //Analogwert Taster1
960, //Analogwert Taster2
};
Adafruit_NeoPixel pixels(numPixels, neoPixelPin, NEO_GRB + NEO_KHZ800);
Bounce2::Button button = Bounce2::Button();
/////////////////INDEX für Tastendruckzälung
int index = 0;
int index1 = 0;
int index2 = 0;
int index3 = 0;
int index4 = 0;
int index5 = 0;
int index6 = 0;
int index7 = 0;
int index8 = 0;
int index9 = 0;
//////////Neopixel Farbverwaltung/zuweisung
const int MAX_COLORS = 3;
uint32_t colors[] = {
pixels.Color(255, 200, 255), //weiss
pixels.Color(0, 0, 255), //gruen
pixels.Color(0, 0, 0), //Aus
};
void setup() {
Serial.begin(9600);
pixels.begin();
button.attach(buttonPin, INPUT_PULLUP);
button.attach(buttonPin1, INPUT_PULLUP);
button.attach(buttonPin2, INPUT_PULLUP);
button.attach(buttonPin3, INPUT_PULLUP);
button.interval(5);
button.setPressedState(LOW);
updateNeoPixel();
pinMode(BUTTON_PIN, INPUT);
pinMode(Taster1, OUTPUT);
pinMode(Taster2, OUTPUT);
pinMode(Taster3, OUTPUT);
pinMode(Taster4, OUTPUT);
pinMode(Taster5, OUTPUT);
pinMode(Taster6, OUTPUT);
pinMode(Taster7, OUTPUT);
pinMode(Taster8, OUTPUT);
pinMode(Taster9, OUTPUT);
}
void updateNeoPixel() {
pixels.clear();
//eine Schleife von 0 bis 11 zum ansteuern der einzelnen NeoPixel
for (int i = 0; i < numPixels; i++) {
//setzen der Farbe aus dem Array mit dem Index
pixels.setPixelColor(i, colors[index]);
pixels.show();
}
}
void loop() {
//////////////////////////////////Neopixel1
button.update();
if (button.pressed()) {
if (index == (MAX_COLORS-1)){
index = 0;
} else {
index = index + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////NEOpixel2
button.update();
if (button.pressed()) {
if (index1 == (MAX_COLORS-1)){
} else {
index1 = index1 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel3
button.update();
if (button.pressed()) {
if (index2 == (MAX_COLORS-1)){
} else {
index2 = index2 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel4
button.update();
if (button.pressed()) {
if (index3 == (MAX_COLORS-1)){
} else {
index3 = index3 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel5
button.update();
if (button.pressed()) {
if (index4 == (MAX_COLORS-1)){
} else {
index4 = index4 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel6
button.update();
if (button.pressed()) {
if (index5 == (MAX_COLORS-1)){
} else {
index5 = index5 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel7
button.update();
if (button.pressed()) {
if (index6 == (MAX_COLORS-1)){
} else {
index6 = index6 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel8
button.update();
if (button.pressed()) {
if (index7 == (MAX_COLORS-1)){
} else {
index7 = index7 + 1;
Serial.println(index);
}
updateNeoPixel();
//////////////////////////////////Neopixel9
button.update();
if (button.pressed()) {
if (index8 == (MAX_COLORS-1)){
} else {
index8 = index8 + 1;
Serial.println(index);
}
updateNeoPixel();
}
//////////////////Tastendruckauswertung von analog nach digitalwert für obige neopixel ansteuerung
if(isButtonPressed(BUTTON[0])){
Serial.println("Taster1");
digitalWrite(LED_1, HIGH);
}
else {
digitalWrite(LED_1, LOW);
}
if(isButtonPressed(BUTTON[1])){
Serial.println("Taster2");
digitalWrite(LED_2, LOW);
}
else {
digitalWrite(LED_2, LOW);
}
if(isButtonPressed(BUTTON[2])){
Serial.println("Taster3");
digitalWrite(LED_3, LOW);
}
else {
digitalWrite(LED_3, LOW);
}
if(isButtonPressed(BUTTON[3])){
Serial.println("Taster4");
digitalWrite(LED_4, LOW);
}
else {
digitalWrite(LED_4, LOW);
}
if(isButtonPressed(BUTTON[4])){
Serial.println("Taster5");
digitalWrite(LED_5, LOW);
}
else {
digitalWrite(LED_5, LOW);
}
if(isButtonPressed(BUTTON[5])){
Serial.println("Taster6");
digitalWrite(LED_6, LOW);
}
else {
digitalWrite(LED_6, LOW);
}
if(isButtonPressed(BUTTON[6])){
Serial.println("Taster7");
digitalWrite(LED_7, LOW);
}
else {
digitalWrite(LED_7, LOW);
}
if(isButtonPressed(BUTTON[7])){
Serial.println("Taster8");
digitalWrite(LED_8, LOW);
}
else {
digitalWrite(LED_8, LOW);
}
if(isButtonPressed(BUTTON[8])){
Serial.println("Taster9");
digitalWrite(LED_9, LOW);
}
else {
digitalWrite(LED_9, LOW);
}
}
/////// Bool für Tastendruckermittlung ob gedrückt oder nicht mit einbeziehung der Tollerance
boolean isButtonPressed(unsigned int button){
int analogValue = analogRead(BUTTON_PIN);
Serial.println(analogValue);
return analogValue > button - BUTTON_TOLLERANCE
&& analogValue < button + BUTTON_TOLLERANCE;
}



