Ich verwende die Arduino ServoTimer2 Bibliothek (weil ich auch die VirtualWire Bibliothek im selben Sketch verwenden muss. Ich weiß nicht, ob dieses Problem auch in der regulären Servo Bibliothek besteht, aber ich dachte, es sei erwähnenswert.
Jedes Mal, wenn ich servo.attach(pin)
aufrufe, bewegt sich der Servo von seiner aktuellen Position auf die genaue Mitte seines Bereichs (1500 Mikrosekunden). Das ist ein Problem, weil mein Arduino den Servo regelmäßig an- und abkoppeln muss und das Zurücksetzen auf die Mitte den Zweck meines Projekts zunichte macht.
Ich habe gelesen, dass der Aufruf von servo.write(xxxx)
direkt vor servo.attach(pin)
dazu führen würde, dass er auf xxxx anstatt 1500 zurückgesetzt wird, aber das scheint bei mir nicht zu funktionieren (und ich verstehe auch nicht einmal, wie das funktionieren würde, wenn der Pin nicht angeschlossen ist ...). Irgendwelche Ideen?
*
Bearbeiten: Meine Lösung
Dank djUniversals Antwort habe ich es geschafft, dass sich der Servo bei der Anbindung nicht bewegt. Falls jemand anders dasselbe tun möchte, habe ich einfach die ersten 3 Zeilen der initISR
Methode in ServoTimer2.cpp
auskommentiert. Es sieht jetzt so aus:
static void initISR()
{
// for(uint8_t i=1; i <= NBR_CHANNELS; i++) { // Kanäle beginnen bei 1
// writeChan(i, DEFAULT_PULSE_WIDTH); // speichere Standardwerte
// }
servos[FRAME_SYNC_INDEX].counter = FRAME_SYNC_DELAY; // speichere die Frame-Synchronisationsperiode
Kanal = 0; // lösche den Kanalindex
ISRCount = 0; // lösche den Wert des ISR-Zählers
/* Einrichtung für Timer 2 */
TIMSK2 = 0; // Unterbrechungen deaktivieren
TCCR2A = 0; // normaler Zählmodus
TCCR2B = _BV(CS21); // Vorteiler von 8 setzen
TCNT2 = 0; // Timer2-Zähler löschen
TIFR2 = _BV(TOV2); // ausstehende Unterbrechungen löschen
TIMSK2 = _BV(TOIE2) ; // den Überlaufunterbrechung aktivieren
isStarted = true; // Flag, um anzuzeigen, dass dieser Initialisierungscode ausgeführt wurde
}
Sobald ich das gemacht habe und neu kompiliert habe, hat sich der Servo sofort nicht mehr bewegt, als er angebunden wurde, und bewegt sich jetzt nur noch, wenn er angesteuert wird.