Sida 1 av 1

HD44780 lc celsiustecknet i ha

Postat: 23 april 2026, 06:56:46
av grym
hållt på att krånga med gamla HD44780 i home assistant
esp32 allt funkar nu förutom att få till celsiustecken efter temperaturen

har provat, googlat, letat hjälp hos AI
grundproblemet är att jag inte förstår programeringsspråket

så här ser delen för lcd ut

display:
- platform: lcd_pcf8574
id: lcd
dimensions: 16x2
address: 0x26
update_interval: 10s
lambda: |-
it.strftime(0, 0,"%H:%M %d.%m.%Y", id(my_time).now());
it.printf(0, 1,"temp ute: %.1f C", id(tempute).state);

skriver ut tid och datum på övre raden och "temp ute: 9.8C" på den undre
skulle vilja ha df enligt bilden på standardtecken

provar mig fram med får inget rätt, förslag?

Re: HD44780 lc celsiustecknet i ha

Postat: 23 april 2026, 07:44:54
av MadModder
Du menar gradtecknet? :)
Prova stoppa in \xdf innan C.

Re: HD44780 lc celsiustecknet i ha

Postat: 23 april 2026, 17:14:41
av grym
:tumupp:

det funkade
tackar

Re: HD44780 lc celsiustecknet i ha

Postat: 23 april 2026, 18:09:46
av MadModder
Gôtt :tumupp: :tumupp:

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 10:02:35
av grym
nu när jag fick det att fungera satte jag upp ett par lcd som visar lite värden

men stötte på ytterligare ett problem som jag provad mig runt på
att visa
%
efter rf/rh värde
alla andra tecken funkar, men inte %
gissar att den används för andra sker då dom finns överallt

lambda: |-
it.strftime(0, 0,"%H:%M %d.%m.%Y", id(my_time).now());
it.printf(0, 1,"ute %.1f\xdf", id(tempute).state);
it.printf(10, 1,"%.0f RH", id(rhute).state);

men funkar inte med f\x25
alla runt om funkar 24 26 o.s.v

egenteligen intget problem, skriver RH nu istället för %
funderar bara varför
provat på flera olika lcd för säkerhetsskull, eller rättare sagt, har ett par typer och leker lite innan man spikar allt

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 10:22:40
av janno
det borde nog fungera med %% det är nog standard C printf formateringskoder som används
it.printf(18, 0, "%s%%", "");

såg också någonstans ett exempel med
it.print("Percentage: %s", id(percentage).state.c_str());
dock helt otestat.

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 12:06:42
av grym
:tumupp:
tack det funkade

som sagt, jag förstår mig inte på syntaxen så jag provar mig fram en hel del :oops:

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 14:50:58
av CPMS
Är displayen rätt deklarerad borde väl det fungera att bara använda tecknen man vill ha, det är väl displayens controller som ska sköta om att visa rätt tecken?

Så här kör jag men det är ju en annan display.

Kod: Markera allt

display:
  - platform: st7735
    model: "INITR_18BLACKTAB"
    id: display_1
    reset_pin: GPIO26  # Reset-pin för display
    cs_pin: GPIO5  # CS-pin för display
    dc_pin: GPIO22  # DC-pin för display
    rotation: 90  # Rotationsinställning för display
    device_width: 128  # Bredd på display
    device_height: 160  # Höjd på display
    col_start: 0  # Kolumnstart
    row_start: 0  # Radstart
    eight_bit_color: true  # Använder 8-bitars färg
    update_interval: 0s  # Ingen uppdatering mellan sidor

    pages:
      - id: page1
        lambda: |-
          it.printf(0, 0, id(my_font), id(red), "PANNRUM 1");  
          it.print(it.get_width(), 0, id(my_font), id(blue), TextAlign::TOP_RIGHT, "1(3)");  
          it.printf(0, 25, id(my_font), id(white), "Temp ute: %.1f C°", id(temp_ute).state);    
          it.printf(0, 75, id(my_font), id(white), "IP: %s", id(esp32_d1_mini_1_ip_adress).state.c_str());  

      - id: page2
        lambda: |-
          it.printf(0, 0, id(my_font), id(red), "PANNA");  
          it.print(it.get_width(), 0, id(my_font), id(blue), TextAlign::TOP_RIGHT, "2(3)");  
          it.printf(0, 25, id(my_font), id(white), "Temp: %.1f C°", id(esp32_d1_mini_1_panntemperatur).state);  
          it.printf(0, 50, id(my_font), id(white), "Rokgas: %.1f C°", id(esp32_d1_mini_1_rokgastemperatur).state);  
          it.printf(0, 75, id(my_font), id(white), "Framl: %.1f C°", id(esp32_d1_mini_1_framledningstemperatur).state);  
          it.printf(0, 100, id(my_font), id(white), "Retur: %.1f C°", id(esp32_d1_mini_1_returtemperatur).state);  

      - id: page3
        lambda: |-
          it.printf(0, 0, id(my_font), id(red), "PELLETS");
          it.print(it.get_width(), 0, id(my_font), id(blue), TextAlign::TOP_RIGHT, "3(3)");
          it.printf(0, 25, id(my_font), id(white), "Lager: %.0f kg", id(pellets_lager).state);
          it.printf(0, 50, id(my_font), id(white), " %.0f kg/dygn", id(pellets_kg_dygn).state);

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 16:13:00
av janno
Så är det ju, problemet här var ju at % är ju "escape tecken" för formateringskoder. Så för att skriva % i texten måste man skriva två %%, ibland är det ju \ som används som escape tecken, skulle kunna var att \% fungerar också. Ska man skriva en \ får man ju dubblera den med \\.

Re: HD44780 lc celsiustecknet i ha

Postat: 26 april 2026, 16:37:08
av CPMS
Jovisst är det så, ville bara visa att man inte behöver använda dispayen's teckentabell utan man kan använda "tangentbordets tecken" och sen fixar displayen med rätt "drivrutin" resten.