kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Objektorientierte Programmierung mit Arduino

(EN google-translate)

(PL google-translate)

Die Objektorientierte Programmierung ermöglicht

  • eine bessere Modularisierung einzelner Programmkomponenten,
  • was wiederum weniger fehlerhaften Code zur Folge hat
  • und eine leichtere Wartbarkeit und Wiederverwendbarkeit gewährleistet.
  • Außerdem wird die Komplexität reduziert, was komplexere Projekte er

Ü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

Erzeugen eines neuen Tabs

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)