Objekt, Funktionen und Bibliotheken in der Arduino IDE
Ein einfaches Beispiel (eine blinkenden LED) soll einmal zeigen auf welche Arten man in der Arduino-IDE Objekte, Klassen und Bibliotheken programmieren kann.
Das Beispiel beschreibt eine LED die verblassen soll ….
//LED Verblassen standard const int led_pin = 13; //PWM pin an dem die LED angeschlossen wurde const int stufen = 5; //Stufen in der die LED verblassen soll const int geschwindigkeit = 10; //Pausen bist zur nächsten Stufe const int pause = 100; //pause zwischen den schleifen void setup() { pinMode(led_pin, OUTPUT); //definiert den led_pin als ausgang } void loop() { for (int i=0; i <= 255; i=i+stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); //Warte 10 Millisekunden } delay(pause); for (int i=255; i >= 0; i=i-stufen){ // analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); // Warte 10 Millisekunden } }
Das gleiche Beispiel nur mit einem Funktionsaufruf. Somit kann die Funktion an verschiedenen Stellen des Programmes aufgerufen werden.
//LED Verblassen funktion const int led_pin = 13; //PWM pin an dem die LED angeschlossen wurde //const int stufen = 5; //Stufen in der die LED verblassen soll //const int geschwindigkeit = 10; //Pausen bist zur nächsten Stufe //const int pause = 100; //pause zwischen den schleifen void setup() { pinMode(led_pin, OUTPUT); //definiert den led_pin als ausgang } void loop() { verblassen(5,10,100); //ruft die funktion mit den entsprechenden Parametern auf } void verblassen(int stufen, int geschwindigkeit, int pause){ ////Stufen in der die LED verblassen soll, Pausen bist zur nächsten Stufe, pause zwischen den schleifen for (int i=0; i <= 255; i=i+stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); //Warte 10 Millisekunden } delay(pause); //pause zwischen den schleifen for (int i=255; i >= 0; i=i-stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); // Warte 10 Millisekunden } }
In diesem Beispiel wurde die Funktion zu einer Klasse umgebaut. Der Vorteil liegt in der Erzeugung von verschiedenen Objekten also mehrere LED’s die an verschiedenen Stellen aufgerufen werden können.
//LED Verblassen mit einer Klasse zur LED Steuerung class verblassen { private: //alles was folgt, ist nur für den internen Gebrauch durch die Klasse selbst: int led_pin; //jedes Objekt vom verblassen hat seinen eigenen led_pin public: //alles was folgt, ist auch nach außen sichtbar //Diese Setup-Funktion muss aufgerufen werden, bevor die LED Steuerung verwendet wird: void setup(int new_led_pin){ //wir merken uns die Pins für die spätere Verwendung led_pin=new_led_pin; //und initialiseren auch gleich die Ausgänge pinMode(led_pin,OUTPUT); } //Mit dieser Fukntion lässt sich die LED steuern void start(int stufen, int geschwindigkeit, int pause){ //stufen in der die LED verblassen soll, Pausen bist zur nächsten Stufe, pause zwischen den schleifen for (int i=0; i <= 255; i=i+stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); //Warte 10 Millisekunden } delay(pause); //pause zwischen den schleifen for (int i=255; i >= 0; i=i-stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); // Warte 10 Millisekunden } } }; verblassen led; //erstellen eines objektes verblassen led2; //erstellen eines objektes void setup() { led.setup(13); //definiert den led_pin als ausgang led2.setup(12); //definiert den led_pin als ausgang } void loop() { led.start(5,10,100); //ruft das objekt mit den entsprechenden Parametern auf led2.start(1,5,100); //ruft das objekt mit den entsprechenden Parametern auf }
Als letztes Beispiel wurde die Klasse in eine Bibliothek eingefügt. Das Programm ist somit schön klein und übersichtlich …
//LED Verblassen bibliothek #include "verblassen.h" verblassen led; verblassen led2; void setup() { led.setup(13); //definiert den led_pin als ausgang led2.setup(12); //definiert den led_pin als ausgang } void loop() { led.start(5,10,100); //ruft das objekt mit den entsprechenden Parametern auf led2.start(1,5,100); //ruft das objekt mit den entsprechenden Parametern auf }
und noch die Bibliothek dazu… sie sollte in dem gleichen Ordner liegen …
// Bibliothek mit einer Klasse zur LED steuerung class verblassen { private: // alles was folgt, ist nur für den internen Gebrauch durch die Klasse selbst: int led_pin; //jedes Objekt vom verblassen hat seinen eigenen led_pin public: //alles was folgt, ist auch nach außen sichtbar //Diese Setup-Funktion muss aufgerufen werden, bevor die LED Steuerung verwendet wird: void setup(int new_led_pin){ //wir merken uns die Pins für die spätere Verwendung led_pin=new_led_pin; //und initialiseren auch gleich die Ausgänge pinMode(led_pin,OUTPUT); } //Mit dieser Fukntion lässt sich die LED regeln void start(int stufen, int geschwindigkeit, int pause){ //Stufen in der die LED verblassen soll, Pausen bist zur nächsten Stufe, pause zwischen den schleifen for (int i=0; i <= 255; i=i+stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); //Warte 10 Millisekunden } delay(pause); //pause zwischen den schleifen for (int i=255; i >= 0; i=i-stufen){ //definiert die schleife mit den stufen analogWrite(led_pin, i); //Schreibe den Wert von "i" auf den LED-Pin delay(10); // Warte 10 Millisekunden } } };