Display e valore in percentuale

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:

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.

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

urge il casting verso float della variabile brightness!

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

prova così :wink:

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