...zu soft für die Software...

Hallo Gemeine...

irgendwie verstehe ich die Welt der Bit´s nicht mehr...ich dachte immer lesen und schreiben reicht um sich Programierer zu nennen... :fearful:

Hm, war wohl nix....
wer den Fehler findet darf mich zwei mal Trottel nennen ...pro Fehler. :grin:

Also, warum "geht" das nicht...hab doch versucht alles gut "abzukupfern"....und mir fast den Sonntag damit versaut ... :cry:

-----------
/* 

// # Update the library and sketch to compatible with IDE V1.0 and earlier

// # Description:
// # The sketch for using LCD12864 in parallel mode

LCD  Arduino
RS = 17; Analog Pin3
RW = 16; Analog Pin2
EN = 18; Analog Pin4
D0  = 8; 
D1  = 9;
D2  = 10; 
D3  = 11; 
D4  = 4;
D5  = 5; 
D6  = 6; 
D7  = 7;
PIN15 PSB = 5V;
*/

#include "LCD12864R.h"
#define AR_SIZE(a) sizeof( a ) / sizeof( a[0] )

unsigned char show0[]="erster Text";
unsigned char show1[]="erster Text";
unsigned char show2[]="erster Text";
unsigned char show3[]="erster Text";

unsigned char show4[]="erster Text2";
unsigned char show5[]="erster Text2";
unsigned char show6[]="erster Text2";
unsigned char show7[]="erster Text2";


void setup()
{
 LCDA.Initialise(); // INIT SCREEN
 delay(100);
}

void loop(){
 LCDA.CLEAR();//Clear screen
 
 LCDA.DisplaySig(0,0,0x20);//show words
 LCDA.DisplayString(0,0,show0,AR_SIZE(show0));//LOGO
 LCDA.DisplayString(1,0,show1,AR_SIZE(show1));//LOGO
 LCDA.DisplayString(2,0,show2,AR_SIZE(show2));//LOGO
 LCDA.DisplayString(3,0,show3,AR_SIZE(show3));//LOGO
  delay(4000);
  
 LCDA.CLEAR();//Clear screen

 LCDA.DisplayString(0,0,show0,AR_SIZE(show4));//LOGO
 LCDA.DisplayString(1,0,show1,AR_SIZE(show5));//LOGO
 LCDA.DisplayString(2,0,show2,AR_SIZE(show6));//LOGO
 LCDA.DisplayString(3,0,show3,AR_SIZE(show7));//LOGO
 delay(4000);
 
 while(3);
}


-----------

Strings sind char, nichts unsigned char

Die Länge eines Strings bekommst du mit eigentlich strlen(). sizeof() liefert dir auch die Größe eines Arrays (und wird zur Compile-Zeit berechnet), aber bei Strings zählt da auch der Null-Terminator dazu, d.h. es ist eins größer als die Anzahl der Buchstaben. Kann man hier auch verwenden, aber man sollte den Unterschied kennen.

sizeof(array) / sizeof(element) ist bei Strings sinnlos, da char hier immer nur ein Byte große sind

Ansonsten packe Code bitte in [.code][./code] Tags (ohne den Punkt!)

Serenifly:
Strings sind char, nichts unsigned char

Die Länge eines Strings bekommst du mit eigentlich strlen(). sizeof() liefert dir auch die Größe eines Arrays (und wird zur Compile-Zeit berechnet), aber bei Strings zählt da auch der Null-Terminator dazu, d.h. es ist eins größer als die Anzahl der Buchstaben. Kann man hier auch verwenden, aber man sollte den Unterschied kennen.

sizeof(array) / sizeof(element) ist bei Strings sinnlos, da char hier immer nur ein Byte große sind

Ansonsten packe Code bitte in [.code][./code] Tags (ohne den Punkt!)

danke für die schnelle Antwort.....

Ich verstehe z.Z. nur die Hälfte.....(Anfänger)

Aber einen Fehler fand ich selbst nochraus....hab die Zahlen bei show1,ARxxx falsch gesetzt ....aber die Zeile

#define AR_SIZE(a) sizeof( a ) / sizeof( a[0] )

verstehe ich noch nicht....

Lass das weg. Das ist hier völlig fehl am Platz und verwirrt nur.

