Ho un forte dubbio su come gestire un analogread in una mia applicazione... praticamente ho un potenziometro che mi da valori da 0 a 1024... per eliminare lo zero sommo 1 ottenendo così un range 1-1025...
Ho bisogno però questo renge sia fissato ad una scala non lineare dove il minimo (1) corrisponde al valore '10' e il massimo (1025) corrisponde a '35'....
Per primo il convertitore analogico digitale Ti da valori da 0 a 1023.
Per secondo per trasformare la lettura in valori con una funzione non lieare dobbiamo conoscere la funzione.
Percui una volta trovata la funzione si puó calcolare da un valore dato il valore corrispondente.
Altra possiilitá é una tabella di valori (array) dove hai memorizzato i valori che corrispondono al valore di input.
uwefed:
Per primo il convertitore analogico digitale Ti da valori da 0 a 1023.
Per secondo per trasformare la lettura in valori con una funzione non lieare dobbiamo conoscere la funzione.
Percui una volta trovata la funzione si puó calcolare da un valore dato il valore corrispondente.
Altra possiilitá é una tabella di valori (array) dove hai memorizzato i valori che corrispondono al valore di input.
Che funzione di trasformazione hai?
Ciao Uwe
Ciao e grazie per la risposta... Praticamente necessito di produrre in uscita la forma d'onda quadra allegata.
Al mio sistema ho collegato due potenziometri per la gestione di T e di T1, dove hanno i seguenti valori
T minimo= 10ms massimo 35ms
T1 minimo= 1ms massimo 4ms
noto che però l'avanzamento è unitario, ad esempio tcaricams è composto da 1,2,3,4.... è possibile avere un avanzamento non unitario? ad esempio valori da 1 a 4 con avanzamento di 0.5 o 0.2?
puo assere una valida soluzione questa secondo voi?
//imposto ingresso trimmer periodo (n°giri) e tempo di carica
int periodo = A0;
int carica = A1;
//imposto uscita led e mosfet
int led = 13;
int mos = 13;
//imposto variabili inizio loop
int tcarica = 0;
float tcaricams = 0;
int tperiodo = 0;
float tperiodoms = 0;
int tscaricams = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(mos, OUTPUT);
pinMode(periodo, INPUT);
pinMode(tcarica, INPUT);
}
void loop() {
//ottengo parametro di carica
tcarica = analogRead(carica);
tcaricams = map(tcarica, 0, 1023, 100, 400);
tcaricams = (tcaricams/100);
//ottengo parametro di periodo totale
tperiodo = (analogRead(periodo));
tperiodoms = map(tperiodo, 0, 1023, 1000, 3700);
tperiodoms = (tperiodoms/100);
//ottengo parametro di scarica
tscaricams = (tperiodoms - tcaricams);
//genero onda quadra
digitalWrite(led, HIGH);
digitalWrite(mos, HIGH);
delay(tcaricams);
digitalWrite(led, LOW);
digitalWrite(mos, LOW);
delay(tscaricams);
}