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
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:
etwas in dieser art einfügen:
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
Post a Comment