Liebes Forum ich möchte einen servo SG92R in meinen Code integrieren, ich bräuchte 3 winkeleinstellungen links, eine Mitteleinstellung, und 3 Winkeleinstellungen rechts. Ausgangsstellung soll Mittelstellung sein. GND ist am Motortreiber angeschlossen. Stromversorgung ist am Motortreiber 5v Ausgang angeschlossen. Steuerung ist am Pin 5 angeschlossen. Durch den bereits umfangreichen code ist mir nicht ganz klar wie ich ansetzen sollte. eigenes “void set winkel” mit vielen if und else if. oder gehts aucheinfacher ? (natürlich brauch ich erst servo.h) Anbei mal mein Code vielleicht hat jemand einen tip.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3);
#define IN1 8 // Motor Richtung
#define IN2 7
#define ENA 9 // PWM Geschwindigkeit
const int geschwindigkeit[4] = {60, 120, 180, 255}; // Vier Stufen Vorwärts
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);
// Seriell & Bluetooth
Serial.begin(9600);
BTSerial.begin(9600);
// Motor Stop
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
Serial.println("DC Motor bereit. Kommandos: v1, v2, v3, v4, r, s");
}
const uint8_t maxIdx = 5;
char serBuf[maxIdx + 1];
char btBuf[maxIdx + 1];
uint8_t btIdx;
uint8_t serIdx;
void getSerial()
{
if (Serial.available()) // Es ist was im seriellen
{
char c = Serial.read(); // liest ein Zeichen aus
if (isPrintable(c)) // Test auf sichtbares Zeichen
{
serBuf[serIdx++] = c; // Dann in den Puffer aufnehmen
}
if (isControl(c) || // Steuerzeichen gelesen? ODER
serIdx == maxIdx) // Buffer voll
{
setSpeed(serBuf); // Aktion ausführen
clearBuf(serBuf, serIdx); // Variablen leeren
}
}
}
void getBluetooth()
{
if (BTSerial.available()) // Es ist was im seriellen
{
Serial.print(F("BT Zeichen erkannt: "));
char c = BTSerial.read(); // liest ein Zeichen aus
Serial.println(c, HEX);
if (isPrintable(c)) // Test auf sichtbares Zeichen
{
btBuf[btIdx++] = c; // Dann in den Puffer aufnehmen
}
if (isControl(c) || // Steuerzeichen gelesen? ODER
btIdx == maxIdx) // Buffer voll
{
if (btIdx) // Wenn Zeichen im Buffer sind
{ setSpeed(btBuf); } // Aktion ausführen
clearBuf(btBuf, btIdx); // Variablen leeren
}
}
}
void clearBuf(char *buf, uint8_t &idx)
{
memset(buf, '\0', maxIdx);
idx = 0;
}
void setSpeed(const char *buf)
{
if (!strcmp(buf, "v1"))
{ motorVorwaerts(geschwindigkeit[0]); }
else if (!strcmp(buf, "v2"))
{ motorVorwaerts(geschwindigkeit[1]); }
else if (!strcmp(buf, "v3"))
{ motorVorwaerts(geschwindigkeit[2]); }
else if (!strcmp(buf, "v4"))
{ motorVorwaerts(geschwindigkeit[3]); }
else if (!strcmp(buf, "r"))
{ motorRueckwaerts(90); } // Geschwindigkeit rückwärts
else if (!strcmp(buf, "s"))
{ motorStop(); }
else
{
Serial.print(F("FEHLER: "));
Serial.println(buf);
}
}
void loop()
{
getSerial();
getBluetooth();
}
void motorVorwaerts(int speed)
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, speed);
Serial.println("Motor vorwärts, Speed: " + String(speed));
}
void motorRueckwaerts(int speed)
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, speed);
Serial.println("Motor rückwärts, Speed: " + String(speed));
}
void motorStop()
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
Serial.println("Motor gestoppt");
}