Go Down

Topic: Non riesco a venirne a capo (Read 3 times) previous topic - next topic

tuxduino

abs() ritorna il valore assoluto di un numero. Semanticamente equivale a:

if x < 0
 return -x
else
 return x
endif

Non ho letto bene il tuo codice, ma mi pare che di fronte ad una variabile che assume valori _inaspettatamente_ negativi la soluzione non sia "togliere il segno meno", ma capire perché ciò avviene.
:)

Dandovino

hai ragione, ma rileggendo tutto il codice non mi pare di vedere possibilità di far divenire un numero positivo un numero negativo...  :smiley-slim:

Dandovino

non ce la faccio più, sta diventando ridicolo, come può in questo codice diventare vero l'if della fase 'giorno' passata la mezzanotte dove invece dovrebbe essere assolutamente falso?
Code: [Select]
/*
* TimeRTC.pde
* example code illustrating Time library with Real Time Clock.
*
*/
#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);
 
   DS1307RTC(); 
}

void loop()
{

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

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
   float dim;
   int ora;
   int oras;
   int moonlight=7;//pin led lunari
   int  time=(hour()*60*60 + minute()*60 + second());//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=255/18;//aumento intensità per ogni step
   ora=45000;//12:30 ora accensione in millisecondi(ore*3600 minuti*60 secondi*1)*1000
   oras=83700;//23:15 ora spegnimento in millisecondi(ore*3600 minuti*60 secondi*1)*1000
   int x=150;//intervallo in millisecondi tra un fade e un altro
LCD.clear();
/*impostazione per l'accensione deiled lunari*/

Code: [Select]
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");

}

tuxduino

Io proverei a stampare sulla seriale i valori all'interno delle condizioni if(). Cioè time e i due valori calcolati con cui lo confronti.

Dandovino

allora, se davanti a ora e oras metto 'int' da vera la fase giorno sia di giorno che di notte, se metto 'long' da vera la fase di notte sempre in entrambe i casi... tra un pò spacco tutto... è illogico!!!

Go Up