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
universalboard_regler.zip - Ausgangsprojekt
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)