Pages: [1]   Go Down
Author Topic: Dubbi programmazione Arduino uno.  (Read 564 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,sono nuovo del forum,sono 4 giorni che navigo nella rete senza risultati.
Volevo chiedervi se magari qualcuno conosce un comando ,per fare svolgere un azione se in un determinato lasso di tempo non riceve un input su un pin.
Mi spiego meglio.
Io dovrei comandare una pompa,però solo se :
1 ho un input su un pin ,cioè diciamo pin 3 HIGH (ok,no problem,programma fatto e testato)
2 ho un determinato valore su un pin analogico,diciamo pin A5 valore 600 (ok,no problem,programma fatto e testato)
3 se entro un lasso di tempo,diciamo 40 secondi  riceve un input su un pin analogico,diciamo A2 ,su questo pin A2 avrei intenzione di mettere o un sensore di hall o un sensore per un contagiri di quelli ottici(scusate se non so come si chiama ora) e qui,mi nasce il problema del comando......non esiste un "if within"    ?

Quindi ricapitoliamo: la pompa deve funzionare solo se le 3 situazioni si verificano,se no la pompa deve stare ferma....
Ho cercato sia in inglese che in italiano per la rete e nel forum ma senza risultati apprezzabili,avevo anche addocchiato il comando pulsein ma con risultati nulli.
Grazie a tutti.
Ogni consiglio e ben accetto.

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 336
Posts: 23146
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Devi aprire e studiarti il codice dell'esempio BlinkWithoutDelay che trovi dentro all'IDE.
Così apprendi come fare dei controlli sul tempo senza bloccare l'esecuzione del codice.

Poi ti crei una funzione che si attiva al verificarsi dei primi 2 eventi e che si mette in ascolto sull'ultimo pin per 40 secondi, per vedere se arriva il 3° segnale, e contemporaneamente legge lo stato degli altri 2 in modo da disattivare il conteggio non appena uno dei pin perde il suo stato di attivazione
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao.
Grazie della risposta.
Adesso mi studio tutto e poi vedo cosa riesco a combinare.
Grazie ancora.
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 115
Posts: 7276
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non esiste un "if within"    ?
Il comando IF può essere soggetto a più condizioni.
--> http://arduino.cc/en/Reference/Boolean
Con AND o OR puoi crearti la condizione necessaria a far eseguire il tuo codice.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 20
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti.
Premetto che sono completamente digiuno di programmazione c...
quindi non c capisco nulla.
Però dopo le dritte sulla funzione millis() data da voi utenti,me la sono studiata e alla fine ci sono riuscito!
Non vi dico i porconi che ho tirato,visto che ho solo rudimenti di programmazionme dos fatta alle medie ormai 18 anni fa.
Devo dire che pero mi è venuta molto comoda la visualizzazione sul monitor seriale,cosi ho potuto vedere effettivamente ogni comando che azioni svolgeva.
Posto il codice che ho creato(che ai piu sembrerà una porcata...ma ...funziona...)
Ho messo solo la parte a tempo per il momento,perche per il resto devo aspettare di essere un po piu sobrio(pranzo di lavoro pre ferie...)


quindi ecco il mio sketch

int alternatore=5;
int velocita=A2;
int volante=4;
int pompa=11;
unsigned long intervallo=10000;
unsigned long tempo;
unsigned long tempo_segnale;
int consenso;


void setup (){
  pinMode (alternatore,INPUT);
  pinMode (velocita,INPUT);
  pinMode (volante,INPUT);
  pinMode (pompa,OUTPUT);
  Serial.begin (9600);


}

void loop(){
  unsigned long tempo=millis();


  Serial.println (tempo_segnale);
  volante=digitalRead (4);




  if ((volante==HIGH) )  {
    tempo_segnale=tempo;
    digitalWrite (pompa,HIGH);
    consenso=1;
  }

  if (tempo-tempo_segnale>intervallo){
    digitalWrite (pompa,LOW);
    consenso=0;



  }




}
ovviamente è ancora incompleto e mancano funzioni,però quello che è l'imput a tempo(in questo caso ho messo 10 sec per fare piu in fretta),funziona.

Se qualcuno ha suggerimenti o sistemi per fare funzionare tutto al meglio dica pure,sono in ascolto.
Ancora grazie a tutti per le dritte!!!!!

Logged

Pages: [1]   Go Up
Jump to: