Frage zu einer Steuerung mit nur einem Taaster


bastele gerade einer steuerung für einen rgb-leuchtstreifen. habe schon einiges wie ich es möchte. allerdings möchte ich noch erweitern.

schalte alle farben sicher durch nur fehlt mir noch ein farbwechsel und das ausschalten bei lange gedrücktem taster.

hänge mal den sketch vielleicht hat ja einer eine idee.

gruß leo

code: [select]


const int taster = 18;            // pin nummer des tasters
const int led_rot = 2;            // pin nummer der ledfarbe rot
const int led_gruen = 3;          // pin nummer der ledfarbe grün
const int led_blau = 4;           // pin nummer der ledfarbe blau

int zaehler = 1;                  // zähler für den aktuellen programstand
int tasterstatus = low;           // aktuelles signal vom eingangspin
int tastergedrueckt = 0;          // abfragen ob taster gedrückt war
int vorherigerstatus = low;       // vorheriges signal vom eingangspin
int entprellzeit = 200;           // zeit für entprellung, anpassen!

unsigned long tasterzeit = 0;     // zeit beim drücken des tasters


void setup() {               
  pinmode(led_blau, output);       // led pin wird als ausgang gesetzt
  pinmode(led_rot, output);        // led pin wird als ausgang gesetzt
  pinmode(led_gruen, output);      // led pin wird als ausgang gesetzt
  pinmode(taster, input);          // taster pin wird als eingang gesetzt
}

void loop()
{
tasterstatus = digitalread (taster);         // tasterstatusabfrage

//flankenwechsel erkennen
if(vorherigerstatus == low && tasterstatus == high)       
{
    tasterzeit = millis();      // aktualisiere tasterzeit
    tastergedrueckt = 1;        // speichert, dass taster gedrückt wurde
  }
 
  // wenn die gewählte entprellzeit vergangen ist und der taster gedrückt war...
  if ((millis() - tasterzeit > entprellzeit) && tastergedrueckt == 1)

{
    //abhängig vom zähler passende funktion aufrufen
    switch(zaehler) {
     case 1:     led_1();                  // fall_1 led blau
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 2:     led_2();                  // fall_2 led rot
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 3:     led_3();                  // fall_3 led gruen
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 4:     led_4();                  // fall_4 led lila
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 5:     led_5();                  // fall_5 led türkis
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 6:     led_6();                  // fall_6 led gelb
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 7:     led_7();                  // fall_7 led weis
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 8:     led_8();                  // fall_8 led farbmisch
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
     case 9:     led_9();                  // fall_9 led aus
                 tastergedrueckt = 0;      // setzt gedrückten taster zurück
                 break;
    }   

    zaehler++;    //zähler erhöhen

    if(zaehler == 10) zaehler = 1;    //zähler zurücksetzen
}
 

vorherigerstatus = tasterstatus;          //letzten zustand merken

}

void led_1()                        // fall_1 led blau
{
  digitalwrite(led_blau, high);     // led blau an
  digitalwrite(led_rot, low);       // led rot aus
  digitalwrite(led_gruen, low);     // led gruen aus
}
 

void led_2()                        // fall_2 led rot
{
  digitalwrite(led_blau, low);      // led blau aus
  digitalwrite(led_rot, high);      // led rot an
  digitalwrite(led_gruen, low);     // led gruen aus
}

void led_3()                        // fall_3 led grün
{
  digitalwrite(led_blau, low);      // led blau aus
  digitalwrite(led_rot, low);       // led rot aus
  digitalwrite(led_gruen, high);    // led gruen an
}

void led_4()                        // fall_4 led lila
{
  digitalwrite(led_blau, high);     // led blau an
  digitalwrite(led_rot, high);      // led rot an
  digitalwrite(led_gruen, low);     // led gruen aus
}

void led_5()                        // fall_5 led türkis
{
  digitalwrite(led_blau, high);     // led blau an
  digitalwrite(led_rot, low);       // led rot aus
  digitalwrite(led_gruen, high);    // led gruen an
}

void led_6()                        // fall_6 led gelb
{
  digitalwrite(led_blau, low);      // led blau aus
  digitalwrite(led_rot, high);      // led rot an
  digitalwrite(led_gruen, high);    // led gruen an
}

void led_7()                        // fall_7 led weis
{
  digitalwrite(led_blau, high);     // led blau an
  digitalwrite(led_rot, high);      // led rot an
  digitalwrite(led_gruen, high);    // led gruen an
}

void led_8()                        // fall_8 led aus
{while(1)
{
  digitalwrite(led_rot, low);       // led rot aus
  digitalwrite(led_gruen, low);     // led gruen aus
  (int helligkeit =1; helligkeit <= 255; helligkeit = helligkeit +5){
    analogwrite(led_blau, helligkeit);
    delay(20);
  }
  (int helligkeit =255; helligkeit >= 0; helligkeit = helligkeit -5){
    analogwrite(led_blau, helligkeit);
    delay(20);
  }
}
}

void led_9()                        // fall_9 led aus
{
  digitalwrite(led_blau, low);      // led blau aus
  digitalwrite(led_rot, low);       // led rot aus
  digitalwrite(led_gruen, low);     // led gruen aus
}

für den ausschalter kannst du vor dieser zeile:

code: [select]
vorherigerstatus = tasterstatus;          //letzten zustand merken

etwas in dieser art einfügen:

code: [select]
if (vorherigerstatus != tasterstatus && millis() - tasterzeit > 1000) { // taster losgelassen und war mind. 1 sek. gedrueckt
  led_9();
  tastergedrueckt = 0;
}


Arduino Forum > International > Deutsch (Moderator: uwefed) > Frage zu einer Steuerung mit nur einem Taaster


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor