Go Down

Topic: 4 LCD's an Arduino ? (Read 2573 times) previous topic - next topic

benny123


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. ;)



Da gebe ich dir recht, nur habe ich den Ausschnitt mit Säge und Feile raus gearbeitet und so fällt es nicht auf , das nicht alles so 100 prozentig gerade ist :)

benny123



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 , wie bekomme ich die Arrays in den Flashspeicher , ich suche mir nämlich grade einen Ast !

Dank im voraus !

volvodani

Schau mal hier ist das ausgeführt
Progmem ist das zauberwort
http://www.arduino.cc/en/Reference/PROGMEM

Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

benny123

Vielen Dank !
Es funktioniert,aber nur um sicher zugehen sicher zugehen ,ist das so richtig

prog_char* Loks[61] ={"-------","Adler","AE3/6","AE 8/14"........};
prog_uint16_t Adressen[61] ={0,78,6,24,1,3,36,5,10,17.........};

volvodani

Code: [Select]

prog_char* Loks[61] PROGMEM ={"-------","Adler","AE3/6","AE 8/14"........};
prog_uint16_t Adressen[61] PROGMEM ={0,78,6,24,1,3,36,5,10,17.........};

Ich glaube es ist so Richtig.
Gruß
Der Dani
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

benny123

#20
Mar 15, 2013, 06:05 pm Last Edit: Mar 15, 2013, 06:08 pm by benny123 Reason: 1

Code: [Select]

prog_char* Loks[61] PROGMEM ={"-------","Adler","AE3/6","AE 8/14"........};
prog_uint16_t Adressen[61] PROGMEM ={0,78,6,24,1,3,36,5,10,17.........};

Ich glaube es ist so Richtig.
Gruß
Der Dani


Leider funktioniert das so nicht , wenn ich PROGMEM dazu schreibe , erscheint keine Lokbeschreibung auf dem Display
Im Programm übergebe ich die Daten an eine Variable
Code: [Select]

LCDText[0]=String(Loks[4];  // in dem Beispiel wäre das AE 8/14

//diese wiederum wird dann später ans LCD geschickt

lcd[1].print([0]);



Ich weiß nicht mehr weiter !
Gruß

benny123

Hab jetzt nochmal mit PROGMEM in einem Extra Sketch experimentiert , hier funktioniert es ,
Wenn ich das aber in meinem eigentlichen Sketch einbau ,geht's nicht !
Code: [Select]

#include <EEPROM.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <LiquidCrystal.h>
#include <avr/pgmspace.h>
#define NUM_LCD 4


LiquidCrystal lcd[NUM_LCD] = {
  LiquidCrystal(23, 24, 25, 29, 30, 31, 32),
  LiquidCrystal(23, 24, 26, 29, 30, 31, 32),
  LiquidCrystal(23, 24, 27, 29, 30, 31, 32),
  LiquidCrystal(23, 24, 28, 29, 30, 31, 32)};

prog_char* Loks[64] PROGMEM={
  "-------","Adler","AE3/6","AE 8/14","BR01","BR03","BR03 Stroml",  "BR05","BR10","BR17","Rheingold","BR18.1","BR38","BR41","BR50","BR52 grau","BR53","BR80","BR81","BR85",
  "BR86","BR89","BR93","BR96","BR120","BR194", "BR212Trak","BR360","CargoSpri","DR212","E04","E19 blau","E19 Rot","E40","E52","E69","E70","E91","E103","E118b ",
  "E120","E151","Geisling","Heizerlok","Koef","Krokodil","Museumlok","ICE","Pendolino","Rottenkraft","Schienenbus","SVT137","Torflok","Unicef","V36","V100.20","VT11.5","V160 grau","V160 rot","V221",
  "Zeppelin","----","----","----"   };

prog_uint8_t Adressen[64] PROGMEM={
  0,78,6,24,1,3,36,5,10,17,18,17,36,41,50,0,53,79,78,8,
  66,76,73,9,12,64,22,60,70,20,4,74,19,40,52,24,70,67,33,19,
  12,51,23,46,3,22,19,2,47,3,60,0,70,17,38,10,115,47,16,21,
  24,0,0,0          };

String LCDText[5];

void setup(){
  for (int i = 0; i < NUM_LCD; i++){
    lcd[i].begin(20, 4);
    lcd[i].clear();
  }
  LCDText[0]=String(Loks[5])+"/"+String(Adressen[5]); // Übergabe an die Variable LCDText[]
  lcd[0].setCursor(2, 0);
  lcd[0].print(LCDText[0]);// Ausdruck
}
void loop(){

}

Go Up