Jürgens Arduino Test Programme LCD TFT LED

 

Einleitung
Unzählige Erweiterungen!
Für den Arduino existieren Zusatzmodule, Shields und Sensoren in sehr großer Anzahl. Dazu ist es auch möglich eigene Schaltungen zu entwickeln um sie mit dem Arduino anzuprogrammieren.
Doch durch diese Unzahl von Erweiterungen ist es schwer den Überblick bezüglich der richtigen Bibliotheken bzw. der Programmierung dieser Teile zu behalten.
Wie die Zusatzmodule anprogrammieren?

Hier sind viele Programmbeispiele inkl. einer genauer Bezeichnung der dazugehörigen Hardware zu finden. Damit sollte es einfacher sein schon beim Kauf auf Kompatibilität zu achten.
Die Beispiele sind für ARDUINO UNO R3 abgestimmt.

Zum Seitenanfang

Libraries (Bibliotheken)

Benötigte Bibliotheken zum Downloaden: Libraries.ZIP

Zum Seitenanfang

Source Codes

Alle Sourcecodes zum Downloaden: Sources.ZIP

Zum Seitenanfang

Test Programme
LCD I2C 16x2



vorne

hinten

Pinbelegung

--------------
LCD -> Arduino
--------------
VCC -> 5V
GND -> GND
SDA -> A4
SCL -> A5

Beispiel Code

/*
LCD Test
I2C Serial Display 16x2

Pinbelegung
--------------
LCD -> Arduino
--------------
VCC -> 5V
GND -> GND
SDA -> A4
SCL -> A5
*/

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

LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
    lcd.init();
    lcd.clear();
    lcd.backlight();
    lcd.print("LCD Test");
    delay(3000);
    lcd.clear();
    lcd.noBacklight();
    delay(1000);
}

void loop() {
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("1234567890ABCDEF");
    lcd.setCursor(0,1);
    lcd.print("1234567890ABCDEF");
    delay(3000);
    lcd.clear();
}

Ausgabe Anzeige LCD 16x4

1234567890ABCDEF
1234567890ABCDEF

Zum Seitenanfang

LCD I2C 2004 (20x4)


vorne

hinten



Pinbelegung

--------------
LCD -> Arduino
--------------
VCC -> 5V
GND -> GND
SDA -> A4
SCL -> A5

Beispiel Code

/*
LCD Test
I2C Serial Display 20x4

Pinbelegung
--------------
LCD -> Arduino
--------------
VCC -> 5V
GND -> GND
SDA -> A4
SCL -> A5
*/

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

LiquidCrystal_I2C lcd(0x27,20,4);

void setup() {
    lcd.init();
    lcd.clear();
    lcd.backlight();
    lcd.print("LCD Test");
    delay(3000);
    lcd.clear();
    lcd.noBacklight();
    delay(1000);
}

void loop() {
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("1234567890ABCDEF+-x:");
    lcd.setCursor(0,1);
    lcd.print("1234567890ABCDEF+-x:");
    lcd.setCursor(0,2);
    lcd.print("1234567890ABCDEF+-x:");
    lcd.setCursor(0,3);
    lcd.print("1234567890ABCDEF+-x:");
    delay(3000);
    lcd.clear();
}


Bsp LCD 20x4

1234567890ABCDEF+-x:
1234567890ABCDEF+-x:
1234567890ABCDEF+-x:
1234567890ABCDEF+-x:



Zum Seitenanfang

LCD 16x2 Keypad Shield


vorne

hinten

Pinbelegung

--------------
LCD -> Arduino
einfach Huckepack aufstecken

Beispiel Code

/*
LCD Shield Test

*/

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

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

int read_LCD_buttons(){

adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
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;

}

void setup(){

lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("Drueck Button");

}

void loop(){

lcd.setCursor(7,1);
lcd.print("Sek: ");
lcd.print(millis()/1000);

lcd.setCursor(0,1);
lcd_key = read_LCD_buttons();

switch (lcd_key){

case btnRIGHT:{
 lcd.print("Rechts");
 break;
 }
case btnLEFT:{
 lcd.print("Links ");
 break;
 }
case btnUP:{
 lcd.print("Rauf ");
 break;
 }
case btnDOWN:{
 lcd.print("Runter");
 break;
 }
case btnSELECT:{
 lcd.print("Select");
 break;
 }
case btnNONE:{
 lcd.print("Nichts");
 break;
 }

}

}


