Pages: 1 2 3 [4]   Go Down
Author Topic: Non riesco a venirne a capo  (Read 3043 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'ho fatto ma come dicevo prima, non so perchè, ad esempio facendo ore*3600 + min*60+sec se sono le 22:00:00 dovrebbe venire 79200 invece stampando time su seriale mi da un valore vicino a 15000, ma l'orario segnato sull'lcd è giusto
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è possibile che arduino abbia 'problemi' a fare le operazioni?
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
è possibile che arduino abbia 'problemi' a fare le operazioni?
Non è quello il problema,se fai un calcolo ed il risultato ci sta nella capacità della variabile è tutto ok.
Io proverei a stampare sul serial monitor l'ora che ricevi dal ds1307....Non conosco quella libreria e non so che formato di dati ti fornisce.
Usi hour() ,minute() ,second() ma che numero ti stampa in serial monitor?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hour min e sec esatti, quindi se sono le 22:00:00 da 22 se 22:30:45 da 22 30 e 45 quindi i valori sono esatti, ma provando a fare una moltipilcazione, avendo un long quindi il valore ci entra, se fai ad esempio per 4 ti da (nel caso delle 22) 88 ma se moltiplichi per 5 ad es. ti da 150 invece di 110
Logged

Torino
Offline Offline
God Member
*****
Karma: 3
Posts: 766
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E' strana questa cosa ,se mi viene in mente qualche cosa ti dico.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

potrebbe davvero essere che Arduino abbia qualche problema?
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scrivi subito alla atmel o a Banzi, ti saranno eternamente grati per aver scoperto un clamoroso baco nell'atmega328! smiley-grin

Sul serio...

Ho programmato per alcuni anni su PIC prima di conoscere Arduino, e mi è capitato diverse volte di sbattere la testa contro il muro fino al punto di pensare che c'era un baco nella cpu... In base alla mia esperienza, quello è il segnale che bisogna gettare (momentaneamente) il codice alle ortiche, attendere un paio di giorni e ricominciare da capo.

So già che ignorerai anche questo mio ennesimo consiglio non richiesto, comunque lo butto lì lo stesso, tanto è gratis smiley-wink

In definitva ognuno impara dai propri bernoccoli. Buonanotte :-)
Logged

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

Scusami ma lo sai che questo è COMPLETAMENTE errato?
Code:
time = time*5,99999;

In informatica il separatore decimale è il punto, non la virgola!
Il tuo codice dovrebbe essere:
Code:
time = time * 5.99999;

Usando la virgola tu stai usando un costrutto del C che dice al compilatore di usare sempre l'argomento di destra, quindi 99999
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cavolo Leo, c'avevo pensato, ma comunque (forse stranamente)  con scritto 5,9 e non 5.9 (anche se con il punto non c'ho provato) funziona, mettendo 6 che dovrebbe comunque andare bene, invece sballa mentre dovrebbe andare bene comunque sia perché senza errore di , o . sia perché variabile long
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non so, il tutto mi pare molto strano... ho modificato e riscritto il codice, così le cifre sembrano ritornare, eccolo qui:
Quote
#include <LiquidCrystal.h>
#include <Time.h> 
#include <Wire.h> 
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t
LiquidCrystal LCD(12,11,5,4,3,2);



void setup()  {
 
 LCD.begin (16,2);
 Serial.begin(9600);
  setSyncProvider(RTC.get);   // comando per ricevere l'ora dall'RTC
   
}

void loop()
{

  LCD.setCursor(0,0);
   digitalClockDisplay(); 
   delay(1000);
   DS1307RTC();
}

void digitalClockDisplay(){
 
  // digital clock display of the time
 
  LCD.print(hour());
  printDigits(minute());
  LCD.setCursor(5,0);
  printDigits(second());
  LCD.print(" ");
  }

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0

 
  LCD.print(":");
  if(digits < 10)
    LCD.print('0');
  LCD.print(digits);
}
void DS1307RTC(){
 
 
   int ledw1=9;//pin linea led bianchi e rb posteriore
   int ledw2=10;//pin linea led bianchi e rb anteriore
   int leduv=6;//pin linea led rossi, verdi, uv
   int dim;
   int ora;
   int oras;
   int moonlight=7;//pin led lunari
   int  time=(hour()*100 + minute());//orario hr,min,sec ridotto in secondi//cambiato da unsigned int a int
   pinMode (ledw1,OUTPUT);
   pinMode (ledw2, OUTPUT);
   pinMode (leduv, OUTPUT);
   pinMode (moonlight,OUTPUT); 
   dim=14;//aumento intensità per ogni step
   ora=1200;//12:30 ora accensione
   oras=2315;//23:15 ora spegnimento
   int x=3;//intervallo in minuti tra un fade e un altro
   LCD.clear();
/*impostazione per l'accensione deiled lunari*/
 
 
  if (time >= 2300 &&  time <= 2359){
    digitalWrite (moonlight, HIGH);
  }
  if (time >= 0 && time <=1245){
    digitalWrite (moonlight, HIGH);
  }
  else{
  digitalWrite (moonlight, LOW);}
 
 /*inizio della fase 'Alba' e aumento graduale dell'intensità dell'illuminazione*/
 
    if ( time >= ora&&time <ora+x)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*16);
  LCD.setCursor(0,1);
  LCD.print ("Alba 0%");

}

 if (time >= ora+x&&time<ora+x*2)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*14);
  LCD.setCursor(0,1);
  LCD.print ("Alba 6%");

}

if (time >= ora+x*2&&time < ora+x*3)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*16);
  analogWrite (leduv, dim*14);
  LCD.setCursor(0,1);
  LCD.print ("Alba 12%");

}

if (time >= ora+x*3&&time < ora+x*4)
  {
  analogWrite (ledw1,dim*17);
  analogWrite (ledw2,dim*15);
  analogWrite (leduv, dim*13);
  LCD.setCursor(0,1);
  LCD.print ("Alba 18%");

}

if (time >=ora+x*4&&time < ora+x*5)
  {
  analogWrite (ledw1,dim*16);
  analogWrite (ledw2,dim*14);
  analogWrite (leduv, dim*12);
  LCD.setCursor(0,1);
  LCD.print ("Alba 24%");

}

if (time >= ora+x*5&&time < ora+x*6)
  {
  analogWrite (ledw1,dim*15);
  analogWrite (ledw2,dim*13);
  analogWrite (leduv, dim*11);
  LCD.setCursor(0,1);
  LCD.print ("Alba 30%");

}
if (time >= ora+x*6&&time < ora+x*7)
  {
  analogWrite (ledw1,dim*14);
  analogWrite (ledw2,dim*12);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Alba 36%");

}

