Pages: [1]   Go Down
Author Topic: Display e valore in percentuale  (Read 628 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti mi chiamo Ste, mi presento ora anche se non è il mio primo post.

Sto realizzando con arduino UNO, un controllore per acquario con varie funzioni tra le quali una per la gestione delle fasi lunari.
Il tempo del ciclo è approssimato a 30 giorni e la variazione  della luminosità dei led che illuminano la vasca di notte è affidata ad uno dei pin PWM.
In pratica, ricevendo in ingresso il contatto di un relè crepuscolare, incremento l'uscita PWM giornalmente di un valore pari a 17 in modo che al 15esimo step sia al massimo e inizi a decrescere. La funzione fading è quella dell'esempio.

Posto il frammento di codice:

Code:
void fadingLuna(){
  analogWrite(LUN_PIN, brightness); //scrive il valore analogico corrispondente alla fase lunare
  lcd.setCursor(0,1);
  lcd.print("Luna: ");
  lcd.print(((255-brightness)/255)*100);  //calcolo percentuale
  lcd.print("%"); 
  /* DEBUG
  Serial.begin(9600);
  Serial.print(" Brightness: ");
  Serial.print(brightness);
  Serial.print(" Luna: ");
  Serial.print(((255-brightness)/255)*100);
  Serial.print("%");
  */
  analogWrite(LUN_PIN, brightness);       //scrive il valore analogico corrispondente alla fase lunare
  brightness = brightness + fadeStep;      //incremento o decremento giornaliero
  if (brightness == 0 || brightness == 255){   //se si è arrivati a fine corsa, inverti il fading
    fadeStep = -fadeStep;
  }
}

Il problema è che non calcola la percentuale in modo corretto, anzi rimane a 0 anche se il led funziona regolarmente e il valore di brightness varia in modo corretto ..
O che sono io che ho sbagliato come un asino, sennò non capisco.
I led per come sono collegati, sono attivi a livello BASSO quindi per un valore PWM=255 i led sono spenti.

Grazie in anticipo.
Logged

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

L'errore credo sia nella formula che usi:

((255-brightness)/255)*100

Mettiamo che brightness sia di tipo intero (int o byte), non lo specifichi, quando fai ((255-100)/255) avrai 0 come risultato. Devi mettere un tipo di dati float, cioè a virgola mobile, capace di tenere i decimali
Logged


Recanati (MC)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

urge il casting verso float della variabile brightness!

((255-(float)brightness)/255)*100

prova così smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grandi!! Io avevo fatto solo il casting dell'intero risultato....ora funziona.
Grazie,
Ste
Logged

Pages: [1]   Go Up
Jump to: