Programmierung des ESP32
Da jeder T1 andere Toleranzen hat, wird mit einem Programm zum Bestimmen der Lenkwinkel begonnen. Die Grundlagen der Ansteuerung eines Servos sollten bekannt sein (siehe T1-Remote -> Schritt 2 -> Einen Servo anschließen und in Betrieb nehmen).
#include <ESP32Servo.h>
Servo lenkungServo;
#define Lenkwinkel 90
void setup()
{
//Den Servo für den ESP32 bereit machen
lenkungServo.setPeriodHertz(50);
lenkungServo.attach(14, 500, 2500);
}
void loop()
{
lenkungServo.write(Lenkwinkel); //Die Textersetzung "Lenkwinkel" kann genutzt werden, um die Winkel für die Geradeausfahrt, den linken Anschlag und rechten Anschlag zu bestimmen.
delay(1000);
} |
---|
Nach Bestimmen der Winkel für
- Geradeaus
- maximal Links
- maximal Rechts
muss sich nun mit den empfangenen Daten aus der App beschäftigt werden. Die App übermittelt die Daten in einem festen Muster:
<Fahrtrichtung>;<Lenkung0><Lenkung1><Lenkung2>
wobei Fahrtrichtung folgende Werte annehmen kann:
- 0 - Stillstand
- 1 - Vorwärts
- 2 - Rückwärts
Die Lenkung kann wiederum Werte von 0 bis 100 annehmen. 0 entspricht hier 100 % Links, 50 der Geradeausfahrt und 100 100 % rechts.
Um nun die Werte der App auf die Lenkwinkel des Servos anzupassen, bietet Arduino die "map" Funktion. Sie interpoliert die eingegeben Werte auf den gewünschten Bereich. Der Aufruf der Funktion erfolgt wie folgt:
map(<Variable>, <minEigabe>, <maxEingabe>, <minAusgabe>, <maxAusgabe>)
Nun fehlt noch das Empfangen der Bluetooth Daten aus der App auf den ESP32.
Wie beim Servo muss hier auch erst wieder eine Instanz der Klasse Servo erzeugt werden. Anschließend muss in "setup()" der Connection ein Name gegeben werden (diesen sieht man dann bei den verbundenen Geräten). Jetzt ist der ESP32 bereit für eine Verbindung.
Das Einlesen der Daten erfolgt in der "loop()" Funktion. Sobald Daten von der App gesendet werden, gibt "SerialBT.available()" ein "true" zurück und das Einlesen der Daten beginnt. Da bei einer seriellen Verbindung jeder Buchstabe einzeln übertragen wird, muss der String der empfangenen Buchstaben Stück für Stück zusammengesetzt werden. Dies geschieht in der "while" Schleife.
Nach der Schleife ist der String bekannt, welcher kurz zuvor vom Smartphone gesendet wurde.
#include <BluetoothSerial.h>
#include <ESP32Servo.h> //Laden der beiden Bibliotheken //Die ersten beiden Char enfernen (<richtung> und <;>)
empfangen.remove(0,2);
//Der übrige String gibt nun Auskunft über den Lenkwinkel
int lenkung = empfangen.toInt();
//Entsprechend der Definition der Daten die den Servo setzen
if(lenkung == 50)
{
lenkungServo.write(90);
}
else if((lenkung > 50) && (lenkung < 100))
{
lenkungServo.write((map(lenkung, 51, 100, 89, 55)));//Nutzen der Map Funktion zum Interpolieren der Lenkwinkel
}
else if((lenkung < 50) && (lenkung > 0))
{
lenkungServo.write((map(lenkung, 0, 49, 125, 91)));
}
}
delay(10); //Die App sendet nur alle 50 ms, daher kann hier kurz Pause gemacht werden
}
|
|
---|