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