Ciao a tutti volevo chiedervi un informazione riguardo uno sketch che sto facendo per la mia tesina d'esame di quinta superiore. Mi piace arduino e il linguaggio C è affascinante e mi piacerebbe molto imparare, ma ora sono ai primi passi e ho bisogno di un vostro aiuto.
Come tesi pratica d'esame porto un controllo che va mediante la vibrazione di un normale telefono cellulare, praticamente quando io mando un messaggio al telefono questo vibra, ma io avendogli tolto il motorino ho una tensione di 1,3v che mi esce dai capi del telefono. Dopo aver collegato questi due capi al Pin analogico (A0) e GND di arduino, devo ogni volta che faccio vibrare il telefono, accendere e spegnere un relè (rappresentato dal led). io una prima parte dello sketch l'ho fatta ( quella d'accensione del LED ) ma non riesco a fare andare quella di spegnimento.
Ditemi se sbaglio qualcosa e dove ho sbagliato che come novellino devo imparare.
Vi mando lo scketch :
#define LED 13 // LED collegato al pin digitale 13
#define capi A0 // pin di input dove è collegato il pulsante
float val = 1; // si userà val per conservare lo stato del pin di input
int stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
void setup() {
pinMode(LED, OUTPUT); // imposta il pin digitale come output
pinMode(capi,INPUT); // imposta il pin digitale come input
}
void loop() {
val = analogRead (capi); // legge il valore dell'input e lo conserva
val = val * 5 / 1023; {
// controlla che l'input sia HIGH (pulsante premuto)
// e cambia lo stato del led
if (val > 1) {
digitalWrite(LED, HIGH); // accende il led
digitalRead (LED);
}
}
}
non siamo ciechi, il titolo in maiuscolo è inutile. Inoltre il maiuscolo in qualsiasi forum equivale ad URLARE
il codice deve essere racchiuso negli appositi tag code, vedi sezione 7 del regolamento, spiega bene come fare, altrimenti parti del codice non sono visibili
void loop() {
val = analogRead (capi); // legge il valore dell'input e lo conserva
val = val * 5 / 1023;
// controlla che l'input sia HIGH (pulsante premuto) e cambia lo stato del led
if (val > 1) {
digitalWrite(LED, HIGH); // accende il led
delay(1000); //attende 1 secondo
digitalWrite(LED, LOW); // spegne il led
}
}
Ti ho tolto un pò di graffe inutili e poi la digitalRead(LED) messa li non serve a nulla.
Io ti ho messo lo spegnimento dopo 1 secondo.
Però non ho capito, quando il cellulare vibra devi accendere il led ma quando lo devi spegnere? Dopo un pò di tempo (come ho fatto io) oppure quando farai di nuovo vibrare il cellulare ?
Lo sketch per quel che ho capito io te l'ho fatto (modificando il tuo).
Poi ho un dubbio (non ho capito quel che devi fare) ed alla mia domanda mi rispondi con una domanda ? Boh.
allora faccio vibrare il telefono lui manda un impulso da 1,3v per un secondo
arduino deve memorizzare questo impulso come alto e tenere acceso il led(messo al posto del relè)
poi rifaccio vibrare il telefono lui manda un impulso da 1,3v per un secondo
arduino deve memorizzare questo impulso come alto e spegnere il led (messo al posto del relè)
crea/aggiungi al tuo sketch una variabile che si chiama statoled e quando val>1 allora statoled= 1- statoled; (inverte lo stato se 0->1 se 1->0)
la digitalWrite(LED,statoled) imposterà il led di conseguenza
quando val > 1 allora leggi con digitalRead(LED) e se il suo valore è HIGH, usi la digitalWrite con LOW altrimenti HIGH
void loop()
{ val = analogRead (capi); // legge il valore dell'input e lo conserva
val = val * 5 / 1023;
// controlla che l'input sia HIGH (pulsante premuto) e cambia lo stato del led
if (val > 1)
{ int curr=digitalRead(LED); // leggo se il led è acceso o spento
if(curr==LOW) // se è spento
{ digitalWrite(LED, HIGH); // accende il led
}
else // altrimenti
{ digitalWrite(LED, LOW); // spegne il led
}
}
}
Capirai bene che NON lo posso provare, non avendo il tuo hardware. A me viene il dubbio che quando vibra il telefono in quel if(val>) ci passi numerose volte (tutto quello che è nella loop è ripetuto all'infinito e velocemente)
La vibrazione proviene dai capi del motorino del telefono , che ho tolto... la vibrazione è formata da un solo impulso non da tanti intervalli fa solamente un impulso
Hai smontato un cellulare e usato un microcomputer per fare questo?
Bastava un transisror, due resistenze e un condensatore (temporizzatore RC)
Con tutto quello che puoi fare con un micro proprio questo porti all'esame?
Se usavi uno shield con la stessa sim del telefono facevi quello che volevi leggendo gli sms, oppure sfruttavi il campo elettromagnetico emesso dal telefono quando riceve una chiamata (hai presente quei bamboccini che si illuminano quando il cell squilla?) bastava solo metterlo in modalità aereo senza smontare nulla se volevi solo il vibro
@pingu994:
potevi almeno correggerlo, il post iniziale, dopo che ti era stato segnalato di farlo. Togliere il maiuscolo dal titolo ed includere il codice negli appositi tag.
Inoltre vorrei precisare che questo non è un sito di rent-a-coder ("ossia noleggia un programmatore"), qui le persone al max ti correggono il programma che fai tu, non puoi richiedere che qualcuno scriva il codice al posto tuo.
Se hai fretta, forse era il caso di pensare all'esame qualche mese fa.
Hai ragione e l'ho fatto solo che non pensavo fosse così difficile e poi di persone che conoscono veramente arduino non ce ne sono ( intendo a scuola da me)
Inizialmente hai presentato uno sketch che non gestisce la disattivazione del segnale, nid69 ti ha fatto vedere un esempio di possibile soluzione. Hai provato ad implementarla? Risultati?