Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

arduino temporizzatore

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

0
voti

[1] arduino temporizzatore

Messaggioda Foto Utentecosmiko82 » 12 dic 2014, 0:31

salve a tutti

volevo un vostro aiuto:
ho progettato un piccolo arduino con un ricevitore ad IR di cui poter comandare delle luci tramite il telecomando della tv.
fin qui tutto oh.
vorrei comandare anche la tenda motorizzata: sale e scende.
con un comando tramite il tasto del T.C. si eccita un relè e parte la tenda, ma devo peterla temporizzare fino alla chiusura.
ho gia provato con dylay, ma nel tempo che la tenda scende o sale non posso fare altro e neppure bloccarla alla posizione desiderata.
qualcuno mi ha detto di millis. ma io non ho capito dove infilarli nel programma.
ne sarei molto grado del vostro aiuto.
dimenticavo :non sono un programmatore e non me la cavo per niente bene. il mio primo progettino.

questo e il progetto.
grazie attendo risposte.

Codice: Seleziona tutto
#include <IRremote.h>

int RECV_PIN = 12;



int tendasuPin = 2;                 
int tendagiuPin = 3;               
int luceAPin = 4;               
int luceBPin = 5;
int luceCPin = 6;               
int luceDPin = 7;
int luceEPin = 8;
int luceFPin = 9;               
int luceGPin = 10;
int luceHPin = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn();
 


 
  pinMode(tendasuPin, OUTPUT);
  pinMode(tendagiuPin, OUTPUT);     
  pinMode(luceAPin, OUTPUT);     
  pinMode(luceBPin, OUTPUT);
  pinMode(luceCPin, OUTPUT);     
  pinMode(luceDPin, OUTPUT);
  pinMode(luceEPin, OUTPUT);
  pinMode(luceFPin, OUTPUT);     
  pinMode(luceGPin, OUTPUT);
  pinMode(luceHPin, OUTPUT);
 
}

void loop() {

  if (irrecv.decode(&results)) {
   
    long int decCode = results.value;
    Serial.println(decCode);
    switch (results.value) {
     
     
      case -1524634562:
        Serial.println("tendasu");
        digitalWrite(tendasuPin, HIGH);
        digitalWrite(tendagiuPin, LOW);
      break;
       
       
       
      case -932981048:
        Serial.println("tendagiu");
        digitalWrite(tendagiuPin, HIGH);
         digitalWrite(tendasuPin, LOW);
        break;
       
       
      case 1976685926:
        Serial.println("luceA");
        digitalWrite(luceAPin, HIGH);
        delay(400);             
        digitalWrite(luceAPin, LOW);   
        break;
       
       
      case -451201714:
        Serial.println("luceB");
        digitalWrite(luceBPin, HIGH);
      delay(400);             
        digitalWrite(luceBPin, LOW);   
        break;
       
       
       
        case -520862424:
        Serial.println("luceC");
        digitalWrite(luceCPin, HIGH);
      delay(400);             
        digitalWrite(luceCPin, LOW);   
        break;
       
       
       
        case 1784778242:
        Serial.println("luceD");
        digitalWrite(luceDPin, HIGH);
      delay(400);             
        digitalWrite(luceDPin, LOW);   
        break;
       
       
       
        case -622165012:
        Serial.println("luceE");
        digitalWrite(luceEPin, HIGH);
          delay(400);
      digitalWrite(luceEPin, LOW);   
        break;
       
        case 732942060:
        Serial.println("luceF");
        digitalWrite(luceFPin, HIGH);   
        break;
       
        case -1256125018:
        Serial.println("luceG");
        digitalWrite(luceGPin, HIGH);   
        break;
       
       
       
         
      case 298013739:
        Serial.println("luceH");
        digitalWrite(luceHPin, HIGH);
       
        break;
     
       
      case -314190012:
        Serial.println("Stop");
        digitalWrite(tendasuPin, LOW);   
        digitalWrite(tendagiuPin, LOW);   
        digitalWrite(luceAPin, LOW); 
        digitalWrite(luceBPin, LOW);
        digitalWrite(luceCPin, LOW);
        digitalWrite(luceDPin, LOW);
        digitalWrite(luceEPin, LOW);
        digitalWrite(luceFPin, LOW);
        digitalWrite(luceGPin, LOW);
        digitalWrite(luceHPin, LOW);
        break; 
      default:
        Serial.println("Waiting ...");
    }

    irrecv.resume(); // Receive the next value
  }
}
Avatar utente
Foto Utentecosmiko82
3 2
 
Messaggi: 21
Iscritto il: 25 giu 2011, 17:48

0
voti

[2] Re: arduino temporizzatore

Messaggioda Foto Utentesimo85 » 12 dic 2014, 0:59

cosmiko82 ha scritto:ho gia provato con dylay, ma nel tempo che la tenda scende o sale non posso fare altro e neppure bloccarla alla posizione desiderata.


Purtroppo non è qualcosa che si risolve con le temporizzazioni (e soprattutto con le funzioni delay..).

Fai cosi: finché tieni premuto il tasto invii il segnale, e finché il ricevitore riceve, muovi il motorino della tenda.
Poi il resto dipende dalla velocità con cui fai girare il motore della tenda, ed anche da come funziona il circuito di comando.

PS: i codici si racchiudono tra i tag 'code'.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59


Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 45 ospiti