Versteh jetzt nicht was Du meinst..
Das '\n' ist doch nur ein Zeilenumbruch... ?!
Versteh jetzt nicht was Du meinst..
Das '\n' ist doch nur ein Zeilenumbruch... ?!
Ja, ich meinte auch '\0' als Zeichenkettenabschluß.
Ich fürchte das müsstest Du mir etwas genauer erklären...
Kann Dir gerade nicht folgen...
"10.06\0" sind sechs Zeichen, nicht fünf. Jede Zeichenkette ist um den Zeichenkettenabschluß länger als die sichtbaren Zeichen.
Aaaaahhh...
Jetzt ist der Groschen gefallen...
Danke Dir...
Hab den
char bufx[x]
jetzt um 1 erhöht, jetzt klappt's auch mit dem Rahmen...
Um Überläufe zu vermeiden, verwende ich lieber snprintf mit Überprüfung der Pufferlänge.
Dein Problem liegt hier:
float voltage12 = sensor12Value * (15.0 / 1023.0); // Wert über Spannungsteiler mit 1k 2K Verhältnis (Liegt aktuell am 3.3V Pin des Nano an
Du verwendest float, um zwei Stellen hinter dem Komma anzeigen zu können. Bei einem ESP32 (liegt hier gerade für ein anderes Thema) wäre das OK, weil snprintf dann auch %f versteht. Bei einem Nano würde ich lieber bei Interger bleiben. Also die Rechnung mit 100 multiplizieren und dann voltage12 / 100 und voltage12 % 100 mit einem Punkt dazwischen anzeigen.
Eher u8g2_font_6x10_tr, denn die letzten Buchstaben sind spannend.
Jupp... Hab schon gelesen, das float dem Nano etwas mehr Rechenleistung abverlangt..
aber das man das so mit int machen kann war mir nicht bekannt..
Wenn ich Dich also richtig verstanden habe, sollte ich erstmal den analogwert mit 100 Multiplizieren
int sensor12Value = analogRead(A6);
int sensor5Value = analogRead(A7);
int voltage12 = sensor12Value * 100 * (15 / 1023);
int voltage5 = sensor5Value * 100 * (5 / 1023);
und dann einfach nen Punkt dazwischen knallen, der um 2 Stellen nach links versetzt ist.
// öhm... wie genau?
char buf1[6];
//sprintf (buf1, "%d", voltage12);
dtostrf(voltage12, 4, 2, buf1);
char buf2[6];
//sprintf (buf2, "%d", voltage5);
dtostrf(voltage5, 4, 2, buf2);
Inwiefern?
Da meckert er...
'u8g2_font_6x10_tr' was not declared in this scope
// include libs
#include <LCDMenuLib2.h>
#include <U8glib.h>
#include <Wire.h>
// *********************************************************************
// U8GLIB
// *********************************************************************
// setup u8g object, please remove comment from one of the following constructor calls
// IMPORTANT NOTE: The following list is incomplete. The complete list of supported
// devices with all constructor calls is here: https://github.com/olikraus/u8glib/wiki/device
//U8GLIB_ST7920_128X64 u8g(52, 51, 53, U8G_PIN_NONE);
U8GLIB_SSD1309_128X64 u8g(0x3C); //(options);
//u8g_dev_ssd1309_128x64_i2c;
// settings for u8g lib and LCD
#define _LCDML_DISP_w 128 // LCD width
#define _LCDML_DISP_h 64 // LCD height
// font settings
#define _LCDML_DISP_font u8g2_font_6x10_tr //u8g_font_6x13 // u8glib font (more fonts under u8g.h line 1520 ...)
#define _LCDML_DISP_font_w 6 //6 // font width
#define _LCDML_DISP_font_h 10 //13 // font height
// cursor settings
#define _LCDML_DISP_cursor_char "\273" // cursor char
#define _LCDML_DISP_cur_space_before 2 // cursor space between
#define _LCDML_DISP_cur_space_behind 4 // cursor space between
// menu position and size
#define _LCDML_DISP_box_x0 0 // start point (x0, y0)
#define _LCDML_DISP_box_y0 0 // start point (x0, y0)
#define _LCDML_DISP_box_x1 128 // width x (x0 + width)
#define _LCDML_DISP_box_y1 64 // hight y (y0 + height)
#define _LCDML_DISP_draw_frame 1 // draw a box around the menu
// scrollbar width
#define _LCDML_DISP_scrollbar_w 5 // scrollbar width (if this value is < 3, the scrollbar is disabled)
Hab noch n Dokument bekommen, da stehen dann auch noch teils widersprüchliche aussagen drin...
Magst du das hier auch posten ?
Auf der Website kann ich nur lesen, das das Display nur 3,3V verträgt.
Mit 5V wäre mir das zu unsicher.
Du hast nur eine Funktion hier gezeigt und ich war von der Bibliothek U8g2 ausgegangen, denn bei U8glib lese ich "There will be no more development for U8glib. Please use u8g2." Ein Mißverständnis.
Du solltest umsteigen ![]()
Du solltest umsteigen
OK...
Aber was machen denn diese beiden Buchstaben so interessant?
Magst du das hier auch posten ?
2.42-7pin-SPEC(ssd1309)pcbv4.1.pdf (991.0 KB)
Ok, danke.
Das steht auch schon genau so auf der Website.
Und auch hier lese ich, max. 3,3V für dein Display.
Auch wenn es bei dir schon länger funktioniert hat, du solltest es besser ändern.
Max. 3,3V für dein Display.
Auch wenn es bei dir schon länger funktioniert hat, du solltest es besser ändern.
Max. 3,3V für dein Display.
OK überredet...
Bau ich halt noch nen Spannungswandler dazwischen & irgendwo hab ich auch noch nen Schwung Levelshifter rumliegen...
Damit machst du nichts falsch und dein Display wird es dir danken. ![]()
HV ist 5 Volt, LV ist 3,3 V
Hier findest du Schaltungen.
Danke...
Zur Positionierung des LevelShifters...
Eher nah am Display oder eher nah zum Nano oder total rille?
Hatte mal einen auf nem BreadBoard im Einsatz, da war das egal wo er hing... Kurze Leitungswege...
Im "Feld" hab ich noch nie einen eingesetzt...
Logikspannung: Die "Datenblätter" sind m. E. Müll, aber mit Levelshifter bist Du auch langfristig auf der sicheren Seite ![]()
Position LevelShifter: Eigentlich rille, denn lang dürfen die Kabel sowieso nicht sein, aber 5 V sind etwas störfester, daher eher näher beim Display.
Textformatierung: Viele Wege führen nach Rom, beim Nano würde ich Speicher sparen wollen. Daher einmal buf[22] mit voller Zeilenlänge. Anstelle float uint32_t (ungetestet):
uint16_t sensor12Value = analogRead(A6);
uint16_t sensor5Value = analogRead(A7);
uint32_t voltage12 = sensor12Value * 100UL * 15 / 1023;
uint32_t voltage5 = sensor5Value * 100UL * 5 / 1023;
char buf[22];
snprintf( buf, sizeof(buf), "12V Rail: %2lu.%02lu V", voltage12 / 100, voltage12 % 100 );
u8g2.drawStr( 3, _LCDML_DISP_font_h * 5, buf);
snprintf( buf, sizeof(buf), " 5V Rail: %2lu.%02lu V", voltage5 / 100, voltage5 % 100 );
u8g2.drawStr( 3, _LCDML_DISP_font_h * 6, buf);
Ha!
Da sind wir wieder bei der I2C Leitungslänge... - Leidiges Thema... - Oft Diskutiert & immer noch keine Eindeutige Aussage...
Wie lang darf die sein?
Da im Auto verbaut wird, würde ich grob geschätzt 1,5-2m Leitungsweg brauchen... (Vom Handschuhfach über die A-Säule bis Mitte Windschutzscheibe nähe Rückspiegel...)
I2C Repeater? Ja / Nein / teste vorher mal?
Textformatierung: Viele Wege führen nach Rom, beim Nano würde ich Speicher sparen wollen. Daher einmal buf[22] mit voller Zeilenlänge. Anstelle float uint32_t (ungetestet):
uint16_t sensor12Value = analogRead(A6); uint16_t sensor5Value = analogRead(A7); uint32_t voltage12 = sensor12Value * 100UL * 15 / 1023; uint32_t voltage5 = sensor5Value * 100UL * 5 / 1023; char buf[22]; snprintf( buf, sizeof(buf), "12V Rail: %2lu.%02lu V", voltage12 / 100, voltage12 % 100 ); u8g2.drawStr( 3, _LCDML_DISP_font_h * 5, buf); snprintf( buf, sizeof(buf), " 5V Rail: %2lu.%02lu V", voltage5 / 100, voltage5 % 100 ); u8g2.drawStr( 3, _LCDML_DISP_font_h * 6, buf);
Da stimmt was nicht...
Hab jetzt 2x untereinander die 5V Rail... 12V Fehlt gänzlich...
Ohne jetzt einen zweiten buf[22] einzubauen, würde ich das jetzt nicht hinbekommen...
Da im Auto verbaut wird, würde ich grob geschätzt 1,5-2m Leitungsweg brauchen... (Vom Handschuhfach über die A-Säule bis Mitte Windschutzscheibe nähe Rückspiegel...)
I2C Repeater? Ja / Nein / teste vorher mal?
Im Auto ist das noch mal ne ganz andere Nummer. I2C ist da gern mal störungsanfällig.
Also vorher testen.