Meine neue Spielwiese sollte der Arduino sein.
Mit Scripting und etwas Programmieren am Computer war ich ja schon
vertraut und kam schnell auf die Idee, dass so eine
Mikroprozessor-Programmierung ohne Display und Tatatur an der CPU recht
uninformiert aufallen könnte. - Mein erster Ausflug sollte also gleich
eine Textausgabe und eine Eingabemöglich am Gerät haben, auch wenn ich
inzwischen schon bemerkt hatte, dass das Android SDK durchaus eine
Wiedergabe der seriellen Konsole vom Arduino hat.
Deswegen hatte ich mir das DFRobot
LCD Keypad für den Arduino gekauft, das ein blaues, beleuchtetes
Display mit weißer Schrift und 6 Tasten für select, Cursorsteuerung und
Reset bietet.
Aprops Arduino, ich hatte mir gekauft den Arduino Pro Mini, den Arduino
Funduino, sowie den Arduino
Nano gleich doppelt oder auch dreifach, Elektronik raucht schnell
mal ab beim Entwickeln, dachte ich mir und die Preise sind ja echt
günstig.
Bisher ist alles gut verlaufen :)
Wie man nun anfängt? Nun, ein Vergleich mit Windows und Linux hat mir
gezeigt, dass es besser ist, mit Linux zu programmieren, was daran
liegt, dass das Hochladen von Software bei Windows nicht geht, wenn der
Arduinio am Programmierer oder sofern es geht, am USB-Kabel
angeschlossen nicht erkannt wird. Das ist bei Linux kein Problem.
Ein Tip, den ich nach Fehlermeldungen am Windowscomputer beim Hochladen
hatte und so nicht als Lösung im Internet gefunden habe:
Programmieren geht am Besten mit nackigen Arduino! Also nicht am
Steckbrett, wo er noch mit anderen Modulen verbunden ist!!!
Ein oder mehrere Steckbretter
mit kurzen
und langen Steckkabeln gibt die Möglichkeit, Module mit dem Arduino
zu verbinden, ohne dass man löten muss. Für Arduino geeignete
Seriell-zu-USB Module, FTDI basiert, um Arduinos die keinen
USB-Anschluss haben verbinden zu können. Geeignete USB-Kabel.
Das Problem auf das ich stieß, als ich das LCD am Arduino anschließen
wollte, war, dass ich (natürlich) keine Webseiten fand, die die
Verdrahtung ganz genau zeigten. Dokumente, die zeigten, dass man das LCD
prima auf den Arduino Uno stecken konnte waren zunächst nicht so die
richtige Hilfe... später, als ich mir die PIN-Schematics vom Arduino UNO
reingezogen hatte, war alles klar.
Ich habe mal das PIN-Layout des LCD von einer meiner Funde mit XCircuit
nachgezeichnet, hier ist es:
-die Anschlüsse, die man braucht, sind alle angehakt. Das ist auf
der unteren Seite bei den Buttons Reset, 5V, Ground sowie A0 und auf der
Oberseite D4-D9 und D10. Und ja, D11 MOSI ~ ist mir auf dem Bild wohl
verloren gegangen und ich hab's zu spät gemerkt. Egal, brauchen wir hier
ja nicht :)
Auch nicht unbedingt braucht man Reset und D10 für Backlight Control.
Verbunden wird mit dem Arduino 1:1, d.h. LCD D4 geht auf Arduino D4, LCD
D5 auf Arduino D5 usw., LCD 5V (Input) geht auf Arduino 5V (Output), GND
auf GND und A0 auf A0. Ging bei meinem Funduino ohne weitere Maßnahmen.
Ein Sketch
von DFRobot hat mir gut gefallen und modifiziert hatte ich es, weil
ich wohl ein LCD V1.0 Board habe und weil ich wissen wollte, wie der
Reset arbeitet und wie es ohne Backlight aussieht.
So sieht "der Gerät" aus:
Und so das modifzierte Sketch:
//Sample using LiquidCrystal library
#include <liquidcrystal.h>
/*******************************************************
This program will test the LCD panel and the buttons
Mark Bramwell, July 2010
********************************************************/
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//LiquidCrystal lcd(4, 5, 6, 7, 8, 9);
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
#define backLight 10
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
// For V1.1 us this threshold
/*
if (adc_key_in 50) return btnRIGHT;
if (adc_key_in 250) return btnUP;
if (adc_key_in 450) return btnDOWN;
if (adc_key_in 650) return btnLEFT;
if (adc_key_in 850) return btnSELECT;
*/
// For V1.0 comment the other threshold and use the one below:
if (adc_key_in 50) return btnRIGHT;
if (adc_key_in 195) return btnUP;
if (adc_key_in 380) return btnDOWN;
if (adc_key_in 555) return btnLEFT;
if (adc_key_in 790) return btnSELECT;
return btnNONE; // when all others fail, return this...
}
void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // print a simple message
}
void loop()
{
lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
lcd.print(millis()/1000); // display seconds elapsed since power-up
lcd.setCursor(0,1); // move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttons
switch (lcd_key) // depending on which button was pushed, we perform an action
{
case btnRIGHT:
{
lcd.print("RIGHT ");
break;
}
case btnLEFT:
{
lcd.print("LEFT ");
break;
}
case btnUP:
{
lcd.print("UP ");
pinMode(backLight, OUTPUT); // Backlight off
break;
}
case btnDOWN:
{
lcd.print("DOWN ");
pinMode(backLight, INPUT); // Backlight on
break;
}
case btnSELECT:
{
lcd.print("SELECT");
break;
}
case btnNONE:
{
lcd.print("NONE ");
break;
}
}
}
Der Reset am LCD bewirkt ein Reset am Arduino, ist das Backlight aus
(Cursor up, wieder an mit Cursor down), braucht man ein gut
ausgeleuchtetes Display, um etwas lesen zu können. Aber vielleicht kann
man ja die Darstellung invertieren und ich finde das noch irgendwann
heraus.
Und jetzt geht es erst richtig los mit der Mikroprozessor-Programmierung
XD
Categories: Elektronik, Hardware, Programmierung, Selbstgemacht, Software
[ [0] Kommentare ]