Anfängerfrage: Ausgabe von globaler Variablen

Hallo,

ich habe mir vor einigen Tagen einen Arduino Uno gekauft und jetzt spiele ich gerade ein bisschen damit rum :slight_smile: Bin also noch absoluter Anfänger und bin gerade auf ein Problem gestoßen…

Habt ihr eine Ahnung warum das nicht so wirklich will?

int global;

void setup() {
  Serial.begin(9600);
  
  global = 0;
}


void loop() {
  global += 5;
  Serial.println("Global: " + global);
  delay(1000);
}

Wenn ich es so machen würde:

Serial.println("Global: ");
Serial.println(global);

würde es gehen, doch mich würde interessieren warum es mit meiner Methode nicht geht?!?

Der Grund warum die andere Methode nicht gehen würde ist folgender:
Ich habe ein LCD Display mit einer Zeile und 16 Zeichen. Diese Zeile sind intern aber scheinbar 2x8 Zeichen.

Deshalb habe ich mir zum ausgeben eine kleine Funktion geschrieben:

void printOnLCD(String text)
{
  lcd.clear();
  int i;
  
  for (i = 0 ; i < text.length(); i++) {
    lcd.setCursor(i % 8, i / 8);
    lcd.print(text.charAt(i));
    if (i == 15) {
      break;
    }
  }
}

Und in die müsste jetzt Text rein der den Wert einer globalen Variable ausgibt.

Wenn ich den aber ausgeben will (nicht nur über das LCD sondern auch mittels Serial.println()) dann kommen da nur wilder ASCII Zeichen daher… :frowning:

Freue mich über jeden Tipp :slight_smile:

Danke und lg

Kurze Version: Es geht nicht, weil Du eine Zahl nicht zu einem char* hinzuzählen kannst.

In C++ ginge das, wenn man sich die Mühe machte, die Operatoren zu überladen, was aber beim Arduino nicht gemacht wurde.

Korman

Also habe ich keine Möglichkeit den Wert der globalen Variable auszugeben?

Du vermischt hier Probleme. Wenn du auf einer Zeile zwei Werte ausgeben willst, verwerden beim ersten Serial.print und beim zweiten Serilal.println. Damit wäre das gelöst.

Wegen der wilden ASCII-Zeichen, kontrolliere ob dir Geschwindigkeit auf deinem Serilamonitor ebenfalls 9600 ist. Wenn nicht, gibt es Datenmüll.

Und wegen des Problem einen char* mit einem int zu addieren, vergiss es. Das geht nur mit Klassen. Das ist kein Java oder Perl.

Und all dies hat nichts damit zu tun, ob eine Variable global oder lokal definiert ist.

Korman

Serial.println("Global: " + global);

Vermutlicherweise weil die Arduino IDE diese Version der Textausgabe nicht unterstützt !

Serial.print("Global: ");
Serial.println(global);

Macht schliesslich auch das gewünschte !

Nicht die IDE. Die Sprache. Die "Arduino Sprache ist C++ und da bedeutet das "+" eben etwas anders als in gewissen anderen Sprachen. D.h. in manchen Sprachen würde der Compiler die globale Variable nach String wandeln und dann mit dem anderen String verketten. In C++ ist das eben nicht so.

Udo