Problemino sketch

leo72:
Tu hai scritto una porzione di codice che incrementa il valore della luminosità del led con una variabile che contiene un numero anche maggiore di 1.
Ammettiamo che questo valore sia appunto 5 ed ammettiamo che la luminosità attuale del led sia 253. Facendo 253+5 ottieni 2, ed il test che fai tu:

if ((valoreLed >= 255) || (valoreLed <= 0))

viene saltato, quindi il ciclo viene ripetuto un'altra volta, senza che il fade torni a 0.

Mi scuso anche per averti fatto ingrullire perché ho fatto un errore nel precedente codice, dove ho messo incremento di tipo byte mentre serve di tipo char, dato che poteva andare anche negativo.
Questo codice funziona con qualunque incremento di fading (basta che sia max di 127).

char incremento=5;

byte valoreLed=0;
byte LED = 3;

void setup() {
}

void loop() {
  analogWrite(LED, valoreLed);
  if (incremento > 0) {
    if (valoreLed > (255-incremento)) {
      incremento *= -1;
    }
  } else {
    if (valoreLed < abs(incremento)) {
      incremento *= -1;
    }
  }
  valoreLed += incremento;
  delay(25);
}

ti ringrazio, ora stoprovando con questo sketch, ma nel display, al posto di visualizzare le variabili char, mi mostra caratteri "cinesini"

#include <LiquidCrystal.h>



char b = 0;
byte valoreLed = 0;
byte valoreLed1 = 0;
int up = LOW;
int down = LOW;
int up1 = LOW;
int down1 = LOW;
int check = LOW;
int led = 9;           
char a = 0;  

   

LiquidCrystal lcd(13, 12, 5, 4, 3, 2);

void setup() {
  pinMode(7, INPUT);     
  pinMode(8, INPUT);   
  pinMode(6, INPUT);
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(led, OUTPUT);
  lcd.begin(16, 2);
  lcd.print("Luci presepe by");
  lcd.setCursor(0, 1);
  lcd.print("Cesare Cacitti  ");
  delay(5000);
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.clear();
  lcd.print("Giorno:");
  lcd.print(a);
  lcd.setCursor(0, 1);
  lcd.print("Notte:");
  lcd.print(b);

  delay(50);
  up = digitalRead(8);
  down = digitalRead(7);
  up1 = digitalRead(14);
  down1 = digitalRead(15);
  check = digitalRead(6);

  if (check == HIGH) {  

    if (up == HIGH) {  
      if (a<255) a++;
    }  

    if (down == HIGH) {  
      if (a>0) a--;
    }  
        if (down1 == HIGH) {  
      if (b>0) b--;
    }  
        if (up1 == HIGH) {  
      if (b<255) b++;
    }  

  }
  else {
    

  analogWrite(led, valoreLed);
  if (a > 0) {
    if (valoreLed > (255-a)) {
      a *= -1;
    }
  } else {
    if (valoreLed < abs(a)) {
      a *= -1;
    }
  }
  valoreLed += a;
  delay(25);

    analogWrite(10, valoreLed1);
  if (b > 0) {
    if (valoreLed1 > (255-b)) {
      b *= -1;
    }
  } else {
    if (valoreLed1 < abs(b)) {
      b *= -1;
    }
  }
  valoreLed1 += b;
  delay(25);
}
}

[code]

[/code]