salve, comando un servo inviando la posizione in numero tramite il serial monitor di arduino uno e il servo raggiunge la posizione, solo che dopo averla raggiunta ritorna automaticamente in quella iniziale come posso fargli mantenere l’ultima posizione comunicata finchè non ne comunico una nuova?
questo e il codice che ho utilizzato: #include <Servo.h>
Due cose che mi vengono in mente, che potresti provare (ma non so se risolvono questo "problema")
Nel setup() mettici una inizializzazione della posizione del servo :
servo2.write(0);
prova a cambiare il pin a cui hai attaccato il servo, ad esempio mettilo al pin 8-9 (mi pare debbano essere pwm)
Inoltre prova a non usare la Seriale come input ma definisci delle variabili e vedi se il servo si ferma. Potrebbe essere un problema di valori letti dalla seriale, infatti se non erro la funzione Serial.Read() ti restituisce un byte, mentre tu dovresti mettere all'interno del Servo.Write() un intero (di questo non ne sono sicuro pero' . dai un;occhiata in giro)
la seriale è in ASCII, e Serial.read() restituisce un char. Esempio:
se scrivi "90" Arduino riceverà i cararatteri "9" e "0" e non il numero 90.
Le strade sono 2:
1) mandi un singolo carattere guardando sulla tabella ascii quanto vale in decimale (ma i primi 32 te li giochi perchè sono speciali)
2) usi una delle varie funzioni che fanno la conversione da stringa di caratteri ad intero, tipo atoi().
2-bis) se vai in panico perchè non sai ancora usare una stringa o un array di caratteri allora adotta la semplice tecnica di togliere 48 al carattere ricevuto, esempio sempre per 90:
[quote author=Federico Vanzati link=topic=82065.msg618182#msg618182 date=1323345199]
la seriale è in ASCII, e Serial.read() restituisce un char. Esempio:
se scrivi "90" Arduino riceverà i cararatteri "9" e "0" e non il numero 90.
Le strade sono 2:
1) mandi un singolo carattere guardando sulla tabella ascii quanto vale in decimale (ma i primi 32 te li giochi perchè sono speciali)
2) usi una delle varie funzioni che fanno la conversione da stringa di caratteri ad intero, tipo atoi().
2-bis) se vai in panico perchè non sai ancora usare una stringa o un array di caratteri allora adotta la semplice tecnica di togliere 48 al carattere ricevuto, esempio sempre per 90:
numero = (char1 - 48) * 10 + (char2 - 48);
sopra 99 ti servirà un'altra cifra.
[/quote]
o provato ed ai ragione con i vostri suggerimento adesso mi raggiunge una posizione dai1 ai 9° se gli invio 145 mi fa 1 poi 4 e 5 e la conserva... non gli si puo far leggere 3 numeri dalla seriale? magari inviando 001 030 180 aspetta 3 cifre e compone il numero?
[quote author=Federico Vanzati link=topic=82065.msg618341#msg618341 date=1323359266]
PS: anche per f.schiano. i servo da modellismo non funzionano in pwm quindi puoi collegarli a qualisiasi pin.
[/quote]
Ah ok Grazie... Infatti avevo detto che non ne ero sicuro :) !