Pages: [1] 2   Go Down
Author Topic: 4 LCD's an Arduino ?  (Read 2123 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo , ich betreibe vier LCD's an einem Arduino mit folgendem Code , das funktioniert soweit ganz gut.

// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd1(12, 8, 5, 4, 3, 2);
LiquidCrystal lcd2(12, 9, 5, 4, 3, 2);
LiquidCrystal lcd3(12, 10, 5, 4, 3, 2);
LiquidCrystal lcd4(12, 11, 5, 4, 3, 2);


void setup() {
// set up the LCD's number of rows and columns:
lcd1.begin(16, 2);
lcd2.begin(16, 2);
lcd3.begin(16, 2);
lcd4.begin(16, 2);

// Print a message to the LCD.
lcd1.setCursor(0, 1);
lcd1.print("1");
lcd2.setCursor(0, 1);
lcd2.print("2");
lcd3.setCursor(0, 1);
lcd3.print("3");
lcd4.setCursor(0, 1);
lcd4.print("4");
}

void loop() {

}


um aber den Code möglichst klein zuhalten , ist meine Frage , ob man die LCD's-Bezeichnung in einem Array packen kann ? So stelle ich mir den Code dann vor:


// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins

for (int i=1; i <= 4; i++){
LiquidCrystal lcd(12,7+i, 5, 4, 3, 2);
}

