Objektorientierte Programmierung mit Arduino
(EN google-translate)
(PL google-translate)
Die Objektorientierte Programmierung ermöglicht
|
|
Über "Neuer Tab" können Zusatzfenster in der Arduino-IDE geöffnet werden. Hierin lassen sich in C++ Klassen formulieren, die dann über include-Befehle in das Hauptprogramm integriert werden können.
Verwenden Sie für die Tab-Namen die Endung .h
Bild 0-1: Erzeugen eines neuen Tabs
Beispielprojekt universalboard_regler2: OOP-Konzept für die Antriebseinheit
universalboard_regler2.zip - Antrieb über Klasse realisiert.#include "Antrieb.h" //Über die Taster wird die Richtung gewechselt. //Zuordnung Analog zu Digital //A0 = D18 //A1 = D19 //A2 = D20 //A3 = D21 //A4 = D22 //A5 = D23 //A6 = D24 //A7 = D25 //A8 = D26 //A9 = D27 //A10 = D28 //A11 = D29 int sensorwert = 0; int stellgroesse=0; int senden=0; Antrieb antrieb; void setup() { DDRB=255; pinMode(2,INPUT); digitalWrite(2,1); //Pullup-Widerstand pinMode(4, INPUT); digitalWrite(4,1); //Pullup-Widerstand Serial.begin(9600); } void loop() { sensorwert = analogRead(2); PORTB=(1<<(sensorwert>>6)); stellgroesse = (sensorwert-100); //linker Motor antrieb.links(127-stellgroesse); //rechter Motor antrieb.rechts(127+stellgroesse); //seriell senden: if(stellgroesse<0) { senden = -stellgroesse; Serial.write('-'); } else { senden = stellgroesse; Serial.write('+'); } Serial.write(48+(senden/1000)%10); Serial.write(48+(senden/100)%10); Serial.write(48+(senden/10)%10); Serial.write(48+(senden/1)%10); Serial.write('\r'); Serial.write('\n'); }
Code 0-1: Hauptprogramm von universalboard_regler2
#include "Arduino.h" class Antrieb { public: Antrieb() { //LINKER MOTOR //A5 als digitaler Ausgang, INPUT 3 pinMode(23,OUTPUT); //A0 als digitaler Ausgang, INPUT 4 pinMode(18,OUTPUT); digitalWrite(23,0); //1 eine Richtung digitalWrite(18,1); //0 analogWrite(6,0); //RECHTER MOTOR //A4 als digitaler Ausgang, INPUT 2 pinMode(22,OUTPUT); //A1 als digitaler Ausgang, INPUT 1 pinMode(19,OUTPUT); digitalWrite(22,1); //1 eine Richtung digitalWrite(19,0); //0 analogWrite(5,0); } void links(int wert) { if(wert>0) { digitalWrite(23,0); //1 eine Richtung digitalWrite(18,1); //0 analogWrite(6,wert); } else { digitalWrite(23,1); //0 andere Richtung digitalWrite(18,0); //1 analogWrite(6,-wert); } } void rechts(int wert) { if(wert>0) { digitalWrite(22,1); //1 eine Richtung digitalWrite(19,0); //0 analogWrite(5,wert); } else { digitalWrite(22,0); //0 andere Richtung digitalWrite(19,1); //1 analogWrite(5,-wert); } } };
Code 0-2: Antrieb.h - Klasse mit Antrieb (zweiter Tab im Projekt)