led 3w non dimmera

Ciao a tutti!
Ho appena acquistato un led driver da 700mA per dimmerare un led da 3w in pwm come questo:

ho collegato VIN+ e VIN- ad un alimentatore stabilizzato tipo:

e poi ho collegato il pin PWM del led driver al pin 5 di arduino (ho provato anche gli altri pin pwm di arduino ma niente) e il pin appena sotto il pin PWM del led driver al GND di arduino.

Ho usato questo sketch:

const int ledPin = 5;     

void setup()
{
  
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  byte brightness;

  if (Serial.available()) {
   
    brightness = Serial.read();
    analogWrite(ledPin, brightness);
    
  }
}

Appena connetto arduino e il led driver, il led assorbe 500mA. Qualsiasi cosa io scriva sulla seriale (da 0 a 254) l'assorbimento del led scende a 300mA (si abbassa un po l'intensità) e poi rimane così anche se continuo a scrivere diversi valori sulla seriale.
Non riesco a capire dove sia/siano l'/gli errore/i.
Qualsiasi consiglio è ben accetto!

Grazie in anticipo

Stramike

Mettiamo in pratica le basilari tecniche di debug, per prima cosa si eliminano gli elementi di contorno. Quindi via la seriale, imposta uno sketch che ti possa dare un feedback diretto, senza bisogno di interventi esterni, per esempio un incremento del valore brightness con relativo for e apposito delay.

E' sbagliato lo sketch.

Quando invii "253", al primo loop leggi 2 e lo trasmetti (brightness = 2), al secondo leggi 5 e lo trasmetti (brightness = 5) ed al terzo leggi 3 e lo trasmetti (brightness = 3): qualsiasi sia il numero che invvi, non supererai mai brightness = 9.

9 corrisponde al numero 57.

prova a variare la variabile con un for.

Ciao Uwe

Giusto Uwe, mi correggo.

Quando invii "253", al primo loop leggi "2" e lo trasmetti (brightness = 0x32 = 50), al secondo leggi "5" e lo trasmetti (brightness = 0x35 = 53) ed al terzo leggi "3" e lo trasmetti (brightness = 0x33 = 51): qualsiasi sia il numero che invii, non supererai mai brightness = 57.

Ero quasi certo l'errore fosse nella conversione ASCII/byte, per questo ho suggerito il for, per togliersi il dubbio del driver.

Quando si implementano comunicazioni seriali di questo genere il terminale di Arduino non è indicato per il debug.

Prova a usare la Serial.parseInt()

con parseInt() funziona che è uno spettacolo!! :smiley: :smiley: :smiley: :smiley: :smiley:
Non so come ringraziarvi tutti, per il suggerimento di usare parseInt() e per le spiegazioni!! Grazie

Ricorda però che il terminare seriale dovrebbe essere rilegato piu al debug che all'interfaccia finale del prodotto.