void setup() {
// set up the LCD's number of rows and columns:
for (int i=1; i <= 4; i++){
lcd.begin(16, 2);
}

// Print a message to the LCD.
for (int i=1; i <= 4; i++){
lcd.setCursor(0, 1);
lcd.print(i);
}

void loop() {

}

Ich hoffe , mit meiner laienhaften Erklärung kommt einer klar und hat eine Lösung für mich !

Gruß
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sollte so funktionieren:
Code:
#include <LiquidCrystal.h>

#define NUM_LCD 4

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd[NUM_LCD] = {LiquidCrystal(12,  8, 5, 4, 3, 2),
                              LiquidCrystal(12,  9, 5, 4, 3, 2),
                              LiquidCrystal(12, 10, 5, 4, 3, 2),
                              LiquidCrystal(12, 11, 5, 4, 3, 2)};

void setup()
{
  // set up the LCD's number of rows and columns
  for (int i = 0; i < NUM_LCD; i++)
    lcd[i].begin(16, 2);
   
  // Print a message to the LCD
  for (int i = 0; i < NUM_LCD; i++)
  {
    char num[5];
    itoa(i + 1, num, 10);
    lcd[i].setCursor(0, 1);
    lcd[i].print(num);
  }
}

void loop()
{
}
Logged

_______
Manfred

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Manfred , vielen Dank , funktioniert perfekt !
Gruß Rainer
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Na das ist doch schön.

Jetzt würde mich aber doch noch interessieren, für welche Anwendung Du vier Displays am Arduino benötigst?  smiley-lol
Logged

_______
Manfred

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo , ich hab mir ein Pult für eine Eisenbahn-Steuerung gebaut.
Das ursprüngliche Projekt "Maerklino" habe ich im rocrail Forum gefunden,
da habe ich mir ein paar Handregler mit Display's drum herum konstruiert.
Vorher hatte ich den Code für die Display's viermal geschrieben , dank Deiner Hilfe ,
muss ich jetzt alles was mit den Display's zusammen hängt nur noch einmal schreiben.
Ersparnis jetzt schon knapp 2kBytes gegenüber der vorherigen Version .


* maerklino_108.jpg (714.36 KB, 2560x1440 - viewed 103 times.)
« Last Edit: March 12, 2013, 11:51:35 am by benny123 » Logged

Wien
Offline Offline
Edison Member
*
Karma: 28
Posts: 1934
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hi,

alle achtung, schöne arbeit...

gruß stefan
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank !
An dieser Stelle nochmal ein Dank an "janvonnebenan" aus dem Rocrail Forum , der das Märklin Protokoll umgesetzt hat !
Gruß
« Last Edit: March 12, 2013, 12:50:05 pm by benny123 » Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wau, find ich super. Gefällt mit gut, sieht aus wie gekauft.
Logged

_______
Manfred

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielen Dank ,ich stehe aber da noch vor einem Problem ,
im Sketch ist eine Liste mit Loks und deren zugehörigen Adressen ( über die die jeweilige Lok angesprochen wird )
sieht wie folgt aus

String Lok[80];
int Adresse[80];

void setup(){
Lok[1]="BR50";      // nicht alphabetisch sortiert
Adresse[1]=50;
Lok[2]="BR38";
Adresse[2]=38;
Lok[3]="ICE";
Adresse[3]=17;
Lok[4]="BR52";
Adresse[4]=52;
Lok[5]="E19";
Adresse[5]=19;   //usw
}

Die Liste kann ich in dem Display einblenden ( jeweils 4 Loks ) und durchblättern !

Jetzt meine Frage :
Wie kann der Arduino eine alphabetische Reihenfolge der Loks erstellen?
Gruß

« Last Edit: March 12, 2013, 01:48:30 pm by benny123 » Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Naja, wenn die Loks im Programm fest codiert sind (wie in Deinem setup() Beispiel) würde ich sie dort einmal von Hand sortieren.
Sollten die Namen irgendwo dynamisch herkommen, brauchst Du eine Sortierfunktion die Anhand der Loknamen sortiert.
Das ist zwar möglich, aber nicht ganz trivial, da Du beim "Vertauschen" von zwei Loks beim Sortieren auch den anderen Parameter (Adresse) mit tauschen musst.
Zusätzlich brauchst Du eine Vergleichsfunktion für C-Strings.
Ansonsten schau Dir mal folgendes an:
http://openbook.galileocomputing.de/c_von_a_bis_z/022_c_algorithmen_003.htm#mja4d6cf19b9113d221e26e0a19eb4148c
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo , mittlerweile habe ich ca. 70 Loks , die auch einigermassen sortiert sind , kommt aber noch eine dazu ,
die mittendrin hängt , is es doch mühselig , alles wieder anzupassen . Ich schau mir mal deinen Link an , Vielen Dank
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Na aber das ist doch einfach.
Wenn Du die Arrays anders definierst, sollte das gehen:
Code:
//3 Loks
const char* LOK[3] = {"BR38","BR50","BR52"};
const int Adresse[3] = {38,50,52};
statt dessen dann 4 Loks (hier als Beispiel mal die 42 einsortiert)
Code:
const char* LOK[4] = {"BR38","BR42","BR50","BR52"};
const int Adresse[4] = {38,42,50,52};
Damit brauchst Du keine Indizes hochzählen. Wenn der Speicher knapp wird, kannst Du die Arrays auch im Flash-Speicher ablegen, dann dümpeln die eh unveränderlichen Daten nicht im knappen RAM rum.
Logged

Germany
Offline Offline
Edison Member
*
Karma: 48
Posts: 2338
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Erst mal vorab: Tolles Teil!  smiley-cool

Persönlich bin ich auch kein großer Freund von Sortieralgorithmen auf dem Arduino. Wie wäre es, das Ordnen nach wie vor per Hand zu machen und die Liste in einer Textdatei auf einer SD-Karte abzulegen? Dann könnte man die Daten leicht am PC editieren und zum Start des Mikrocontrollers geordnet in ein Array einlesen.
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Na aber das ist doch einfach.
Wenn Du die Arrays anders definierst, sollte das gehen:
Code:
//3 Loks
const char* LOK[3] = {"BR38","BR50","BR52"};
const int Adresse[3] = {38,50,52};
statt dessen dann 4 Loks (hier als Beispiel mal die 42 einsortiert)
Code:
const char* LOK[4] = {"BR38","BR42","BR50","BR52"};
const int Adresse[4] = {38,42,50,52};
Damit brauchst Du keine Indizes hochzählen. Wenn der Speicher knapp wird, kannst Du die Arrays auch im Flash-Speicher ablegen, dann dümpeln die eh unveränderlichen Daten nicht im knappen RAM rum.


Hallo , ich denke , hier der Vorschlag ist am einfachsten umzusetzen, Vielen Dank

Der Spaß hat jetzt keine 100,- Euro gekostet , lediglich einen Haufen Zeit smiley
Hier nochmal ein neues Bild , mit Beschriftung !



* DSC03150 (Mittel).JPG (161.66 KB, 1155x768 - viewed 45 times.)
« Last Edit: March 13, 2013, 05:31:26 am by benny123 » Logged

Germany
Offline Offline
Edison Member
*
Karma: 48
Posts: 2338
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich finde das Steuerpult klasse, hätte aber die Ausschnitte für die Displays nur so groß gemacht wie die sichtbare Displayfläche. Sahnehäubchen wäre dann die unsichtbare Befestigung der LCDs. smiley-wink
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Pages: [1] 2   Go Up
Jump to: