Ich habe folgendes Problem:
Ich habe zwei Arduinos mit je einem HC-05 Bluetooth Modul. Beim Master sollen aus einem Beschleunigungssensor Werte ausgelesen werden und in Befehle/Wörter umgewandelt werden, welche über das HC-05 Bluetooth Modul an das andere gesendet wird.
Diese Wörter sollen dann im Seriellen Monitor ausgegeben werden.
-Dies klappt auch alles, jedoch relativ langsam, was kann ich tun, um die Verzögerung auf ein Minimum zu verkleinern?
serial.readstring() hat einen Timeout der standardmäßig auf einer Sekunde steht. Den TimeOut kann man selbst setzen.
am schnellsten geht es wenn man eine Empfangslogik mit
serial.read() benutzt und ein Endekennzeichen benutzt. Dann hat man überhaupt keine timeout Verzögerung.
@my_xy_projekt die Wörter erscheinen im Seriellen Monitor, jedoch nicht gerade flüssig, es werden ca. 10 Wörter bzw. Zeilen geschrieben, dann eine Pause und dann erneut.
Ist das normal?
Kann ich nicht sagen.
Ich weiss nicht, was "normal" sein kann...
Eigentlioch ist "Pause" nicht vorgesehen.
Ich hab mal Deinen Sender runtergekürzt....
int xPin = A3;
int yPin = A2;
int zPin = A1;
int xSpielraum;
int ySpielraum;
int zSpielraum;
void setup()
{
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(zPin, INPUT);
Serial.begin(115200);
xSpielraum = analogRead(xPin);
ySpielraum = analogRead(yPin);
zSpielraum = analogRead(zPin);
}
void loop()
{
int xWert = analogRead(xPin);
int yWert = analogRead(yPin);
int zWert = analogRead(zPin);
/*
Serial.print("X:");
Serial.print(xWert);
Serial.print(" Y:");
Serial.print (yWert);
Serial.print(" Z:");
Serial.print(zWert);
Serial.print("\t");
*/
if (xSpielraum - 15 > xWert)
{
if (xSpielraum - 21 < xWert)
{
Serial.println("Voraus1");
}
else if (xSpielraum - 27 < xWert)
{
Serial.println("Voraus2");
}
else if (xSpielraum - 33 < xWert)
{
Serial.println("Voraus3");
}
else if (xSpielraum - 39 < xWert)
{
Serial.println("Voraus4");
}
else if (xSpielraum - 45 < xWert)
{
Serial.println("Voraus5");
}
else if (xSpielraum - 51 < xWert)
{
Serial.println("Voraus6");
}
else if (xSpielraum - 57 < xWert)
{
Serial.println("Voraus7");
}
else if (xSpielraum - 63 < xWert)
{
Serial.println("Voraus8");
}
else if (xSpielraum - 69 < xWert)
{
Serial.println("Voraus9");
}
else if (xSpielraum - 75 < xWert)
{
Serial.println("Voraus10");
}
}
else if (xSpielraum + 15 < xWert)
{
if (xSpielraum + 21 > xWert)
{
Serial.println("Zurück1");
}
else if (xSpielraum + 27 > xWert)
{
Serial.println("Zurück2");
}
else if (xSpielraum + 33 > xWert)
{
Serial.println("Zurück3");
}
else if (xSpielraum + 39 > xWert)
{
Serial.println("Zurück4");
}
else if (xSpielraum + 45 > xWert)
{
Serial.println("Zurück5");
}
else if (xSpielraum + 51 > xWert)
{
Serial.println("Zurück6");
}
else if (xSpielraum + 57 > xWert)
{
Serial.println("Zurück7");
}
else if (xSpielraum + 63 > xWert)
{
Serial.println("Zurück8");
}
else if (xSpielraum + 69 > xWert)
{
Serial.println("Zurück9");
}
else if (xSpielraum + 75 > xWert)
{
Serial.println("Zurück10");
}
}
else if (ySpielraum - 15 < yWert)
{
if ( ySpielraum - 21 > yWert)
{
Serial.println ("Links1");
}
else if (ySpielraum - 27 < yWert)
{
Serial.println ("Links2");
}
else if (ySpielraum - 33 < yWert)
{
Serial.println ("Links3");
}
else if (ySpielraum - 39 < yWert)
{
Serial.println ("Links4");
}
else if (ySpielraum - 45 < yWert)
{
Serial.println ("Links5");
}
else if (ySpielraum - 51 < yWert)
{
Serial.println ("Links6");
}
else if (ySpielraum - 57 < yWert)
{
Serial.println ("Links7");
}
else if (ySpielraum - 63 < yWert)
{
Serial.println ("Links8");
}
else if (ySpielraum - 69 < yWert)
{
Serial.println ("Links9");
}
else if (ySpielraum - 75 < yWert)
{
Serial.println ("Links10");
}
}
else if (ySpielraum + 15 < yWert)
{
if (ySpielraum + 21 > yWert)
{
Serial.println ("Rechts1");
}
else if (ySpielraum + 27 > yWert)
{
Serial.println ("Rechts2");
}
else if (ySpielraum + 33 > yWert)
{
Serial.println ("Rechts3");
}
else if (ySpielraum + 39 > yWert)
{
Serial.println ("Rechts4");
}
else if (ySpielraum + 45 > yWert)
{
Serial.println ("Rechts5");
}
else if (ySpielraum + 51 > yWert)
{
Serial.println ("Rechts6");
}
else if (ySpielraum + 57 > yWert)
{
Serial.println ("Rechts7");
}
else if (ySpielraum + 63 > yWert)
{
Serial.println ("Rechts8");
}
else if (ySpielraum + 69 > yWert)
{
Serial.println ("Rechts9");
}
else if (ySpielraum + 75 > yWert)
{
Serial.println ("Rechts10");
}
}
else
{
Serial.println("nichts");
}
delay(100);
}
Ich schreib mal den Empfänger nochmal um - in der Zeit kannst ja mal sehen, obder Sender noch immer das macht, was du willst...
ungetestet und ohne Anspruch auf irgendwas.
Das ganze hat mittlerweile geklappt.
Ich habe beim Sender die Wörter (Voraus1) gekürzt z.B. v1 und beim Empfänger habe ich Serial1.readStringUntil('\n') verwendet.
Liebes Forum,
Leider wurde mein Problem doch nciht behoben, denn wies schon gesagt:
ich würde gerne, ein Arduino Nano mit einem Arduino Mega kommunizieren lassen, um mit Handneigungen (Seitens des Nanos) einen Roboter bzw. Motoren (den Mega) steuern. Dies klappt auch alles mit zwei HC-05 Modulen, jedoch noch sehr langsam.
Gerne würde ich diese Verzögerung die Momentan besteht auf ein Minimum verringern. Würde ich die zwei Boards nämlich direkt seriell mit Kabel verbinden, entsteht keine Verzögerung und nehme auch wenn ich nur die Zahlen verlangen würde entsteht immer noch die Verzögerung (somit liegt es nicht an den Motoren).
Erstmal den Empfänger auf das Minimum runterkürzen:
void setup()
{
Serial1.begin(115200);
Serial.begin(115200);
}
void loop ()
{
motorAusleserUndAusgeber();
}
void motorAusleserUndAusgeber()
{
if (Serial1.available() > 0)
{
byte state = Serial1.read();
Serial.print(F("State: "));
Serial.println(state);
Und warum floodest Du den Sender mit und dann auch noch das delay....
[quote="dominic, post:14, topic:949028"]
```
else{
Serial.write(0);
}
delay(10);
```
[/quote]
}
}
Ich würde die zu sendenden Werte dauernd errechnen und nach dem senden zwischenspeichern und nur nach einer Änderung wieder senden.
mir ist schon bewusst, dass da ein delay ist, aber der ist nur um nichts zu überfordern und die Verzögerung vom empfangen der Daten beträgt weitaus mehr als 10 millisekunden
Wenn ein System mit dem Gesamtprogramm nicht funktioniert und man nicht weiß wo der Fehler herkommt, dann geht man zurück zu einem einfacheren Testprogramm.
In dem Fall schalge ich vor du schreibst für die Empfängerseite ein einfaches Programm, das einfach nur bytes via bluetooth empfängt und die empfangenen bytes auf den seriellen Monitor ausgibt.
Dazu im seriellen Monitor das Kästchen für Zeitstempel aktivieren.
Dann als Code-Section mal so 20 bis 100 Ausgabezeilen hier posten.