Ein analog Eingang gibt einen Zahlenwert an den Mikrocontroller der weiterverarbeitet werden kann.

In diesem Beispiel schließen wir ein Potentiometer an (Drehregler).

Den Wert rechnen wir so um das ein Bereich von 0-100% entsteht.

  • Pin 0: Masse (-)
  • Pin 1: Analog Eingang
  • Pin 2: Plus (+)

Wir deklarieren die Pins mit der jeweiligen Funktion:

AnalogInput voltagePort = new AnalogInput(Pins.GPIO_PIN_A1);
OutputPort lowPort = new OutputPort(Pins.GPIO_PIN_A0, false);
OutputPort highPort = new OutputPort(Pins.GPIO_PIN_A2, true);

Wobei hier +/- als Ausgänge definiert werden. Je nach Funktion mit Zustand:

  • Plus: high (true)
  • Minus: low (false)

Als nächstes benötigen wir Umrechnungszahlen. Die maximal Spannung des Netduino ist 3,3V. Der Eingang stellt einen Zahlenwert zwischen 0-1023 dar.

const double maxVoltage = 3.3;
const int maxAdcValue = 1023;

Nun berechnen wir in der Dauerschleife die Eingangsspannung und die Prozentzahl des Eingangs.

Den Wert des Eingangs schreiben wir in ein Objekt (int) mit der Funktion Read():

int valueRaw = voltagePort.Read();

Spannung = (valueRaw x maxVoltage) : maxAdcValue

Spannung = (Rohwert x Maximalspannung) : Maximalwert

Prozent = (valueVoltage : maxVoltage) x 100

Prozent = (Spannung : Maximalspannung) x 100

double valueVoltage = (valueRaw * maxVoltage) / maxAdcValue;
double valuePercent = (valueVoltage/maxVoltage)*100;

Die Ergebnisse geben wir im Ausgabefenster aus:

Debug.Print("Voltage: " + valueVoltage + "V");
Debug.Print("Percent: " + valuePercent + "%");

Damit das Auswertungsfenster nicht bei jedem Zyklus schreibt, fügen wir noch eine Pause von 3000ms (3 Sekunde) ein.

Thread.Sleep(3000);

Anbei das komplette Beispiel:

using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace NetduinoTest
{
    public class VoltageReader
    {
        public static void Main()
        {
            AnalogInput voltagePort = new AnalogInput(Pins.GPIO_PIN_A1);
            OutputPort lowPort = new OutputPort(Pins.GPIO_PIN_A0, false);
            OutputPort highPort = new OutputPort(Pins.GPIO_PIN_A2, true);

            const double maxVoltage = 3.3;
            const int maxAdcValue = 1023;

            while (true)
            {
                int valueRaw = voltagePort.Read();
                double valueVoltage = (valueRaw * maxVoltage) / maxAdcValue;
                double valuePercent = (valueVoltage/maxVoltage)*100;

                Debug.Print("Voltage: " + valueVoltage + "V");
                Debug.Print("Percent: " + valuePercent + "%");

                Thread.Sleep(1000);
            }
        }
    }
}

Quelle: O’Reilly – Getting Started with the Internet of Things