Una delle principali novità della versione 4.2 del .Net Micro Framework è il supporto per gli input analogici mediante l’introduzione della classe AnalogInput (nel namespace Microsoft.SPOT.Hardware). Sino a tale versione, ciascun produttore di board che effettuava il porting del framework su di essa, introduceva nel proprio SDK una classe personalizzata per la gestione di tali ingressi. In particolare, anche la SecretLabs, produttrice del Netduino, fornisce la classe AnalogInput (nel namespace SecretLabs.NETMF.Hardware) con la versione 4.1 e che presenta alcune differenza rispetto a quella attualmente introdotta nella nuova versione. Grazie a tale novità, lo sviluppatore può lavorare con la medesima classe su più board diverse senza doversi adattare di volta in volta alla specifica implementazione da parte del produttore della stessa.
Vediamo di seguito quali sono le principali differenza tra la AnalogInput del Netduino con la versione .Net Micro Framework 4.1 e la corrispondente unica classe con la versione 4.2 dello stesso framework.
In primo luogo il costruttore, che nel caso del Netduino 4.1 prevede in ingresso il pin di ingresso (enum Cpu.Pin) mentre nel .Net MF 4.2 prevede l’enum Cpu.AnalogChannel.
Per quanto riguarda l’operazione di lettura della grandezza in ingresso (comunque un valore di tensione), nel caso del Netduino 4.1 è previsto il metodo Read() che ritorna un valore intero risultato della conversione eseguita dall’ADC (Analog-Digital Converter). Per ottenere il corrispondente valore di tensione, è necessario eseguire nel codice i propri calcoli tenendo conto della risoluzione dell’ADC (10 bit, valori da 0 a 1023) e la tensione di riferimento (tipicamente 3,3V). Nel caso del .Net MF 4.2, il metodo Read() ritorna un valore compreso tra 0 ed 1 che moltiplicato per la tensione di riferimento, ci fornisce direttamente il valore di tensione letto sul pin. Se vogliamo ottenere il valore intero, risultato della conversione, è necessario utilizzare il metodo ReadRaw(). Inoltre, sono state introdotte le due seguenti proprietà :
-
Offset : rappresenta un offset da sommare alla lettura della Read() prima che venga restituita (il default è ovviamente 0);
-
Scale : rappresenta un fattore di scala per il quale moltiplicare il valore della ReadRaw() prima che venga restituito (il default è ovviamente 1);
Di seguito riporto due esempi di applicazione di entrambe le classi..
Netduino con .Net Micro Framework 4.1
AnalogInput input = new AnalogInput(Pins.GPIO_PIN_A0)
// ritorna un valore tra 0 e 1023 (ADC a 10 bit)
int value = input.Read();
// bisogna calcolare il valore corrispondente della tensione
double volt = value * 3.3 / 1023;
.Net Micro Framework 4.2
AnalogInput input = new AnalogInput(AnalogChannels.ANALOG_PIN_A0)
// ritorna un valore tra 0 e 1023 (ADC a 10 bit)
int rawValue = input.ReadRaw();
// ritorna un valore tra 0 ed 1 che va moltiplicato per
// la ARef per ottenere il valore in Volt della tensione
double volt = input.Read() * 3.3;