Tesina d'esame - Controllo mediante la vibrazione di un telefono-Arduino Uno

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);
 }
 }
 }

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0

  1. non siamo ciechi, il titolo in maiuscolo è inutile. Inoltre il maiuscolo in qualsiasi forum equivale ad URLARE
  2. 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

sono nuovo ho letto la guida ma non avevo capito che mettere in maiuscolo l'oggetto equivalesse a urlare e mi scuso è che ho bisogno urgente..

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 ?

se potreste almeno farmi lo scketch che ho bisogno ....

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. :zipper_mouth_face:

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è)

Hai 2 strade,

  1. 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

  2. quando val > 1 allora leggi con digitalRead(LED) e se il suo valore è HIGH, usi la digitalWrite con LOW altrimenti HIGH

non puoi rifarmelo lo sketch perfavore =(

pingu994:
se potreste almeno farmi lo scketch che ho bisogno ....

pingu994:
non puoi rifarmelo lo sketch perfavore =(

https://www.youtube.com/watch?v=pFSJr4bLVtY

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 :slight_smile: 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. :roll_eyes:
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. :stuck_out_tongue:
Se hai fretta, forse era il caso di pensare all'esame qualche mese fa. :wink:

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)

Comunque io lo sketch l'ho fatto ma penso sia un problema di stabilizzazione del segnale mi sapete dire qualcosa a riguardo?

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?