CONTENUTO ►
La funzione map di Arduino trasferisce un valore dall’intervallo corrente a un nuovo intervallo di valori specificato dai parametri – map(value, fromLow, fromHigh, toLow, toHigh). Il comando map() opera solo sui numeri interi. La parte frazionaria del numero non viene arrotondata secondo le regole della matematica durante il trasferimento proporzionale, ma viene semplicemente scartata. Vediamo l’uso della map() in Arduino IDE con alcuni esempi.
Per questa attività sono necessari:
- Arduino Uno / Arduino Nano / Arduino Mega
- LED e resistenza
- fotoresistenza (LDR)
- breadboard
- cavi di collegamento
Come si usa funzioni map() Arduino IDE?
Sintassi della funzione map Arduino, descrizione
map(value, fromLow, fromHigh, toLow, toHigh);
- value: valore da trasferire
- fromLow: limite inferiore dell’intervallo attuale
- fromHigh: limite superiore dell’intervallo corrente
- toLow: limite inferiore del nuovo intervallo
- toHigh: limite superiore del nuovo intervallo
Il seguente programma di esempio dimostra l’uso della funzione map(). Il LED deve illuminarsi tanto più intensamente quanto più scura è l’area circostante. In altre parole, il valore della funzione analogWrite() deve essere inversamente proporzionale al valore del sensore di luce e al parametro del comando analogRead(). A tale scopo, invertire la variabile value e impostare nuovi limiti in modo che il valore passi dall’intervallo 0-1023 all’intervallo 255-0.
Programma Arduino con la funzione map()
int value; void setup() { Serial.begin(9600); pinMode(A1, INPUT); pinMode(9, OUTPUT); } void loop() { value = analogRead(A1); Serial.println(value); value = map(value, 0, 1023, 255, 0); analogWrite(9, value); }
Spiegazione del codice per utilizzare funzione map significato
- il LED sarà più luminoso se l’ambiente è più scuro, cioè analogWrite() deve essere inversamente proporzionale a value. A tal fine, value deve essere invertito in modo che il suo valore passi da 0/1023 a 255/0.
Come si usa funzioni map() Arduino IDE?
Nell’esempio seguente convertiremo i dati del fotoresistenza Arduino (valori da 0 a 1023) in volt (valori da 0 a 5) e li invieremo alla porta seriale dell’IDE Arduino. Per ottenere valori con numeri frazionari per una misurazione più accurata della tensione sull’ingresso analogico, dobbiamo utilizzare la funzione float mapf nello sketch. Senza modificare il circuito del primo esempio, caricare il seguente programma nel microcontrollore Arduino Uno.
int val, led; void setup() { Serial.begin(9600); pinMode(A1, INPUT); pinMode(9, OUTPUT); } void loop() { val = analogRead(A1); float data = mapf(val, 0, 1023, 0, 5); Serial.print(data); Serial.println(" V"); led = map(val, 0, 1023, 255, 0); analogWrite(9, led); delay(100); } float mapf(float value, float fromLow, float fromHigh, float toLow, float toHigh) { float result; result = (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow; return result; }
Conclusioni. Quando si effettua una conversione con map(), la parte frazionaria non viene arrotondata, ma semplicemente scartata (non viene presa in considerazione). Questo fatto deve essere tenuto in considerazione quando si lavora con il tipo di dati float nel linguaggio Arduino. Si noti che la funzione map utilizza la divisione per 2, che è un’operazione molto costosa. Pertanto, la funzione viene eseguita molto lentamente e non deve essere interrotta.
Lascia un commento