Ausgabe Anzeige LCD 16x4

Drueck Button
Nichts Sek: 0

Zum Seitenanfang

TM1638 LED & KEY Segment Anzeige

 

vorne

hinten

 

Pinbelegung

------------------
TM1638 -> Arduino
------------------
VCC -> +5V
GND -> GND
STB -> PIN A7
CLK -> PIN A8
DIO -> PIN A9

Beispielcode

/*
TM1638 LED&KEY Test

Pinbelegung
-----------
TM1638 -> Arduino
-----------------
VCC -> +5V
GND -> GND
STB -> PIN A7
CLK -> PIN A8
DIO -> PIN A9
*/


#include <TM1638.h>

TM1638 module(9, 8, 7);

byte punkt = 0;
long ausgabewert = 0x1234ABCD;

void setup() {

Serial.begin(9600);

module.setDisplayToHexNumber(ausgabewert, 0xF0);
delay(3000);
}

void loop() {

byte button = module.getButtons();

if (button > 0){
  Serial.print("Buttoncode: ");
  Serial.println(button);
  }

if (button < 16){
  module.setLEDs(button & 0xF);
  }
else{
  module.setLEDs(button & 0xF0);
  }

punkt = button;
module.setDisplayToHexNumber(ausgabewert, button, true);
delay(50);
ausgabewert = (ausgabewert +1 ) & 0xFFFFFF;
}

 

Ausgabe Anzeige

 

Zum Seitenanfang

2.4" TFT LCD Color Touch Display & SD Card Reader Shield


Passt für das Display von www.mcufriend.com (Micro SD Card)

Vorne

Hinten

Pinbelegung:
Huckepack auf Arduino

Beispielcode: Grafik - Touch Test

/*
TFT Touch 2.4 Shield
Touch + Grafik Test

*/

#include <Adafruit_GFX.h>
#include <SWTFT.h>
#include <TouchScreen.h>

#define YP A1
#define XM A2
#define YM 7
#define XP 6

#define TS_MINX 115
#define TS_MINY 145
#define TS_MAXX 920
#define TS_MAXY 965

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define ROZ 0xFBE0
#define GRI 0xBDF7

SWTFT tft;

#define BOXSIZE 40
#define PENRADIUS 3
int oldcolor, currentcolor;
int ics;

void setup(void) {

Serial.begin(9600);
Serial.println(F("Paint!"));

tft.reset();

uint16_t identifier = tft.readID();

Serial.print(F("LCD driver chip: "));
Serial.println(identifier, HEX);

tft.begin(identifier);

tft.fillScreen(BLACK);
tft.fillRect(0, 0, 320, 240, BLACK);
tft.setRotation(3);
tft.setCursor(30, 100);
tft.setTextColor(RED); tft.setTextSize(3);
tft.println("LCD driver chip: ");
tft.setCursor(100, 150);
tft.setTextColor(BLUE);
tft.println(identifier, HEX);

delay(2000);
tft.fillRect(0, 0, 320, 240, BLACK);

tft.setRotation(0);
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
tft.fillRect(0, BOXSIZE, BOXSIZE, BOXSIZE, YELLOW);
tft.fillRect(0, BOXSIZE*2, BOXSIZE, BOXSIZE, GREEN);
tft.fillRect(0, BOXSIZE*3, BOXSIZE, BOXSIZE, CYAN);
tft.fillRect(0, BOXSIZE*4, BOXSIZE, BOXSIZE, BLUE);
tft.fillRect(0, BOXSIZE*5, BOXSIZE, BOXSIZE, MAGENTA);
tft.fillRect(0, BOXSIZE*6, BOXSIZE, BOXSIZE, GRI);
tft.fillRect(0, BOXSIZE*7, BOXSIZE, BOXSIZE, ROZ);

tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
currentcolor = RED;

cifre (WHITE);
pinMode(13, OUTPUT);
}

#define MINPRESSURE 10
#define MAXPRESSURE 1000

void loop() {

digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);

pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);