sizeof(a) liefert dir die Größe des gesamten Arrays in Bytes. sizeof(a[0]) liefert die Größe des ersten Elements. Damit berechnet man also die Anzahl der Elemente in einem Array. Das braucht man wenn die Anzahl der Elemente in einem Array aus ints oder structs haben möchte. Da dann die Elemente jeweils größer als 1 Byte sind. Hier ist aber jedes Element nur 1 Byte groß. Es reicht also strlen(show0) oder sizeof(show0) - 1

Serenifly:
Lass das weg. Das ist hier völlig fehl am Platz und verwirrt nur.

sizeof(a) liefert dir die Größe des gesamten Arrays in Bytes. sizeof(a[0]) liefert die Größe des ersten Elements. Damit berechnet man also die Anzahl der Elemente in einem Array. Das braucht man wenn die Anzahl der Elemente in einem Array aus ints oder structs haben möchte. Da dann die Elemente jeweils größer als 1 Byte sind. Hier ist aber jedes Element nur 1 Byte groß. Es reicht also strlen(show0) oder sizeof(show0) - 1

gibt es nicht eine einfachere Variante um nur ein "paar" Textseiten zu schreiben...
ab (...char show13) gibt es wilde Zeichen ...ich denke das ich da irgendwie erst die größe des Variablen Arrays definieren muß ?

Hast Du eine Idee?

LG Dumpf

Ich hab mal drübergeschaut, aber nicht gesehen, was der Fehler sein soll

Die Diskussion über sizeof und die Anzahl Elemente eines Array, oder ob ein text nun aus signed oder unsigned char besteht, ist ja mehr zum Verständnis oder zur Ablenkung.

Ein Fehler oder falsche Erwartungen an den Sketch hängen (geraten) vielleicht zusammen mit

#include "LCD12864R.h"

ab (...char show13) gibt es wilde Zeichen ...ich denke das ich da irgendwie erst die größe des Variablen Arrays definieren muß ?

show13 sehe ich nicht. Die Größe eines Arrays wird automatisch definiert, ist aber nicht beliebig...

char show13[ ] = "ABCDEFGHI"; // sind 10 Byte

Es gibt wenig Hinweise und üble Fehler, wenn du die RAM Grenzen ( 2k beim Uno ) sprengst.

Wobei die Bibliothek etwas seltsam ist, da es bei Strings ja eigentlich nicht nötig sein sollte die Größe anzugeben. Aber das sollte keinen katastrophalen Fehler verursachen.

Was ist eigentlich der Fehler bei der Sache? Du sagst "geht nicht", aber das kann vieles bedeuten...

michael_x:
Ich hab mal drübergeschaut, aber nicht gesehen, was der Fehler sein soll

Es gibt wenig Hinweise und üble Fehler, wenn du die RAM Grenzen ( 2k beim Uno ) sprengst.

Genau das könnter der Fehler sein...denn, es tritt immer an "ca. der gleichen Stelle im Text "auf .
Quasi immer wenn der Text in den Strings in der Summe zu groß wird.

Ich werde es mal mit dem Mega testen...wenn es dann nicht mehr vorkommt sind wir dem Fehler auf der Spur.

erst mal DANKE....!! für die Anregungen..

Hiermit kannst du dir den freien Speicher (in Bytes) berechnen und dann z.B. auf Serial ausgeben:

