Go Down

Topic: timer senza rtc e rampa tensione (Read 2006 times) previous topic - next topic

vanniboy

scusami, nelle risposte mi ero perso il tuo suggermiento! :)
proverò a studiare un pò, anche se sono a digiuno da molto con arduino

PaoloP

La cosa più semplice senza impazzire di tabelle è usare la funzione map.
Code: [Select]
intensitàled = map(oraattuale, orainizio, orafine, 0, 255);
Come già detto è meglio se espimi oraattuale, orainizio e orafine in minuti o in secondi.

vanniboy

questo è una parte dello sketc :


int   ore   = rtc.getHours();  
map(ore,8,10, 0,255);

così potrebbe funzionare anche nel  calcolo nel momento in cui io imposto l'ora? 


leo72


questo è una parte dello sketc :


int   ore   = rtc.getHours();  
map(ore,8,10, 0,255);

così potrebbe funzionare anche nel  calcolo nel momento in cui io imposto l'ora? 



No. Così hai solo 3 valori:
8->0
9->128
10->255
Devi usare i secondi come ti ha detto PaoloP, più che i secondi io userei il timestamp UNIX. Trasformi l'orario in timestamp (il numero di secondi dal 1970.0 ad oggi) e poi i conti li fai in secondi, in questo modo hai molti più valori. Con la map messa come hai fatto tu ottieni solo 2 valori perché map restituisce un intero.

vinciolo

scudsare ragazzi ma in incremeneto decremento tipo questo nooo?

Quote

 int LED_White1=2;//pin 2 per il pwm
 int valoreLed_W1=0;//variabile usata per l'incremento
 int VLW1=255;//valore del pwm impostato
 int delaytRAMPAW1=(minutiRampa1*60000)/VLW1;
 //CONTROLLO INCREMENTO FADE LED BIANCHI 1
 if(hour>=oreOnBianchi1 && minute>=minutiOnBianchi1 && hour<oreOffBianchi1 && valoreLed_W1<VLW1)
 {
   statoINC_W1 = 1;//fa parire l'incremento
 }else
 {
   statoINC_W1 = 0;// stop al raggiungimento max luminositá LED
 }
 //ciclo di incremento del led bianchi 1
  if (statoINC_W1 == 1)
  {currentMillis_W1 = millis();
  if(currentMillis_W1 - previousMillis_W1 > delaytRAMPAW1)
  { 
  previousMillis_W1 = currentMillis_W1;
  valoreLed_W1++;
  analogWrite(LED_White1,valoreLed_W1);
  Serial.print("valoreLed_W1: ");
  Serial.println(valoreLed_W1);
  }
  }


PaoloP

La differenza tra il mio metodo e il tuo è che il mio restituisce il valore assoluto della luminosità dei led in base all'orario seguendo un'andamento lineare tra l'ora di inizio e di fine. Nel tuo effettui in incremento relativo in base ad un intervallo precalcolato.
Vanno bene tutti e due. Dipende dall'implementazione che si vuol fare.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy