Doppelschalter mit Ardunino abfragen ist das Möglich?

Huhu ich würde gerne einen Doppelschalter benutzen.
Also wenn der Schalter auf 1 Steht soll ein Programm ablaufen und wenn der Schalter auf 2 Steht ein anderes, sollte er auf Null stehen soll der Arduino kein Programm ausführen.
Leider stell ich mich gerade etwas blöd an. Ich hab schon etwas gesucht und rumexperimentiert. Aber der Schalter wird einfach nicht erkannt. Bzw nicht richtig. Die Low Position funktioniert sowie die erste Abfrage aber er springt nicht in das Nightrider Programm.

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUM_LIGHTS 23
#define buttonPin1  2
#define buttonPin2  3
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(23, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

uint32_t off = strip.Color(0,0,0);
uint32_t white = strip.Color(255,255,255);
uint32_t blue = strip.Color(0,0,255);
uint32_t red = strip.Color(255,0,0);
uint32_t orange = strip.Color(255,140,0);
uint32_t green = strip.Color(0,255,0);
uint32_t pink = strip.Color(255,0,255);
uint32_t violet = strip.Color(153,50,204);

int ch1;

void setup() {
 pinMode(buttonPin1, INPUT);
// pinMode(buttonPin2, INPUT);
 strip.begin();
 strip.show();
}

void setp(int pix, uint32_t col) {
 strip.setPixelColor(pix-1, col);
}


void loop(){
if (digitalRead(buttonPin1) == HIGH) 
{
 if  (digitalRead(buttonPin1) == HIGH)
 {
  Licht();
  
 }
 else 
 {
   knightRider();
   }
   }
 else {
     // Turn them off
   for( int j = 0; j<NUM_LIGHTS; j++){
       strip.setPixelColor(j, LOW);
       strip.show();
   }   
 }
}

void Licht() { //Blinker
   setp(1,blue);
   setp(2,blue);
   setp(3,blue);
   setp(4,blue);
   setp(5,blue);
   setp(6,white);
   setp(7,orange);
   setp(13,white);
   setp(14,orange);
   setp(15,blue);
   setp(16,blue);
   setp(17,blue);
   setp(18,blue);
   setp(19,blue);
   setp(20,orange);
   setp(21,red);
   setp(22,red);
   setp(23,orange);
   strip.show();
   delay(500);
   setp(1,blue);
   setp(2,blue);
   setp(3,blue);
   setp(4,blue);
   setp(5,blue);
   setp(6,white);
   setp(7,off);
   setp(13,white);
   setp(14,off);
   setp(15,blue);
   setp(16,blue);
   setp(17,blue);
   setp(18,blue);
   setp(19,blue);
   setp(20,off);
   setp(21,red);
   setp(22,red);
   setp(23,off);
   strip.show();
   delay(500);
}

void knightRider() {
   int loops = 2;
   int count = 0;
   int timer = 50;
 
   uint32_t low = strip.Color(0, 0, 0); 
   uint32_t high = strip.Color(255,0,0);
 
   // Flash Lights
   for(int i = 0; i < loops; i++){
       for (count=7;count<11;count++) {
           strip.setPixelColor(count, high); 
           strip.show();
           delay(timer);
           strip.setPixelColor(count+1,high);
           strip.show();
           delay(timer);
           strip.setPixelColor(count, low);
           strip.show();
           delay(timer*2);

       }
       for (count=11;count>7;count--) {
           strip.setPixelColor(count, high); 
           strip.show();
           delay(timer);
           strip.setPixelColor(count-1, high); 
           strip.show();
           delay(timer);
           strip.setPixelColor(count, low); 
           strip.show();
           delay(timer*2);

       }
   }
   
   // Turn them off
   for( int i = 0; i<NUM_LIGHTS; i++){
       strip.setPixelColor(i, LOW);
       strip.show();
   }   
}

Ich habe einen test code gepostet hier der Richtige Teil

void loop(){
if ((digitalRead(buttonPin1) == HIGH) or (digitalRead(buttonPin2) == HIGH))
{
 if  (digitalRead(buttonPin1) == HIGH)
 {
  Licht();
  
 }
 else 
 {
   knightRider();
   }
   }
 else {
     // Turn them off
   for( int j = 0; j<NUM_LIGHTS; j++){
       strip.setPixelColor(j, LOW);
       strip.show();
   }   
 }
}

Was meinst du mit "Doppelschalter"?

Wie wirken sich die Schalterstellung 0,1,2 auf die Pins buttonPin1 und buttonPin2 aus?

die Abfrage von mehr als 2 Bedingungen kann man mit Switch Anweisung machen, oder mit if else ketten.

zum Beispiel so:

void loop() {
  if ((digitalRead(buttonPin1) == HIGH) && (digitalRead(buttonPin2) == HIGH))   {
    Licht();
  } else if ((digitalRead(buttonPin1) == HIGH) && (digitalRead(buttonPin2) == LOW)) {
    knightRider();
  } else {
    // Turn them off
    }
  }
}

Die Ausdrücke "((digitalRead(buttonPin1) == HIGH) && (digitalRead(buttonPin2) == HIGH))" muss du so korrigieren, wie sie deinen Schalterstellungen entsprechen, die kenne ich nicht.

ach ja:
Code bitte in Codetags (das ist das Icon </> oben links)

Danke Günter für die Hilfe. ich bin schon ein Stück weiter :slight_smile: Der Herr Lötmeister hat eine Verbindung der Schalter stehen lasse .... Ich versuchs mal etwas dann melde ich mich wieder. Es ist so ein Doppelschalter mit I II und 0

Poste mal einen Schaltplan, wie du verdrahtet hast. Offene Eingänge machen irgendwas, aber nichts Gescheites. Also immer einen pull up oder pull down Widerstand an den Eingang und den Schalter auf das entsprechend andere Potential. Da du 3 Zustände hast, kannst du auch tricksen und einen analogen Eingang nutzen und mit dem Schalter einen Spannungsteiler aufbauen. So kann man Eingänge und Verdrahtungsaufwand spraen :slight_smile:

Hab das mit dem Schaltplan zeichnen weiter gegeben. Der Lötmeister soll es mal aufmalen :slight_smile: Wiederstände hat er aber verbaut meint er.
Also der Code sieht jetzt so aus.
Der Schalter funktioniert jetzt auch aber ein paar Pixel leuchten noch falsch das muss ich ihnen jetzt noch abgewöhnen :slight_smile:

Es wird ein Bobycar :slight_smile:

#include <Adafruit_NeoPixel.h>

