Ziel dieses Projektes ist es eine Spannung auf dem Eingang „A0“ zu messen und auf einen LCD Display welches über einen I2C-Bus angesprochen wird auszugeben. Ich habe mir hierbei ein 4 zeiliges Display besorgt.

Es reichen wir 4 Adern, die mit dem Arduino verbunden werden.
SCL=> A5
SDA=>A4
VCC=> 5V+
GND=> GND

Die Schwierigkeit liegt im wesentlichen nun die Adresse des angeschlossenen Gerätes herauszufinden, ich habe hierzu einen I2C Scanner genutzt. Den I2C Scanner auf den Arduino übertragen, danach den seriellen Plotter starten und die angezeigte Adresse notieren. Ich habe bei meinem Display einen PCF8574A PortExpander. Da keine Lötbrücke auf dem Board geschlossen war, lautet bei mir die Adresse 0x3F, bei einem PCF8574 wäre es 0x27. Es ist also möglich mehrere Display’s zu betreiben. Sehr gute Erfahrungen habe ich mit der Library von „fmalpartida“ gemacht. Nun muss im Quellcode nur noch Eure I2C Adresse angepasst werden und es sollte funktionieren. Ich habe das Programm so geschrieben, dass alle 2 Sekunden die Spannung an Pin A0 abgefragt und auf dem Display ausgegeben werden. Der Analogeingang hat eine Auflösung von 10Bit, das heißt es gibt 1024 Zustände bei 5V
5V=>1024
2,5V=>512
0V=>0
Somit beträgt die Steigerung um 1Bit 5V/1024=0,004828125V
Um also die Spannung wieder auszugeben müssen wir den Wert den wir mit AnalogRead(PortPin) ausgelesen haben mit diesem Wert Multiplizieren. Da wir hier Kommastellen benötigen, müssen wir die Variable als Float definieren. Sollten wir sie als Integer definieren, würde der Arduino eine „Rundung“ vornehmen. Somit würden nur ganzzahlige Werte auf dem Display ausgegeben.
Quellcode I2C Scanner;
{
Wire.begin();
Serial.println(„\nI2C Scanner“);
}
{
byte error, address;
int nDevices;
for (address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
{
Serial.print(„I2C device found at address 0x“);
if (address < 16)
Serial.print(„0″);
Serial.print(address, HEX);
Serial.println(“ !“);
}
else if (error == 4)
{
Serial.print(„Unknow error at address 0x“);
if (address < 16)
Serial.print(„0“);
Serial.println(address, HEX);
}
}
if (nDevices == 0)
Serial.println(„No I2C devices found\n“);
else
Serial.println(„done\n“);
}
Quellcode für das Programm:
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
int lesewertA0 = 0;
int analogpin0 = 0;
float Spannung;
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
{
lcd.begin (20,4);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH); //Hintergrundbeleuchtung des Displays einschalten
lcd.home (); // go home
}
{
lesewertA0= analogRead(analogpin0);
Spannung=(lesewertA0*0.0048828125);
lcd.setBacklight(HIGH); // Backlight on
lcd.setCursor(0,0);
lcd.print(„A0=“);
lcd.print(Spannung);
lcd.print(„V“);
delay(2000);
lcd.clear();
}