Ich habe Stepper während eines Interrupt-Timers bei 50 und habe alle meine Code arbeiten zwischen den Interrupts, bis ich versuchte, serielle Befehle mehr als ein Zeichen lang zu lesen.Wie lese ich serielle zwischen Interrupts auf Arduino?
Ich bekomme Bytes fallen gelassen, so dass meine Zeichenfolgen alle 4-5 Zeichen einen Buchstaben fehlen. Ich recherchierte den ganzen Tag, um zu versuchen, eine Lösung zu finden, habe aber nichts gefunden. Wenn ich keinen Interrupt verwende, stoppt mein Stepper 2 Sekunden lang und liest eine ein Zeichen lange serielle Eingabe als String.
Mein Ziel ist es, eine Fernsteuerungs-App zu haben, die Geschwindigkeitsbefehle sendet. Ich brauche Hilfe, um dieses Problem zu lösen.
https://sourceforge.net/p/open-slider/code/ci/master/tree/OpenSliderFirmware/
String incomingString = "";
if (Serial.available() > 0) {
incomingString = Serial.readString();
Serial.println(incomingString);
}
Mit Accelstepper Bibliothek
Alarm:
//Interrupt Timer1
void ISR_stepperManager() {
Slide.runSpeed();
Xaxis.runSpeed();
Yaxis.runSpeed();
}
Verwenden Sie eine Software (bit-banged?) Serielle Schnittstelle? Was ist die serielle Datenrate und die Rate der Stepper-Interrupts? – barny
Unterbrechung ist 50ms. Baud ist 115200 auf serial0 USB. Irgendwann werde ich eine Software-Seriennummer auf Pins 2 & 3 laufen lassen, glaube ich für Bluetooth (wenn ich es herausfinden kann) Ich versuche immer noch jemanden zu finden, der erklären kann, wie Marlin-Firmware Schritt für Schritt und seriell gleichzeitig zuverlässig leistet. Marlin liest jeweils 1 Char, zu dem ich zurückwechseln werde, um andere Dinge nicht zu blockieren. Ich dachte, sie benutzten einen Interrupt, um die Stepper zu fahren, aber ich bin mir nicht mehr sicher. Ich benutze ein 2560 und ein RAMPS. Ich bin immer noch ein Anfänger auf fortgeschrittenem Zeug. – naps1saps
Zuerst sollten Sie versuchen, die serielle Baudrate zu reduzieren: 115200 Baud sind ungefähr 80 Mikrosekunden pro Byte - wenn also Ihre Stepper-Interrupt-Service-Routine mehr als 80us benötigt, riskieren Sie sofort, eine Serien-Char zu verpassen. Versuchen Sie 9600 Baud (oder langsamer), das ist etwa eine Millisekunde pro Byte.Wenn Sie nicht sicher sind, wie lange der ISR braucht und einen Bereich verfügbar hat, stellen Sie am Anfang des ISR die ISR-Ausgabe auf 1 und am Ende auf 0, und schauen Sie sich die Breite des Impulses an und wie viel es variiert. Für Bit-Banged müssen Sie die serielle Datenrate definitiv verlangsamen. – barny