10.10.2014

Holperiger Start mit Arduino

Ich hatte mich ja recht lange gegen Arduino gewehrt. Aus mehreren Gründen. Zum einen war es mir irgendwie zu kompliziert. Zum anderen fand ich die Originalplatinen maßlos überteuert. Aber da es sich um Open Source Hard- und Software handelt, haben sich schnell die Chinesen gefunden, welche die Gerätschaften schamlos kopieren und zu unverschämt günstigen Preisen anbieten. Und so musste selbst ich einsehen, daß es bisweilen billiger kommt, fertige Bausteine aus Fernost zu erwerben als die Chips einzeln um sie dann auf Platine zusammenzulöten oder auf ein Steckbrett zu verfrachten.


OK, ich gab mich also geschlagen und habe mir zum Beginn eine Handvoll UNO-Kopien besorgt. Displays hatte ich eh noch in meinem Fundus. Auch hatte ich beim Chinamann i2c Adapterplatinen für die LCDs besorgt. Selbstredend waren die ohne weitere Beschreibung. Aber billig. ;)

 
Die i2c Platine wird einfach in voller Schönheit mit der LCD verbunden

Bis es soweit kam, waren einige Hürden zu umschiffen..

Und genau da merkt man, daß man ohne Hintergrundwissen oder gutes Händchen bei Google auf verlorenen Posten steht. Der erste Treffer ging ins Microcontroller-Forum. Ich verlinke es hier nicht, weil über den Beitrag sollte man besser den Mantel des Schweigens decken. Kurz und gut, so verschreckt man ambitionierte Neulinge.

Also weitergesucht, und irgendwo augenscheinlich passende Libs gefunden. Dummerweise stockte es dort bereits. Bei der ersten Lib fehlten mir einige wichtige Infos, z.B. wo die Pins deklariert werden. Als C-Neuling ist es für mich noch schwer, mich dort durchzuwühlen. Es folgten weitere Links zu angeblich passenden Libs, welche ich auch brav importiert habe um dann direkt wegen Compilerproblemen hängenzubleiben. Dabei ist mir dann eine Besonderheit der Arduino IDE aufgefallen. Es reicht nicht, wenn man bei augenscheinlich falschen Libs nur die Verzeichnisse umbenennt. Nein, man muss sie komplett rausnehmen. Muss man wissen... Zudem auch noch verschiedene Libs mit gleichen Namen aber anderen Funktionen durchs Netz geistern. Prima.

OK, irgendwann habe ich die Bezeichnung der Platine gefunden: LCD1602 Also weitergesucht und endlich auch eine Lib gefunden. Aber es wollte immer noch nicht. Grrrr! Irgendwann blieb mir nichts anderes übrig als jeden Pin durchzupiepen um weiterzukommen. Hier mein Ergebnis:

// lcd_I2C_test
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define I2C_ADDR    0x27 // a0, a1, a2 offen
#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

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,BACKLIGHT_PIN,POSITIVE);

void setup()
{
  // Hintergrundbeleuchtung einschalten
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  lcd.begin(16,2);               // LCD initialisieren
}

void loop()
{
  lcd.home (); // Links oben
  delay(200);
  lcd.print("Na endlich! Das");
  lcd.setCursor ( 0, 1 );        // CRLF
  lcd.print ("war ne Geburt...");     
  delay(2000);
  lcd.noBacklight();            // Hintergrundbeleuchtung Blink
  delay(2000);
  lcd.backlight();