PWM e servo.attach()

Ciao ragazzi, ho un problema con il mio prototipo. In pratica si tratta di un display lcd, quattro pulsanti, un led e un servo. Prima ho realizzato la parte lcd+pulsanti+led e ho deciso di regolare il contrasto con il pwm e un condensatore da 10uF. Tutto funziona a meraviglia e posso gestirmelo via software. Premetto che tutti i pin sono occupati tranne il 9, che ho conservato per il servo. Appena chiamo la funzione servo.attach(9) (o anche un altro pin), è come se il contrasto PWM fosse settato a 0, o meglio, per valori da 0 a 254 è come se fosse GND, a 255 come se fosse 5V (perdendo quindi la possibilità di regolarlo). La cosa è ancora più strana perché è impossibile che dipenda dal circuito, dato che questo accade anche senza che il motore sia attaccato al pin, per cui è come se i due pin (quello del contrasto e quello del servo) interferiscano in qualche modo. Potete aiutarmi?

GWolf: La cosa è ancora più strana perché è impossibile che dipenda dal circuito, dato che questo accade anche senza che il motore sia attaccato al pin, per cui è come se i due pin (quello del contrasto e quello del servo) interferiscano in qualche modo. Potete aiutarmi?

Sicuramente stai usando per il PWM del display il pin 10, usando la servo il timer 2 viene riprogrammato per generare il PPM, per questo motivo perdi i due canali PWM legati a questo timer che sono il pin 9 e 10, non importa su quale pin attivi il servo. Per risolvere devi utilizzare per il PWM del display uno degli altri pin che permettono di avere questo segnale.

il fatto è che nel prototipo mi servono tre linee PWM e non posso spostare quindi il contrasto (sul 10), sull'11, perché l'11 mi serve per la retroilluminazione...posso modificare la libreria ad esempio?

Ho avuto anche io un problema simile, puoi risolvere cambiando la libreria Servo.h con la SoftwareServo che non tocca i pin pwm. http://www.arduino.cc/playground/ComponentLib/Servo Ciao

Ottimo grazie! Ho un piccolo problema, ho copiato la libreria in

/Users/*/Desktop/Arduino.app/Contents/Resources/Java/libraries/

ma poi in compilazione mi da errore

SoftwareServo.h:4:22: error: WProgram.h: No such file or directory

Risolto, basta sostituire gli include con

if defined(ARDUINO) && ARDUINO >= 100

include "Arduino.h"

else

include "WProgram.h"

ecc.

endif

per via della nuova versione dell'ide. Grazie a tutti!

Rieccomi qui. Allora, la libreria viene compilata e tutto sembra andare bene, ma questo codice

void loop(){ servo.write(0); SoftwareServo::refresh(); delay(1000); servo.write(180); SoftwareServo::refresh(); delay(1000); }

che dovrebbe portamina 0 a 180, in pratica mi fa muovere di pochi gradi avanti e indietro il motore (e non mi fa una rotazione di 180 completa). Il servo è impostato così

servo.attach(9); servo.setMaximumPulse(2200);

c'è qualche errore nel codice?

Info forse importante che ho tralasciato, la board è Arduino Duemilanove