« April 2015     September 2014 »


Mein erster Ausflug mit dem Arduino und dem DFRobot LCD Keypad shieldSamstag, 27 Dezember, 2014 17:37

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 ]

« April 2015     September 2014 »