if (time >= ora+x*7&&time < ora+x*smiley-cool
  {
  analogWrite (ledw1,dim*13);
  analogWrite (ledw2,dim*11);
  analogWrite (leduv, dim*9);
  LCD.setCursor(0,1);
  LCD.print ("Alba 42%");

}

if (time >= ora+x*8&&time < ora+x*9)
  {
  analogWrite (ledw1,dim*12);
  analogWrite (ledw2,dim*10);
  analogWrite (leduv, dim*smiley-cool;
  LCD.setCursor(0,1);
  LCD.print ("Alba 48%");

}

if (time >= ora+x*9&&time < ora+x*10)
  {
  analogWrite (ledw1,dim*11);
  analogWrite (ledw2,dim*9);
  analogWrite (leduv, dim*7);
  LCD.setCursor(0,1);
  LCD.print ("Alba 54%");

}
if (time >= ora+x*10 && time < ora+x*11)
  {
  analogWrite (ledw1,dim*10);
  analogWrite (ledw2,dim*smiley-cool;
  analogWrite (leduv, dim*6);
  LCD.setCursor(0,1);
  LCD.print ("Alba 60%");

}
if (time >= ora+x*11 && time < ora+x*12)
  {
  analogWrite (ledw1,dim*9);
  analogWrite (ledw2,dim*7);
  analogWrite (leduv, dim*5);
  LCD.setCursor(0,1);
  LCD.print ("Alba 66%");

}

if (time >= ora+x*12 && time < ora+x*13)
  {
  analogWrite (ledw1,dim*smiley-cool;
  analogWrite (ledw2,dim*6);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 72%");

}
if (time >= ora+x*13 && time < ora+x*14)
  {
  analogWrite (ledw1,dim*7);
  analogWrite (ledw2,dim*5);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 78%");

}
if (time >= ora+x*14 && time < ora+x*15)
  {
  analogWrite (ledw1,dim*6);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 84%");

}

if (time >= ora+x*15 && time < ora+x*16)
  {
  analogWrite (ledw1,dim*5);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Alba 90%");

}
/*fase intermedia 'Giorno' nella quale l'illuminazione viene tenuta al massimo dell'intensità impostata e che va dalla fine dell'alba all'inizio della fase di decremento dell'illuminazione 'Tramonto' */
if (time >= ora+x*16 && time < oras+x)
  {
  analogWrite (ledw1,dim*4);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Giorno");

}
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
/*inizio della fase 'Tramonto' e diminuzione graduale dell'intensità dell'illuminazione fino al completo spegnimento*/

if (time >= oras+x&&time < oras+x*2)
  {
  analogWrite (ledw1,dim*5);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -45:00");

}

if (time >= oras+x*2&&time < oras+x*3)
  {
  analogWrite (ledw1,dim*6);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -42:30");

}

if (time >= oras+x*3&&time < oras+x*4)
  {
  analogWrite (ledw1,dim*7);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -40:00");

}

if (time >= oras+x*4&&time < oras+x*5)
  {
  analogWrite (ledw1,dim*8);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*4);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -37:30");

}

if (time >= oras+x*5&&time < oras+x*6)
  {
  analogWrite (ledw1,dim*9);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*5);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -35:00");

}

if (time >= oras+x*6&&time < oras+x*7)
  {
  analogWrite (ledw1,dim*10);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*6);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -32:30");

}

if (time >= oras+x*7&&time < oras+x*8)
  {
  analogWrite (ledw1,dim*11);
  analogWrite (ledw2,dim*4);
  analogWrite (leduv, dim*7);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -30:00");

}

if (time >= oras+x*8&&time < oras+x*9)
  {
  analogWrite (ledw1,dim*12);
  analogWrite (ledw2,dim*6);
  analogWrite (leduv, dim*8);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -27:30");

}

if (time >= oras+x*9&&time < oras+x*10)
  {
  analogWrite (ledw1,dim*13);
  analogWrite (ledw2,dim*7);
  analogWrite (leduv, dim*9);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -25:00");

}


if (time >= oras+x*10&&time < oras+x*11)
  {
  analogWrite (ledw1,dim*14);
  analogWrite (ledw2,dim*9);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -22:30");

}

if (time >= oras+x*11&&time < oras+x*12)
  {
  analogWrite (ledw1,dim*15);
  analogWrite (ledw2,dim*10);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -20:00");

}

if (time >= oras+x*12&&time < oras+x*13)
  {
  analogWrite (ledw1,dim*16);
  analogWrite (ledw2,dim*11);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -17:30");
 
}

if (time >= oras+x*13&&time < oras+x*14)
  {
  analogWrite (ledw1,dim*17);
  analogWrite (ledw2,dim*14);
  analogWrite (leduv, dim*10);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -15:00");
 
}
if (time >= oras+x*14&&time < oras+x*15)
  {
  analogWrite (ledw1,dim*17);
  analogWrite (ledw2,dim*15);
  analogWrite (leduv, dim*11);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -12:50");
 
}

if (time >= oras+x*15&&time < oras+x*16)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*16);
  analogWrite (leduv, dim*11);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -10:00");
 
}

if (time >=oras+x*16&&time < oras+x*17)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*17);
  analogWrite (leduv, dim*11);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -7:30");
 
 
}

if (time >= oras+x*17&&time < oras+x*18)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*14);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -5:00");
 
}

if (time >= oras+x*18&&time < oras+x*19)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*16);
  LCD.setCursor(0,1);
  LCD.print ("Tramonto -2:30");
 
}
/*spegnimento completo dell'illuminazione, fase 'Notte' */
if (time >= oras+x*19 && time <= 2359)

  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*18);
  LCD.setCursor(0,1);
  LCD.print ("Notte"); }
 
  if (time >= 0 && time < ora)
  {
  analogWrite (ledw1,dim*18);
  analogWrite (ledw2,dim*18);
  analogWrite (leduv, dim*18);
  LCD.setCursor(0,1);
  LCD.print ("Notte");
}
  Serial.print(time);
  Serial.print(dim);
}
Logged

Pages: 1 2 3 [4]   Go Up
Jump to: