Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« on: October 15, 2012, 10:30:31 am » |
Ciao a tutti, non sapevo se postare qui o in Software, ho deciso di postare qui!  Avete presente i vecchi telefoni a rotella?? Ecco, ho uno di quei telefoni, ho provato a vedere come funziona la rotella ma non l'ho capito... Io con arduino dovrei capire se girando la rotella sono sullo 0, sull'1, sul 2 e così via... Ho notato che se faccio per esempio lo 0, quando torna indietro, c'è un contatto che si apre e si chiude molto velocemente. Allora ho provato a collegarlo ad arduino come pulsante e ho messo un display dove volevo visualizzare il numero di volte che si chiudeva il contatto... Il codice era sbagliato, mi diceva solo 0 o 1 comunque non riusciva a leggere. Leggeva solo se col dito rallentavo la rotella... Come si può fare per fare quello che voglio fare!?  Grazie!!! P.S. se non mi sono spiegato ditelo!!! 
|
|
|
|
« Last Edit: October 15, 2012, 12:35:57 pm by maggio93 »
|
Logged
|
|
|
|
|
Italy
Offline
Newbie
Karma: 0
Posts: 9
|
 |
« Reply #1 on: October 15, 2012, 11:02:36 am » |
Ciao, il telefono è del vecchio tipo ad impulsi, cioè il dispositivo invia al centralino un numero diverso di impulsi per ogni numero, per esempio inviare l'uno il telefono invia un impulso al centralino, due per il due e così via (attenzione: lo zero invia dieci impulsi). Mi sembra strano che Arduino sia lento a leggere (potresti rallentare la rotella), il codice andrebbe scritto in modo che conti gli impulsi (incremento di una variabile contatore ogni livello digitale alto) e dovresti trovare il modo di comunicare ad Arduino l'arrivo della rotella a fine corsa, in modo che invii il numero e azzeri il contatore.
Spero di esserti stato d'aiuto. Ciao.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #3 on: October 15, 2012, 12:35:40 pm » |
Come al solito...non ci ho capito nulla!!! '-.- Io dalla rotella ho 4 fili... Bianco, Giallo, Verde e Marrone... Il telefono è tedesco, molto molto simile a quello su wikipedia nel link di Uwe... Come faccio a contare gli impulsi?
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3031
|
 |
« Reply #4 on: October 15, 2012, 05:07:07 pm » |
Tiro ad indovinare... Bianco e Verde. 
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #6 on: October 16, 2012, 05:30:18 am » |
Devo studiarmi meglio la rotella... Secondo me quella che ho io non fa 9 chiusure del contatto se compongo il 9... è strano... devo vedere!! Intanto grazie per le risposte!! ...Molto utile il link di Freddy65!!
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #7 on: October 16, 2012, 07:40:32 am » |
Allora, facendo delle prove è venuto fuori che: il contatto si chiude due volte in più al numero selezionato.. quindi, se faccio l'uno il contatto si chiude tre volte, se faccio il due si chiude cinque volte e così via... ho provato questo codice // Contatore
int pulsante =2; int pulsante2 =4; int val = 0; int val0 =0; int contatore = 0; int old_contatore = 0;
void setup() { pinMode(pulsante, INPUT); pinMode(pulsante2, INPUT); Serial.begin(9600); }
void loop(){ if(digitalRead(pulsante)){ contatore +=1; }
if(digitalRead(pulsante2)){ contatore -=1; }
if ( contatore == 0 ) { Serial.println("pippo"); }
if(contatore > old_contatore){ if ( contatore == 1) { Serial.println("2"); } if ( contatore == 2) { Serial.println ("3"); } if ( contatore == 3) { Serial.println ("4"); } if ( contatore == 4) { Serial.println ("5"); } if ( contatore >=5) { val0= contatore + 1; Serial.println(val0); } }
if(contatore < old_contatore) { val = abs(contatore); Serial.println(val); }
old_contatore = contatore; // <<==== !
delay (200); // debounce } Anche se credo che abbia qualcosa che a me non serve... preso da qui... Aprendo il monitor e facendo girare la rotella non conta... Solo se rallento la rotella col dito riesce a contare... Quindi credo che non riesca a contare per problemi di velocità... Cosa consigliate?!
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3031
|
 |
« Reply #8 on: October 16, 2012, 08:42:07 am » |
Diminuisci il delay a 25. 200 è troppo e si "mangia" gli impulsi.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #9 on: October 16, 2012, 09:08:06 am » |
Come posso fare per contare quanti secondi sta chiuso un contatto? Forse e ripeto, FORSE, ho trovato un'altra soluzione... EDIT: Dimenticavo... Modificando il delay non cambia niente... cioè, comincia a contare da quando apro il monitor e non finisce più...
|
|
|
|
« Last Edit: October 16, 2012, 09:12:04 am by maggio93 »
|
Logged
|
|
|
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #11 on: October 16, 2012, 09:33:55 am » |
Grazie ma non funziona!! Quel codice dovrebbe contare per quanto tempo un pulsante viene premuto? Io in pratica ho due contatti in scambio... sul contatto aperto ho collegato i due fili da arduino e facendo girare la rotella quel contatto si chiude e a seconda del numero resta chiuso più o meno secondi...
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3031
|
 |
« Reply #12 on: October 16, 2012, 10:29:36 am » |
Strano.  Collega un led con la sua resistenza al pin 9 (vedendo il tuo sito credo che a casa ne abbia un bel pò  ), mentre il pulsante al pin 3 con resistenza + una resistenza di pull-down. (Fig. 3 --> http://www.mcmajan.com/mcmajanwpr/?p=769) Ricopio qui il codice per chiarezza // this constant won't change: const int buttonPin = 3; // the pin that the pushbutton is attached to const int ledPin = 9; // the pin that the LED is attached to
// Variables will change: int buttonPushCounter = 0; // counter for the number of button presses int buttonState = 0; // current state of the button int lastButtonState = 0; // previous state of the button unsigned long t1, t2 = 0; int durata = 0; int intervallo=0;
void setup() { // initialize the button pin as a input: pinMode(buttonPin, INPUT); // initialize the LED as an output: pinMode(ledPin, OUTPUT); // initialize serial communication: Serial.begin(9600); }
void loop() { // read the pushbutton input pin: buttonState = digitalRead(buttonPin);
// compare the buttonState to its previous state if (buttonState != lastButtonState) { // if the state has changed, increment the counter if (buttonState == HIGH) { t2=millis(); durata=t2 - t1; Serial.print(durata); } else { t1 = millis(); intervallo= t1 - t2; Serial.print(" : "); Serial.println(intervallo); digitalWrite(ledPin, HIGH); delay(10); digitalWrite(ledPin, LOW); } } // save the current state as the last state, //for next time through the loop lastButtonState = buttonState; } Apri il serial monitor e aziona il pulsante. Una volta testato il tipo di funzionamento del programma, prova a sostituire il pulsante con il disco combinatore. EDIT: Non vorrei ti avesse fuorviato il mio commento Tiro ad indovinare... Bianco e Verde.  Stavo veramente cercando di indovinare. Prova le varie combinazioni di colori.
|
|
|
|
« Last Edit: October 16, 2012, 10:34:00 am by PaoloP »
|
Logged
|
|
|
|
|
Napoli
Offline
Full Member
Karma: 2
Posts: 182
Arduino rocks
|
 |
« Reply #13 on: October 16, 2012, 10:50:25 am » |
Ciao, ma non è meglio attivare l'interrupt sul pin collegato al combinatore e fare in modo che incrementi una variabile ogni volta che cambia stato ?
Ciao.
|
|
|
|
|
Logged
|
Arduino 2009
|
|
|
|
Offline
Sr. Member
Karma: 0
Posts: 292
L'uomo non smette di giocare perché invecchia, ma invecchia perché smette di giocare. (George Bernard Shaw)
|
 |
« Reply #14 on: October 17, 2012, 01:15:33 pm » |
Apri il serial monitor e aziona il pulsante. Una volta testato il tipo di funzionamento del programma, prova a sostituire il pulsante con il disco combinatore.
Fatto, funziona...  grazie!! Ora mi devo mettere lì e devo vedere cosa fare... ovviamente poi bisogna vedere uno quanto tempo ci mette a girare la rotella!! '-.- voglio assegnare ad ogni numero una funzione... quindi per esempio se l'1 ci mette mezzo secondo (in realtà ci mette mooolto meno) io conoscendo il tempo posso assegnare a quel tempo una funzione, giusto? Non vorrei ti avesse fuorviato il mio commento Tiro ad indovinare... Bianco e Verde.  Stavo veramente cercando di indovinare. Prova le varie combinazioni di colori. No no, tranquillo!!  guardando le lamelle dei contatti si vede quali sono i colori da scegliere, sotto ci sono i fili saldati!!  Collega un led con la sua resistenza al pin 9 (vedendo il tuo sito credo che a casa ne abbia un bel pò  ) hahahaha visto? Si, ne ho davvero un bel po'!!! 
|
|
|
|
|
Logged
|
|
|
|
|
|