if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {

Serial.print("X = "); Serial.print(p.x);
Serial.print("\tY = "); Serial.print(p.y);
Serial.print("\tPressure = "); Serial.println(p.z);
Serial.print(tft.width());

if (p.y < (TS_MINY-5)) stergere();

p.x = tft.width()-(map(TS_MAXX - p.x, 0, TS_MAXX, tft.width(), 0));
p.y = tft.height()-(map(TS_MAXY - p.y, 0, TS_MAXY, tft.height(), 0));
//Touch reverse - mirror
//p.x = tft.width()-(map(p.x, 0, TS_MAXX, tft.width(), 0));
//p.y = tft.height()-(map(p.y, 0, TS_MAXY, tft.height(), 0));


Serial.print("("); Serial.print(p.x);
Serial.print(", "); Serial.print(p.y);
Serial.println(")");

if (p.x < BOXSIZE) {
oldcolor = currentcolor;

if (p.y < BOXSIZE) {
currentcolor = RED;
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*2) {

currentcolor = YELLOW;
tft.drawRect(0, BOXSIZE, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*3) {

currentcolor = GREEN;
tft.drawRect(0, BOXSIZE*2, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*4) {

currentcolor = CYAN;
tft.drawRect(0, BOXSIZE*3, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*5) {

currentcolor = BLUE;
tft.drawRect(0, BOXSIZE*4, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*6) {

currentcolor = MAGENTA;
tft.drawRect(0,BOXSIZE*5, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*7) {

currentcolor = GRI;
tft.drawRect(0,BOXSIZE*6, BOXSIZE, BOXSIZE, WHITE);

} else if (p.y < BOXSIZE*8) {

currentcolor = ROZ;
tft.drawRect(0,BOXSIZE*7, BOXSIZE, BOXSIZE, WHITE);
stergere();

}

text (currentcolor);

if (oldcolor != currentcolor) {

if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
if (oldcolor == YELLOW) tft.fillRect(0, BOXSIZE, BOXSIZE, BOXSIZE, YELLOW);
if (oldcolor == GREEN) tft.fillRect(0, BOXSIZE*2, BOXSIZE, BOXSIZE, GREEN);
if (oldcolor == CYAN) tft.fillRect(0, BOXSIZE*3, BOXSIZE, BOXSIZE, CYAN);
if (oldcolor == BLUE) tft.fillRect(0, BOXSIZE*4, BOXSIZE, BOXSIZE, BLUE);
if (oldcolor == MAGENTA) tft.fillRect(0, BOXSIZE*5, BOXSIZE, BOXSIZE, MAGENTA);
if (oldcolor == GRI) tft.fillRect(0, BOXSIZE*6, BOXSIZE, BOXSIZE, GRI);
if (oldcolor == ROZ) tft.fillRect(0, BOXSIZE*7, BOXSIZE, BOXSIZE, ROZ);
cifre (currentcolor);
}

}

if (((p.x-PENRADIUS) > BOXSIZE) && ((p.x+PENRADIUS) < tft.width())) {

tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
}

}

}

void text (int culoare) {

tft.setRotation(3);
tft.setCursor(70, 80);
tft.setTextColor(culoare); tft.setTextSize(5);

tft.setCursor(5, 220); tft.setTextSize(2);
tft.println("http://www.awdl.at");
tft.setRotation(0);
}

void cifre (int culoare) {

tft.setRotation(3);
tft.setTextColor(culoare);
tft.setTextSize(3);
tft.drawLine(0, 0, 40, 40, culoare);
tft.drawLine(0, 40, 40, 0, culoare);

tft.setCursor(55, 10);
tft.println("1");
tft.setCursor(95, 10);
tft.println("2");
tft.setCursor(135, 10);
tft.println("3");
tft.setCursor(175, 10);
tft.println("4");
tft.setCursor(215, 10);
tft.println("5");
tft.setCursor(255, 10);
tft.println("6");
tft.setCursor(295, 10);
tft.println("7");

tft.setRotation(0);
}

void stergere () {

Serial.println("erase");

tft.fillRect(0, 0, 240, 320, BLACK);
tft.setRotation(0);
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
tft.fillRect(0, BOXSIZE, BOXSIZE, BOXSIZE, YELLOW);
tft.fillRect(0, BOXSIZE*2, BOXSIZE, BOXSIZE, GREEN);
tft.fillRect(0, BOXSIZE*3, BOXSIZE, BOXSIZE, CYAN);
tft.fillRect(0, BOXSIZE*4, BOXSIZE, BOXSIZE, BLUE);
tft.fillRect(0, BOXSIZE*5, BOXSIZE, BOXSIZE, MAGENTA);
tft.fillRect(0, BOXSIZE*6, BOXSIZE, BOXSIZE, GRI);
tft.fillRect(0, BOXSIZE*7, BOXSIZE, BOXSIZE, ROZ);


tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
currentcolor = RED;
cifre (WHITE);
}

Ausgabe

Beispielcode: Text Test

/*
TFT 2.4 Touch
Text Test

*/
#include <Adafruit_GFX.h>
#include <SWTFT.h>

#define BLUE 0x001F
#define RED 0xF800
#define YELLOW 0xFFE0

char dataRx;
int asciicode = 0;
SWTFT tft;

void setup(void){

Serial.begin(9600);
delay(500);
tft.reset();
uint16_t identifier = tft.readID();
tft.begin(identifier);
tft.fillScreen(BLUE);
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setRotation(3);
tft.println("Serielle Konsole\n9600 Baud");
Serial.println(F("Serieller Datenuebertragungstest Test!"));
Serial.println(F("Gib Text im Textfeld vom Serialmonitor ein und druecke <senden>"));
}

void loop(void){

digitalWrite(13, HIGH);
dataRx=Serial.read();
tft.setTextSize(2);
if(dataRx > -1){

Serial.println(dataRx);
tft.print(dataRx);
}

delay(50);
}

 

Ausgabe:

Beispielcode: SD-Card Test
Micro SD Card einstecken nicht vergessen

/*
TFT 2.4 Touch
SD Karte Test

*/
#include <Adafruit_GFX.h>
#include <SWTFT.h>
#include <stdint.h>
#include <SD.h>

#define SD_CS 10
#define BLUE 0x001F
#define RED 0xF800
#define YELLOW 0xFFE0
#define GREEN 0x07E0

int n = 1;
SWTFT tft;

void setup(void){

Serial.begin(9600);
delay(500);
tft.reset();
uint16_t identifier = tft.readID();
tft.begin(identifier);
tft.fillScreen(BLUE);
tft.setTextColor(YELLOW);
tft.setTextSize(3);
tft.setRotation(3);
Serial.print(F("Initialisiere SD Karte..."));
tft.println("Init. SD Karte");
if (!SD.begin(SD_CS)) {

Serial.println(F("Fehler!"));
tft.setTextColor(RED);
tft.println("Fehler");
return;
}

Serial.println(F("Karte OK!"));
tft.setTextColor(GREEN);
tft.println("Karte OK");
delay(2000);
}

void loop(void){

// Testdaten erzeugen ....
String dataString = "";
// Lese 3 analoge Pins aus und speichere in dataString
for (int analogPin = 0; analogPin < 3; analogPin++) {

int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {

dataString += ",";
}

}

File dataFile = SD.open("test.txt", FILE_WRITE);
tft.fillScreen(BLUE);
tft.setCursor(0, 0);
delay(50);
if (dataFile) {

digitalWrite(13, HIGH);
Serial.println(F("Schreibe test.txt auf SD Karte"));
tft.setTextSize(2);
tft.setTextColor(YELLOW);
tft.print("Schreibtest ");
tft.println(n);
tft.println("\nschreibe test.txt\nauf SD Karte\n\n");
dataFile.println(dataString);
tft.setTextColor(RED);
tft.println("schreibe ....\n\n");
dataFile.close();
Serial.println(dataString);
digitalWrite(13, LOW);
Serial.println("FERTIG - in 20 Sek\nerneuter Schreibtest");
tft.setTextColor(GREEN);
tft.println("...fertig\n\n");
n++;
tft.setTextColor(YELLOW);
tft.println("in 20 Sekunden\nerneuter Schreibtest ...\n\n");
delay(20000);
}

else {

tft.setTextColor(RED);
Serial.println("Fehler beim Oeffnen\nvon test.txt");
delay(5000);
}

}

Ausgabe:

 

Zum Seitenanfang

LED einfärbig

 

 

Ansicht

Pinbelegung / Schaltplan
LEDs können am Arduino direkt nur am Pin A13 angeschlossen werden.
Bei allen anderen Pins wird ein Vorwiderstand benötigt.

LED -> Arduino
--------------
Pin1 (+Anode) -> A13
Pin2 (-Kathode) -> GND

Beispielcode

/*
LED Test

LED -> Arduino
--------------
Pin1 (+Anode) -> A13
Pin2 (-Kathode) -> GND

*/

void setup() {
   pinMode(13, OUTPUT);
}
void loop() {
   digitalWrite(13, HIGH);
   delay(1000);
   digitalWrite(13, LOW);
   delay(1000);
}

Schaltung

Zum Seitenanfang

LED dreifärbig


Ansicht

Pinbelegung / Schaltplan

LED -> Arduino
--------------
Pin1 (+Anode ROT) -> D2
Pin2 (+Anode GRÜN) -> D3
Pin3 (+Anode BLAU) -> D4

Pin4 (-Kathode) -> Widerstand 270 Ohm -> GND

 

Beispielcode

/*
3 Farben LED Test

LED -> Arduino
--------------
Pin1 (+Anode ROT) -> D2
Pin2 (+Anode GRÜN) -> D3
Pin3 (+Anode BLAU) -> D4

Pin4 (-Kathode) -> Widerstand 150 Ohm -> GND

*/

const int PinRot=2;
const int PinGruen=3;
const int PinBlau=4;

void setup() {

pinMode(PinRot, OUTPUT);
pinMode(PinGruen, OUTPUT);
pinMode(PinBlau, OUTPUT);
}


void loop() {

digitalWrite(PinRot, HIGH);
delay(100);
digitalWrite(PinRot, LOW);

digitalWrite(PinGruen, HIGH);
delay(100);
digitalWrite(PinGruen, LOW);

digitalWrite(PinBlau, HIGH);
delay(100);
digitalWrite(PinBlau, LOW);
}

 

Schaltung

 

Zum Seitenanfang

RGB LED Farbwechsel

Ansicht

Pinbelegung / Schaltplan

LED -> Arduino
--------------
Pin1 (+Anode ROT) -> D3
Pin2 (+Anode GRÜN) -> D5
Pin3 (+Anode BLAU) -> D6

Pin4 (-Kathode) -> Widerstand 270 Ohm -> GND

ACHTUNG: Nicht alle Pins am Arduino sind stufenweise steuerbar.
Die steuerbaren Pins sind mit einem ~ gekennzeichnet.

Beispielcode

/*
RGB LED Farbwechsel

LED -> Arduino
==============
Pin1 (+Anode ROT) -> D3
Pin2 (+Anode GRÜN) -> D5
Pin3 (+Anode BLAU) -> D6

Pin4 (-Kathode) -> Widerstand 270 Ohm -> GND

*/
const int PinRot=3;
const int PinGruen=5;
const int PinBlau=6;

void setup() {
   pinMode(PinRot, OUTPUT);
   pinMode(PinGruen, OUTPUT);
   pinMode(PinBlau, OUTPUT);
}

void loop() {
   //Farbwechsel jeweils in 5er Schritten 255 = max

   for (int red = 0; red <= 255; red = red + 5){
      analogWrite(PinRot, red);
      delay(30);
   }
   for (int red = 255; red >= 0; red = red - 5){
     analogWrite(PinRot, red);
     delay(30);
   }

   for (int green = 0; green <= 255; green = green + 5){
     analogWrite(PinGruen, green);
     delay(30);
   }
   for (int green = 255; green >= 0; green = green - 5){
     analogWrite(PinGruen, green);
     delay(30);
   }

   for (int blue = 0; blue <= 255; blue = blue + 5){
     analogWrite(PinBlau, blue);
     delay(30);
   }
   for (int blue = 255; blue >= 0; blue = blue - 5){
     analogWrite(PinBlau, blue);
     delay(30);
   }

   //mischfarben
   for (int colorval = 0; colorval <= 255; colorval = colorval + 5){
     analogWrite(PinBlau, colorval);
     analogWrite(PinGruen, colorval);
     delay(30);
   }
   for (int blue = 255; blue >= 0; blue = blue - 5){
     analogWrite(PinBlau, blue);
     delay(30);
   }
   for (int red = 0; red <= 255; red = red + 5){
     analogWrite(PinRot, red);
     delay(30);
   }
   for (int green = 255; green >= 0; green = green - 5){
     analogWrite(PinGruen, green);
     delay(30);
   }
   for (int blue = 0; blue <= 255; blue = blue + 5){
     analogWrite(PinBlau, blue);
     delay(30);
   }
   for (int red = 255; red >= 0; red = red - 5){
     analogWrite(PinRot, red);
     delay(30);
   }
   for (int blue = 255; blue >= 0; blue = blue - 5){
     analogWrite(PinBlau, blue);
     delay(30);
   }

}

 

Schaltung