Wie kann ich bei der Textausgabe einen Zeilenumbruch erzeugen?

Hallo allerseits,

ich würde gerne bei der Textausgabe einen Zeilenumbruch erzeugen. Aber bei meinem ersten Versuch wird „\n“ als Plaintext auf dem Display ausgegeben.
Bei meinem zweiten Versuch (siehe Bild) bekomme ich einen Compiler-Fehler.

Wie muss ich das richtig machen?

Mit besten Grüßen,

Jörn Behre

Mein erster Versuch sah so aus:

Ich habe unter

etwas zu „multiline text input fields“ gefunden. Kann man die für die senseBox nutzen?

Hi @jbehre,

das Display kann nicht mit Zeilenumbrüchen umgehen. Die Zeilen können aber über die Koordinaten eingestellt werden. In Schriftgröße 1 benötigt eine Zahl/Buchstabe 8 Pixel in der Höhe, in Schriftgröße 2 16 Pixel…

Das wäre eine Möglichkeit:

Die einfachste Möglichkeit, um 2 Messwerten direkt anzuzeigen ist über den folgenden Block:

image

Viele Grüße

Mario

Hi @mario,

erst einmal Danke für Deine Vorschläge. Der erste ist allerdings recht umständlich und aufwendig. Und der zweite ist elegant für 2 Messwerte, aber nicht unbedingt für beliebigen Text.

Und so ganz wehrlos gegenüber Zeilenumbrüchen kann das Display nicht sein, denn wenn eine Zeile länger ist als das Display breit, dann wird sie ja auch umgebrochen, und zwar, soweit ich das bisher beobachtet habe, immer zwischen zwei Zeichen. Kann man den Mechanismus, der da dahintersteckt, nicht dafür nutzen, den Text auch auf das „Stichwort“ „\n“ hin umzubrechen?

Und was hat es denn nun mit

auf sich? Ich habe nicht ganz verstanden, ob sich das Text-Umbrechen dort nur auf den Text im Blockly-Block bezieht, oder auch auf den Ort, wo der Text am Ende hingeschrieben wird.

Viele Grüße,

Jörn

Hi Jörn,

für das Display wird folgende https://github.com/adafruit/Adafruit_SSD1306 Software Bibliothek verwendet. Dort ist kein wirklicher Linebreak aufgeführt.

Bei dem Beispiel von Blockly handelt es sich um ein Text Input Feld, welches mehrere Zeilen ermöglicht und einen Linebreak durch ein \n zurückgibt. Entscheidend ist hierbei der generierte Code. Hier habe ich in der Adafruit Bibliothek leider keine Möglichkeit gefunden einen wirklichen Linebreak durchzuführen.

Viele Grüße
Mario

Hi @mario,

mir ist aufgefallen, dass im resultierenden Arduino-Code der Backslash meines als newline gedachten „\n“ escaped wird (siehe Bild):

Gibt es eine Möglichkeit, den durch Blockly erzeugten Arduino-Code manuell zu verändern, bevor er kompiliert wird? Dann könnte ich das durch Blockly erzeugte „String(“\n")" vor dem Kompilieren mal testweise auf „String(“\n")" zurücksetzen.

Nicht wundern,
ich habe mich im zweiten Teil des Textes nicht verschrieben. Der doppelte Backslash ist beim Hochladen auf einen reduziert worden. Aber im Bild ist zu sehen, was ich meine.

Grüße Jörn

Hi @jbehre,

ich hab mir das ganze nochmal angeschaut. Folgender Code funktioniert:

#include <Wire.h>
#include <Adafruit_GFX.h> // http://librarymanager/All#Adafruit_GFX_Library
#include <Adafruit_SSD1306.h> // http://librarymanager/All#Adafruit_SSD1306
#include <senseBoxIO.h>


#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);





void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();



}


void loop() {
  display.setCursor(0,0);
  display.setTextSize(1);
  display.setTextColor(WHITE,BLACK);
  display.print("Test");
  display.println("  Test");
  display.println("Test");
display.display();

  display.setCursor(0,32);
  display.setTextSize(2);
  display.setTextColor(WHITE,BLACK);
  display.println("Test2");
  display.println("Test3");
display.display();


}

über display.println("test"); wird etwas auf dem Display geschrieben und anschließend findet ein Zeilenumbruch statt. Den Programmcode als kompilierte Datei kannst du dir hier: sciebo herunterladen.

Grundsätzlich kannst du den Arduino Code natürlich aus Blockly kopieren und in der Arduino IDE verändern. → Bald geht das ganze auch direkt in Blockly, ein Preview dazu findest du hier: https://deploy-preview-142--blockly-react.netlify.app/ (Im Menü an der Seite unter Code Editor)

Um die Struktur des Programmcodes zu ermöglichen muss ich allerdings die Blöcke etwas umbauen. Ich versuche das aber mal was!

Viele Grüße

Mario

So sieht die Ausgabe des obigen Codes aus.

WOW, Du werkelst sogar am Sonntag an senseBox Blockly :smiley:

Ich habe den kompilierten Code heruntergeladen und er funktioniert auch bei mir :smiley: Auch den Code-Editor habe ich gefunden. Allerdings komme ich von da nur via Browser-Zurück-Button wieder zur Standard-Ansicht. Und dort ist dann zwar mein zuvor erstelltes Blockly-Projekt noch da, aber der Name des Projekts ist dann auf etwas zufälliges zurückgesetzt. Das gleiche Verhalten zeigt sich, wenn ich über das Menü zu den Einstellungen gehe (obwohl da schon ein Back-Button existiert).
Das ist allerdings schon besser, als bei der „normalen“ Beta-Version (https://blockly-react.netlify.app/). Denn dort wird beim Zurückkehren von den Einstellungen die Standard-Ansicht ganz zurückgesetzt, sodass etwaige geöffnete Blockly-Projekte verloren gehen.
Ist diese Deploy-Leiste am unteren Bildrand ein neues Feature oder dem Entwicklungsstadium geschuldet? Falls sie ein Feature ist, sie überdeckt in ihrer ausgebreiteten Variante den Menü-Punkt Settings und das Cookie-Banner.

Grüße
Jörn

PS:
Ich habe schon lange nicht mehr mit soviel Spaß herumgebastelt. Daher versuche möglichst viel (hoffentlich nützliches) Feedback zu geben. Ich habe nur Sorge, ich könnte für die anderen Besucher dieser Seite wie eine „Nörgel-Tante“ wirken … → Feedback eventuell via E-Mail?

Die Verwendung von „\n“ als newline fonktioniert auf diese Weise auch.
Also
display.println(" Test");
ist äquivalent zu
display.print(" Test\n");