Salve a tutti
sto cercando di creare un ping pong con un servo e 2 tastini.
ho realizzato questo codice http://codepad.org/Pmi01lp4
ma purtroppo, quando dico al servo di andare a destra lui va fino e infondo a destra e poi si attiva l'altro if. Come posso risolvere questo problema? vorrei che il servo sia reattivo ai pulsanti, nel senso che se cambio idea e lui sta già andando da destra verso sinistra e io voglio fargli fare il contrario, lui lo deve fare.
Ciao.
Il write accetta un angolo che va da 0 a 180, tu gli imposti 150 e 1900.
Secondo me all'inizio il servo lo devi impostare a metà strada (90) nel setup.
Ti memorizzi l'angolo in una variabile che passi al servo tramite il write, dopo averla incrementata o diminuita a seconda del bottone premuto.
Poi va aggiunto un controllo che impedisca alla variabile di uscire dal range 0 - 180.
Quello sketch verifica lo stato dei due pulsanti che chiudono verso i +5V con un resistore (ad esempio 10k) verso massa.
Se invece vuoi evitare il resistore usando quello interno di Arduino collega i due pulsanti verso massa e devi modificare un po' lo sketch:
#include <Servo.h>
const int buttonPin = 2;Â
const int buttonPin1 = 3;
Servo myServo;Â
int buttonState = 0;Â Â
int buttonState1 = 0;
void setup() {
 myServo.attach(9);
 pinMode(buttonPin, INPUT_PULLUP);  // pulsante collegato verso massa
 pinMode(buttonPin1, INPUT_PULLUP); Â
}
void loop() {
  buttonState = digitalRead(buttonPin);
  buttonState1 = digitalRead(buttonPin1);
  if (buttonState == LOW) {  // pulsante premuto
   myServo.write(150);
   }
  if(buttonState1 == LOW) { Â
   myServo.write(1900);
  }
}
cyberhs:
Se invece vuoi evitare il resistore usando quello interno di Arduino collega i due pulsanti verso massa e devi modificare un po' lo sketch:
scusa la mia ignoranza, ma cosa cambia con o senza resistore? intanto +1 karma grazie per lo sketch
Il resistore, come avrai imparato dai LED, serve a limitare la corrente che scorre in un circuito, ma ha anche altre funzioni,
Una di queste è quella di fornire un riferimento di tensione verso i +5V (resistore di pull-up) oppure verso ground (resistore di pull-down).
Ad esempio, un pin predisposto come ingresso digitale ovvero pinMode(pin, INPUT) non ha un riferimento di tensione certo: vale a dire che la sua lettura con digitalRead(pin) ti può fornire in momenti diversi sia LOW che HIGH.
Ecco che collegare un pulsante ad un ingresso digitale con l'altro capo verso i +5V oppure verso ground non garantisce che a riposo (non premuto) l'ingresso digitale assuma LOW (nel primo caso) oppure HIGH (nel secondo caso).
Si usano, perciò, i resistori di pull-up oppure di pull-down.
ok ho risolto inserendo una resistenza, lascio il topic aperto Screenshot by Lightshot si vedono i pulsanti.
prima invece:
Quello con 3 piedini collegati funziona correttamente, quello con 2 piedini collegati non funziona correttamente.
Per provare il funzionamento ho collegato il primo piedino ad un led, il programma semplice..se il pulsante è premuto accendi il led. Invece utilizzando il pulsante con 2 piedini collegati, pur collegandolo il led rimane sempre acceso, anzi si spegne quando lo clicki. Ho già provato a girarlo e rigirarlo... se utilzzo una resistenza dovrei risolvere il problema? e farlo funzionare correttamente come l'altro? l'altro a 3 piedini mi sembra un deviatore
Entrambi sono pulsanti finecorsa.
Quello a 3 fili deve essere un deviatore, mentre in quello a 4 terminali, secondo me, sono accoppiati a due a due ma solo un tester lo potrà confermare.
Ho domandato ad un mio amico e mi ha detto che il servo non dovrebbe prendersi una pausa tra un click e l'altro dei pulsanti. Perciò mi ha consigliato di non utilizzare gli if( il tasto destro è premuto vai a sinistra) e viceversa... mi ha detto di utilizzare interrupt e debouncing, il problema è che non so proprio come adattarli a 2 tasti e 1 servo.
lo sketch è questo http://codepad.org/KaDDC2kR
ho collegato assieme tutti i motori, tramite alimentazione esterna, poi li ho provati singolarmente con questo sketch C code - 32 lines - codepad sarebbe un potenziometro e 1 servo(funzionano tutti). Invece quando vado a collegare tutto su un solo sketch iniziano i casini, il servo C inizia a fare quello che vuole(con il primo sketch). Cosa potrebbe essere?