int getFreeRAM() 
{
  extern int __heap_start, *__brkval; 
  int v; 
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Serenifly:
Hiermit kannst du dir den freien Speicher (in Bytes) berechnen und dann z.B. auf Serial ausgeben:

int getFreeRAM() 

{
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

fehlt da eine Zeile ..oder wie/wo wird es "ausgegeben"...?

Das ist nur zum Berechnen des Speichers. Ausgabe kannst du z.B. in setup() machen

So z.B.

Serial.print("Der RAM-Rest: ");
Serial.println(getFreeRAM());

:slight_smile:

Serenifly:
Das ist nur zum Berechnen des Speichers. Ausgabe kannst du z.B. in setup() machen

da muss ich noch üben um es seriel zur anzeige zu bringen :slightly_frowning_face:

uxomm:
So z.B.

Serial.print("Der RAM-Rest: ");

Serial.println(getFreeRAM());



:-)

DANKE !!! :slight_smile:

NEEEEE am Speicher lag es nicht ABER ich denke nun zu wissen das es mit der Längenberechnung des Strings und dem AR_SIZE(a) zu tun hat.

DENN: Wenn ich jeweils das letzte Zeichen in der Zeile weglasse klappt alles…wenn ich die Zeile voll schreibe gibt es Fehler ab der zweiten Zeile in jedem der vierer Blöcke(also 4 Zeilen)

getestet mit diesem Sketch

/*

 // # Update the library and sketch to compatible with IDE V1.0 and earlier
 // # The sketch for using LCD12864 in parallel mode

 LCD <> Arduino
 RS = 17; Analog Pin3
 RW = 16; Analog Pin2
 EN = 18; Analog Pin4
 D0  = 8;
 D1  = 9;
 D2  = 10;
 D3  = 11;
 D4  = 4;
 D5  = 5;
 D6  = 6;
 D7  = 7;
 PIN15 PSB = 5V;
 */

#include "LCD12864R.h"
#define AR_SIZE(a) sizeof( a ) / sizeof( a[0] )

unsigned char show0[] = "Zeile11111111111";
unsigned char show1[] = "Zeile22222222222";
unsigned char show2[] = "Zeile33333333333";
unsigned char show3[] = "Zeile44444444444";

unsigned char show4[] = "2Zeile1111111111";
unsigned char show5[] = "2Zeile2222222222";
unsigned char show6[] = "2Zeile3333333333";
unsigned char show7[] = "2Zeile4444444444";

void setup()
{
  LCDA.Initialise(); // INIT SCREEN
  delay(100);
}
void loop() {

  while (1) {
    LCDA.CLEAR();//Clear screen


    LCDA.DisplaySig(0, 0, 0x20); //show words
    LCDA.DisplayString(0, 0, show0, AR_SIZE(show0));
    LCDA.DisplayString(1, 0, show1, AR_SIZE(show1));
    LCDA.DisplayString(2, 0, show2, AR_SIZE(show2));
    LCDA.DisplayString(3, 0, show3, AR_SIZE(show3));
    delay(3000);



    LCDA.DisplaySig(0, 0, 0x20); //show words
    LCDA.DisplayString(0, 0, show4, AR_SIZE(show4));
    LCDA.DisplayString(1, 0, show5, AR_SIZE(show5));
    LCDA.DisplayString(2, 0, show6, AR_SIZE(show6));
    LCDA.DisplayString(3, 0, show7, AR_SIZE(show7));
    delay(3000);

  }
}

HURA !!!!!
Fehler gefunden..... :smiley:

Wer lesenkann ist klar im Vorteil....
Die Antwort hatte Serenifly schon gegeben.. :grin:
--bei Strings zählt da auch der Null-Terminator dazu, d.h. es ist eins größer als die Anzahl der Buchstaben.--

Also hab ich einfach mal eins abgezogen in #def Zeile

#define AR_SIZE(a) sizeof(a)-1 / sizeof( a[0] )

nun ist alles palletti und ich bin müde... :sleeping:

DANKE an alle Ratgeber !
LG

:slight_smile:

Wie gesagt ist diese Library aber auch etwas seltsam. Wenn man da NULL als Zeichen ausgeben will, sollte da trotzdem nichts abstürzen. Außerdem ist es komisch, dass man überhaupt die Größe übergeben soll. Der String ist ja terminiert, wodurch die Funktion das Ende selbst bestimmen könnte.

Besser ist es du machst es so:

#define STR_LEN(str) sizeof(str) - 1

Dann ist klar was gemeint ist

Wie gesagt ist diese Library aber auch etwas seltsam

Da gehts den Libraries wie den Menschen: Egal wie verkorkst du bist, irgend jemand liebt dich :wink:

michael_x:
Da gehts den Libraries wie den Menschen: Egal wie verkorkst du bist, irgend jemand liebt dich :wink:

meine Mutter ... :grin:

Hallo :’(

Da gehts den Libraries wie den Menschen: Egal wie verkorkst du bist, irgend jemand liebt dich :wink:

oder auch nicht, da wird man öfter nach einer Banalen Frage mit den Worten abgespeist

“Eigne dir Basiswissen an” oder

“Lerne das Programmieren”

Mit solchen Antworten kann man schon verzweifeln, denn nicht jeder versteht die

Programmiersprache sofort und braucht einige Denkanstöße.

Da steigt der Frust ins unendliche und man könnte das ganze ARDUINO zeug in die Tonne klopen.

MFG an die Großen Programmier-Götter

Martin

PS: Ich weiß das gehört nicht unbedingt zu diesen Trade,

aber es wäre einmal ein kleiner Denkanstoß