kann mir jemand für Idioten erklären, was es mit dem void in den Klammern auf sich hat? Habs schon öfter gesehen, aber bisher nichts zum lesen dazu gefunden.
Weshalb ich frage
int mot1=9;
int mot2=6;
int mot3=5;
int mot4=3;
int left=13;
int right=12;
int Left=0;
int Right=0;
void LEFT (void);
void RIGHT (void);
void STOP (void);
void setup()
{
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(mot3,OUTPUT);
pinMode(mot4,OUTPUT);
pinMode(left,INPUT);
pinMode(right,INPUT);
digitalWrite(left,HIGH);
digitalWrite(right,HIGH);
}
void loop()
{
analogWrite(mot1,255);
analogWrite(mot2,0);
analogWrite(mot3,255);
analogWrite(mot4,0);
while(1)
{
Left=digitalRead(left);
Right=digitalRead(right);
if((Left==0 && Right==1)==1)
LEFT();
else if((Right==0 && Left==1)==1)
RIGHT();
}
}
void LEFT (void)
{
analogWrite(mot3,0);
analogWrite(mot4,30);
while(Left==0)
{
Left=digitalRead(left);
Right=digitalRead(right);
if(Right==0)
{
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1)
{
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot1,255);
analogWrite(mot2,0);
}
analogWrite(mot3,255);
analogWrite(mot4,0);
}
void RIGHT (void)
{
analogWrite(mot1,0);
analogWrite(mot2,30);
while(Right==0)
{
Left=digitalRead(left);
Right=digitalRead(right);
if(Left==0)
{
int lprev=Left;
int rprev=Right;
STOP();
while(((lprev==Left)&&(rprev==Right))==1)
{
Left=digitalRead(left);
Right=digitalRead(right);
}
}
analogWrite(mot3,255);
analogWrite(mot4,0);
}
analogWrite(mot1,255);
analogWrite(mot2,0);
}
void STOP (void)
{
analogWrite(mot1,0);
analogWrite(mot2,0);
analogWrite(mot3,0);
analogWrite(mot4,0);
}
Leider kenne ich kein Buch, das ich Dir empfehlen kann, da die mir bekannten Bücher für Arduino eher Projekte beschreiben, nicht aber die Sprache C++.
Der Breymann steht hinter mir und setzt Staub an, weil das Buch einen praktisch erschlägt: zu dick, zu schwer. In der pdf-Datei schlage ich allerdings gerne nach. Dabei ist zu berücksichtigen, daß es kein Buch für den Arduino ist. Mal irgendein Beispiel:
Listing 2.1: Beispielprogramm mit einer Funktion (cppbuch/k2/fakultaet.cpp)
#include <iostream>
long long fakultaet(int); // Funktionsprototyp (Deklaration)
using namespace std;
int main() // der Kürze wegen ohne Prüfung der Eingabe
{
cout << "Fakultät berechnen. Zahl >= 0? :";
int n {0};
cin >> n;
cout << "Das Ergebnis ist " << fakultaet(n) << ’\n’; // Aufruf
}
long long fakultaet(int zahl) // Funktionsimplementation (Definition)
{
long long fak {1};
for (int i = 2; i <= zahl; ++i) {
fak *= i;
}
return fak;
}
Das kann man leicht in setup() und loop() überführen, stellt für den Anfänger aber eine kleine Hürde dar.
Mein Tipp: Jeder lernt anders und benötigt daher anderes Lernmaterial. In D A CH gibt es Bibliotheken und Büchereien, wo Du Bücher einsehen und probelesen kannst. Was Dich anspricht, das leihst Du aus, später kannst Du es auch kaufen.
Die geschweiften Klammern habe ich ergänzt.
void: Typ des Rückgabewertes der Funktion wie int, byte oder bool. Bei void kommt nichts zurück.
drive: Name der Funktion.
(): Parameter, die der Funktion übergeben werden. Referenzen und Zeiger ermöglichen auch eine Rückgabe von Werten.
Ohne Kenntnis der Grundlagen wird man nie verstehen was da im Microcontroller passiert. Und da in der Arduinoumgebung C++ programmiert wird, ist die Kenntnis von Datentypen und die Wirkungsweise von Funktionen + Operatoren essenziell. Und "void" gehört auch in die Kategorie Datentyp auch wenn es bedeutet, dass Daten unspezifiziert oder nicht vorhanden sind.
Auch das Verständnis darum, dass man sich als Programmierer eigene Datentypen "bauen" kann ist wichtig. Ein Haus ohne Fundament bricht zusammen. Ein C++ Programm ohne Grundkenntnisse entwickelt, funktioniert eher aus versehen als geplant...
Und diese Grundlagen sind in dem vorgeschlagenen Buch gut beschrieben.
Das genannte Buch kaufen/leihen/schenken lassen, und Seite für Seite durch ackern.
Das erste Mal lesen, kann nicht mehr als ein Überfliegen sein.
ca 10 bis 20% Verständnis.
Das zweite mal... da kann man schon mit Übungen anfangen.
Das gelesene sofort am PC ausprobieren.
Wobei man beim Üben als Einsteiger vielleicht nicht mit einem kompletten "Robot-Auto" anfangen sollte, sondern vielleicht erst mal nur mit einem Bauteil. Und dabei den Programmcode variieren und damit experimentieren...