pensavo di applicare lo stesso metodo per poter visualizzare a display la percentuale di pwm in corso usando magari come esempio il classico codice "fade" che troviamo in arduino.
Prima cosa ovviamente:
potPin = A0 diventa potPin = 5(o altro in pwm)
potValue1 = analogRead(potPin) / 10; diventa digital
...in conclusione: è la strada giusta?
Probabilmente, se ti interessa solo il valore percentuale, puoi semplificare di molto la cosa ...
potValue = analogRead(potPin); // leggi un valore che va da 0 a 1023
potValue = map(potValue, 0, 1023, 0, 100); // mappi i valori 0 .. 1023 -> 0 .. 100
...
lcd.print(potValue); // visualizzi il valore (0 .. 100 %)
gutty:
potPin = A0 diventa potPin = 5(o altro in pwm)
potValue1 = analogRead(potPin) / 10; diventa digital
...in conclusione: è la strada giusta?
No, un pin PWM non lo puoi leggere con un'analogRead, questa funzione... funziona solo sugli ingressi analogici.
Per sapere il valore di un 1 pin PWM hai 2 strade:
leggi il registro OCRxA/B corrispondente (se non sai di cosa parlo, allora la successiva fa per te);
tieni il valore del PWM in una variabile e quando vuoi sapere che PWM c'è su un pin, non devi far altro che stampare il suo contenuto.
leo72:
No, un pin PWM non lo puoi leggere con un'analogRead, questa funzione... funziona solo sugli ingressi analogici.
Per sapere il valore di un 1 pin PWM hai 2 strade:
leggi il registro OCRxA/B corrispondente (se non sai di cosa parlo, allora la successiva fa per te);
tieni il valore del PWM in una variabile e quando vuoi sapere che PWM c'è su un pin, non devi far altro che stampare il suo contenuto.
Ma .. un attimo ... lui mi sembra legga il valore del potenziometro (potValue) con il quale, mi auguro, su un'altro pin genera un PWM proporzionale alla posizione del potenziometro ... non direttamente il PWM ...
leo72:
Il suo ultimo esempio parla chiaro, lui vuol sapere se si può fare un'analogRead su un pin PWM. O almeno così io capisco da quanto ha scritto.
Aha ... io avevo letto il suo codice ed era chiaro che li stesse leggendo un potenziometro e ... mi ero basato su quello. In effetti avevo letto male le sue ultime parole, dopo il codice ...
Allora è ovvio, se vuole leggere il valore che ha in un certo momento un pin di PWM ... deve usare una delle tue due soluzioni ... anzi, direi che la più importante ... è proprio la prima ...
#include <LiquidCrystal.h>
#include <Wire.h>
LiquidCrystal lcd(0);
byte pwm9 = 0; //pwm del pin 9
int led = 9; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 9 to be an output:
pinMode(led, OUTPUT);
pwm9 = 100;
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 9:
digitalWrite(led, brightness);
// change the brightness for next time through the loop:
brightness = brightness + fadeAmount;
// reverse the direction of the fading at the ends of the fade:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// wait for 30 milliseconds to see the dimming effect
delay(300);
digitalWrite(9, pwm9);
lcd.begin(20,4 );
lcd.print(pwm9);
}
Scusa gutty, ma nel codice che hai postato, regoli la luminosità NON in funzione della variabile pwm9 (che inizializzi e NON usi mai), bensì in funzione della variabile brightness che varia da 0 a 255.
Ora ... perché visualizzi con la lcd.print() la suddetta pwm9, che tanto sempre fissa a 100 è (visto che ce l'hai messa tu) ed invece non stampi il valore di brightness che appunto ti indica il valore del PWM ???
devo chiedervi scusa!
ho copiaincollato il codice sbagliato...
anchio uso la funzione analogWrite()
Ho seguito il consiglio di Guglielmo che mi ha fatto notare che non richiamo la variabile brightness! Con la modifica
riesco a stampare il ciclo del pwm da 0 a 255 di 5 unità alla volta.
Ora devo tradurre il valore in percentuale, certo che qui non è questione solo di avere le basi di programmazione
ma di ragionare per logica su ciò che si mette in codice....mea culpa!
ciao
gutty:
Ho seguito il consiglio di Guglielmo che mi ha fatto notare che non richiamo la variabile brightness! Con la modifica
riesco a stampare il ciclo del pwm da 0 a 255 di 5 unità alla volta.
... alcuni post fa ti ho fatto vedere come si trasforma un range in un altro :