#define PIN 6 //Pin an dem die Lampen angeschlossen sind.
#define NUM_LIGHTS 23 // Anzahl Lampen
const int buttonPin1 = 2; //Schalter Position 1
const int buttonPin2 = 3; //Schalter Position 2
int buttonState = 0;
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(23, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

uint32_t off = strip.Color(0,0,0);
uint32_t white = strip.Color(255,255,255);
uint32_t blue = strip.Color(0,0,255);
uint32_t red = strip.Color(255,0,0);
uint32_t orange = strip.Color(255,140,0);
uint32_t green = strip.Color(0,255,0);
uint32_t pink = strip.Color(255,0,255);
uint32_t violet = strip.Color(153,50,204);

int ch1;

void setup() {
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  strip.begin();
  strip.show();
}

void setp(int pix, uint32_t col) {
  strip.setPixelColor(pix-1, col);
}


void loop() {
  if ((digitalRead(buttonPin1) == HIGH) && (digitalRead(buttonPin2) == LOW))  {
    Licht();
  } else if ((digitalRead(buttonPin1) == LOW) && (digitalRead(buttonPin2) == HIGH)){
    knightRider();
  } else {
    // Turn them off
    for( int i = 0; i<NUM_LIGHTS; i++){
        strip.setPixelColor(i, LOW);
        strip.show();
    }
  }
}

void Licht() {
    setp(1,blue); //Unterboden
    setp(2,blue); //Unterboden
    setp(3,blue); //Unterboden
    setp(4,blue); //Unterboden
    setp(5,blue); //Unterboden
    setp(6,white);//Scheinwerfer
    setp(7,orange);//Blinker
    //8-12 sind nicht enthalten da sie nur bei Nightrider leuchten sollen.
    setp(13,white);//Scheinwerfer
    setp(14,orange);//Blinker
    setp(15,blue); //Unterboden
    setp(16,blue); //Unterboden
    setp(17,blue); //Unterboden
    setp(18,blue); //Unterboden
    setp(19,blue); //Unterboden
    setp(20,orange);//Blinker Hinten
    setp(21,red);//Rückfahrlicht
    setp(22,red);//Rückfahrlicht
    setp(23,orange);//Blinker Hinten
    strip.show();
    delay(500);//Dieser Teil ist nötig das die Blinker Blinken :-)
    setp(1,blue); //Unterboden
    setp(2,blue); //Unterboden
    setp(3,blue); //Unterboden
    setp(4,blue); //Unterboden
    setp(5,blue); //Unterboden
    setp(6,white);//Scheinwerfer vorne
    setp(7,off);//Blinker vorne aus
    setp(13,white);//Scheinwerfer vorne
    setp(14,off);//Bliner vorne aus
    setp(15,blue);//Unterboden
    setp(16,blue);//Unterboden
    setp(17,blue);//Unterboden
    setp(18,blue);//Unterboden
    setp(19,blue);//Unterboden
    setp(20,off);//Blinker hinten aus
    setp(21,red);//Rückfahrlicht
    setp(22,red);//Rückfahrlicht
    setp(23,off);//Bliner hinten aus
    strip.show();
    delay(500);
}

void knightRider() {
    int loops = 2;
    int count = 0;
    int timer = 50;
  
    uint32_t low = strip.Color(0, 0, 0); 
    uint32_t high = strip.Color(255,0,0);
  
    // Flash Lights
    for(int i = 0; i < loops; i++){
        for (count=7;count<NUM_LIGHTS;count++) {
            strip.setPixelColor(count, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count+1,high);
            strip.show();
            delay(timer);
            strip.setPixelColor(count, low);
            strip.show();
            delay(timer*2);

        }
        for (count=NUM_LIGHTS;count>7;count--) {
            strip.setPixelColor(count, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count-1, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count, low); 
            strip.show();
            delay(timer*2);
 
        }
    }
    
    // Turn them off
    for( int i = 0; i<NUM_LIGHTS; i++){
        strip.setPixelColor(i, low);
        strip.show();
    }   
}

Endlich mal wieder die NeoPixel!

  • I an buttonPin1: pinMode(buttonPin1, INPUT_PULLUP);
  • II an buttonPin2: pinMode(buttonPin2, INPUT_PULLUP);
  • der gemeinsame an GND

INPUT_PULLUP nutzt den internen Pullup-Widerstand, dann hat der Lötmeister nicht so viel zu löten, aber LOW ist der aktive Zustamd. Schalter in Stellung "0", beide Eingänge sind HIGH.

Viel Spaß mit den NeoPixeln!

So sieht es jetzt ganz gut aus. :slight_smile: Danke für die Hilfe
Aber mir fehlt bestimmt noch was fürs Auto ein. :slight_smile:

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUM_LIGHTS 23
int buttonPin1 = 2;
int buttonPin2 = 3;
int buttonState = 0;
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(23, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

uint32_t off = strip.Color(0,0,0);
uint32_t white = strip.Color(255,255,255);
uint32_t blue = strip.Color(0,0,255);
uint32_t red = strip.Color(255,0,0);
uint32_t orange = strip.Color(255,140,0);
//uint32_t green = strip.Color(0,255,0);
//uint32_t pink = strip.Color(255,0,255);
//uint32_t violet = strip.Color(153,50,204);

int ch1;

void setup() {
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
  strip.begin();
  strip.show();
}

void setp(int pix, uint32_t col) {
  strip.setPixelColor(pix-1, col);
}


void loop() {
   
  if (digitalRead(buttonPin1) == HIGH)  {
    setp(1,blue);
    setp(2,blue);
    setp(3,blue);
    setp(4,blue);
    setp(5,blue);
    setp(6,white);
    setp(7,orange);
    setp(13,white);
    setp(14,orange);
    setp(15,blue);
    setp(16,blue);
    setp(17,blue);
    setp(18,blue);
    setp(19,blue);
    setp(20,orange);
    setp(21,red);
    setp(22,red);
    setp(23,red);
    strip.show();
    delay(500);
    setp(1,blue);
    setp(2,blue);
    setp(3,blue);
    setp(4,blue);
    setp(5,blue);
    setp(6,white);
    setp(7,off);
    setp(13,white);
    setp(14,off);
    setp(15,blue);
    setp(16,blue);
    setp(17,blue);
    setp(18,blue);
    setp(19,blue);
    setp(20,off);
    setp(21,red);
    setp(22,red);
    setp(23,off);
    strip.show();
    delay(500);
    
    
  } else if  (digitalRead(buttonPin2) == HIGH){
    int loops = 2;
    int count = 0;
    int timer = 50;
  
    uint32_t low = strip.Color(0, 0, 0); 
    uint32_t high = strip.Color(255,0,0);
     setp(6,white);
     setp(13,white);
     setp(20,red);
    setp(21,red);
    setp(22,red);
    setp(23,red);
    // Flash Lights
    for(int i = 0; i < loops; i++){
        for (count=7;count<11;count++) {
            strip.setPixelColor(count, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count+1,high);
            strip.show();
            delay(timer);
            strip.setPixelColor(count, low);
            strip.show();
            delay(timer*2);

        }
        for (count=11;count>7;count--) {
            strip.setPixelColor(count, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count-1, high); 
            strip.show();
            delay(timer);
            strip.setPixelColor(count, low); 
            strip.show();
            delay(timer*2);
 
        }
        }
  } else {
    // Turn them off
    for( int i = 0; i<NUM_LIGHTS; i++){
        strip.setPixelColor(i, LOW);
        strip.show();
    }
  }
}