Hallo!
Bin, was die Arduino-Programmierung angeht noch recht unerfahren; kenn mich nur einwenig mit C-programmierung aus.
Hab mir daher mal eine kleine Übungsaufgabe gestellt:
Eine RGB (gemeinsamer Pluspol) soll über einen Taster gesteuert werden.
Wenn man den Taster drückt, wechselt die RGB ihre Farbe nach diesem Schema:
RGB leuchtet rot --> drücke Taster --> RGB leuchtet grün --> drücke Taster --> RGB leuchtet blau --> drücke Taster --> wieder von vorne.
Hab schon alles programmiert und die Schaltung aufgebaut.
Würde gerne wissen, ob man da noch was verbessern könnte (vorallem im Quelltext) oder ob das so schon ideal ist.
Hier mal die Schaltung (mit Frintzing erstellt):
und der Quelltext von Hauptfunktion und Unterfunktion:
main:
/*Deklaration der Pins*/
int rot = 9;
int gruen = 10;
int blau = 11;
int taster = 2;
/*Deklaration und Initialisierung der Zählvariable*/
int i = 1;
void setup()
{
pinMode(rot,OUTPUT);
pinMode(gruen,OUTPUT);
pinMode(blau,OUTPUT);
pinMode(taster,INPUT);
}
void loop()
{
leuchten(rot,gruen,blau,i); // Unterfunktion bringt RGB zum Leuchten
if ( digitalRead(taster) == 1) // Wenn Taster gedrückt wird soll nächste Farbe leuchten
{
delay(50); // zum Entprellen des Tasters
i++; // Erhöhung der Zählvariable
if ( i > 3) i = 1; // Falls Zählvariable größer als drei ist, soll vonvorne gezählt werden
leuchten(rot,gruen,blau,i); // Unterfunktion bringt neue Farbe zum leuchten
do { // Programm fährt erst fort, wenn Taster wieder losgelassen wurde
digitalRead(taster);
} while ( !(digitalRead(taster)==0));
}
delay(50); //zum Entprellen des Tasters
}
leuchten:
void leuchten(int rot, int gruen, int blau, int i)
{
switch (i)
{
case 1: digitalWrite(rot,LOW); // rote LED an
digitalWrite(gruen,HIGH);
digitalWrite(blau,HIGH);
break;
case 2: digitalWrite(rot,HIGH); // grüne LED an
digitalWrite(gruen,LOW);
digitalWrite(blau,HIGH);
break;
case 3: digitalWrite(rot,HIGH); // blaue LED an
digitalWrite(gruen,HIGH);
digitalWrite(blau,LOW);
break;
}
return;
}
Lässt sich da noch irgendetwas sauberer programmieren? Wenn ja, würde ich mich über Tipps freuen!
Gruß ser_u