Strona 1 z 4

Sterownik do tokarki

: 15 mar 2023, 15:53
autor: beyma
Witam
Zbudowałem sobie sterownik z tej strony https://github.com/kachurovskiy/megaels/.
Znalazłem wersję dla wyświetlacza 4x20znaków jednak jest ona po rosyjsku i wyświetlacz pokazuje jakieś głupoty.
Czy jest tu jakiś magik co pomoże przetłumaczyć kod??

Przykładowy kawałek kodu

void Print()
{
if (Mode == Mode_Thread) //////////////////////////////////////////////////////////
{
if (Sub_Mode_Thread == Sub_Mode_Thread_Int) snprintf(LCD_Row_1, 21, " \x50\x45\xA4\x62\xA0\x41 \xB3\xBD\x79\xBF\x70\x65\xBD\xBD\xC7\xC7 "); //РЕЗЬБА внутренняя
else if (Sub_Mode_Thread == Sub_Mode_Thread_Man) snprintf(LCD_Row_1, 21, " \x50\x45\xA4\x62\xA0\x41 "); //РЕЗЬБА
else if (Sub_Mode_Thread == Sub_Mode_Thread_Ext) snprintf(LCD_Row_1, 21, " \x50\x45\xA4\x62\xA0\x41 \xBD""apy\xB6\xBD""a\xC7 "); //РЕЗЬБА наружная

W załączniku soft z tego projektu

Re: Sterownik do tokarki

: 15 mar 2023, 16:03
autor: kasjo
Po prostu zastępujesz to co jest w cudzysłowach przetłumaczonym tekstem
O ile google translator dobrze przetłumaczył to :)

Kod: Zaznacz cały

if (Sub_Mode_Thread == Sub_Mode_Thread_Int) snprintf(LCD_Row_1, 21, " Gwint wewnetrzny "); //РЕЗЬБА внутренняя
else if (Sub_Mode_Thread == Sub_Mode_Thread_Man) snprintf(LCD_Row_1, 21, " Gwint "); //РЕЗЬБА
else if (Sub_Mode_Thread == Sub_Mode_Thread_Ext) snprintf(LCD_Row_1, 21, " Gwint zewnetrzny "); //РЕЗЬБА наружная
nie jestem pewien czy jest wymagana spacja na początku i końcu tekstu
zmienna LCD_Row_1 zapewne oznacza że tekst ma być w pierwszej linii a 21 to pozycja X tekstu, więc jak się coś nie mieści to trzeba by było wartość 21 trochę zmniejszyć

Re: Sterownik do tokarki

: 15 mar 2023, 16:42
autor: tristar0
beyma pisze:Przykładowy kawałek kodu
bo to jest wyświetlanie cyrrlicy na lcd ,masz opisy i po angielsku i rusku ,puki nie będziesz zamieniał na polskie litery typy ć,ś,ź, ż czy ę to nie będziesz miał problemu .
kasjo pisze:zmienna LCD_Row_1 zapewne oznacza że tekst ma być w pierwszej linii a 21 to pozycja X tekstu
wyświetlacz jest w sposób normalny podzielony na kolumny i wiersze

LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
char LCD_Row_1[21];
char LCD_Row_2[21];
char LCD_Row_3[21];
char LCD_Row_4[21];

Dodane 9 minuty 16 sekundy:
beyma pisze:Zbudowałem sobie sterownik z tej strony
nie wiem jak daleko jesteś ale te jego sterowniki są słabe gubią kroki albo przekraczają limity przy prędkościach wrzeciona powyżej 500 odr/min . Jedyny dobrze działający który też testowałem to wersja h1 .

Re: Sterownik do tokarki

: 15 mar 2023, 17:27
autor: beyma
Tak właśnie myślałem że o to w tym chodzi jest jednak inny szkopuł
Np to
if (Sub_Mode_Thread == Sub_Mode_Thread_Int) snprintf(LCD_Row_4, 21, "\xB8\xB7 \xBD\xB8""x \xC0\xB8""c\xBF""o\xB3\xC3""x%2d \1\2",PASS_FINISH + Pass_Fin); // из них чистовых
else if (Sub_Mode_Thread == Sub_Mode_Thread_Man) snprintf(LCD_Row_4, 21, " %5ld \xB3\xB8\xBF\xBA""o\xB3", Rev_Count); // 0 витков
else if (Sub_Mode_Thread == Sub_Mode_Thread_Ext) snprintf(LCD_Row_4, 21, "\xB8\xB7 \xBD\xB8""x \xC0\xB8""c\xBF""o\xB3\xC3""x%2d \1\2",PASS_FINISH + Pass_Fin); // из них чистовых

""""" \xB8\xB7 \xBD\xB8""x \xC0\xB8""c\xBF""o\xB3\xC3""x%2d \1\2" """"""""""
Jak to mam interpretować?

Albo ten kawałek kodu

if (PP_X == 1)snprintf(LCD_Row_4, 21, "\x63\xC2\xB5\xBC/\6 %1d.%02d\xBC\xBC \4\3", Ap/100, Ap%100); // съём/Ф:

Re: Sterownik do tokarki

: 15 mar 2023, 18:04
autor: tristar0
beyma pisze:f (PP_X == 1)snprintf(LCD_Row_4, 21, "\x63\xC2\xB5\xBC/\6 %1d.%02d\xBC\xBC \4\3", Ap/100, Ap%100); // съём/

\x63\xC2\xB5\xBC/\6 wartość %1d wartość np 10,1 jedno miejsce po przecinku %02d dwa miejsca po przecinku 10,01

Dodane 3 minuty 10 sekundy:
to jest np taki zapis https://stackoverflow.com/questions/733 ... e-operator

Dodane 4 minuty 55 sekundy:
Ale tu masz rozwiązanie twego ruskiego problemu https://www.utf8-chartable.de/unicode-u ... ng-literal powstawiaj sobie wszystkie znaki wyjdą litery i zmień na polskie

Re: Sterownik do tokarki

: 15 mar 2023, 18:27
autor: beyma
Czarna magia jak dla mnie XD.... Tak to już jest gdy się nie zna podstaw programowania. Myślałem że to będzie proste jednak przerasta mnie to

Re: Sterownik do tokarki

: 15 mar 2023, 18:36
autor: tristar0
A cały problem tego zapisu polega na tym ażeby zapobiec migotania lcd bo po prostu procesor nie nadąża żeby zastosować normalny kod taka maniana na zastosowanie tego co się ma czyli 16MHz , zamiat jakiegoś stm32f np 72MHz
lcd.setCursor(0, 2);
lcd.print("Position ");

Dodane 5 minuty 5 sekundy:
beyma pisze: Myślałem że to będzie proste jednak przerasta mnie to
to jest proste trzeba znaleść unicode/UTF-8 na cyrlice bo to co si wysłałem to unicode europejskie.Bo skoro warunkiem jest stosowanie na wysyłanie do wyświetlacza char LCD_Row to trzeba litery zamienić na znaki char bo inaczej nie będzie to działać .czyli trzeba rozkodować tą ruską pisaninę przetłumaczyć na polską i tym co ci wysłałem znów zmienić na char i wstawić w daną linijkę.

Dodane 21 minuty :
wypróbuj najpierw wersję h1 sam zobaczysz że to niby działa bo fakt nawet gwinty toczy ale kultura pracy taka sobie ,jak na arduino.

Re: Sterownik do tokarki

: 15 mar 2023, 19:11
autor: beyma
Mam zbudowana wersję H2 jak i ta o której tu piszę.
Wszystko póki co jest w fazie testów, zapoznania się z tym. A że ja lubię eksperymenty :D to się bawię jednak programowanie mnie przerasta.

Zastanawiam się też nad budową tego els
https://github.com/hobbymachinist/els/b ... ocs/els.md

Re: Sterownik do tokarki

: 15 mar 2023, 19:14
autor: tristar0
U mnie na stole wersja h2 działała w maszynie już nie same się zmieniały wartości skoku i blokował się start .

Re: Sterownik do tokarki

: 15 mar 2023, 19:50
autor: Avalyah
beyma pisze:Czarna magia jak dla mnie XD.... Tak to już jest gdy się nie zna podstaw programowania. Myślałem że to będzie proste jednak przerasta mnie to

Ale nie musisz znać podstaw programowania. Te magiczne ciągi to po prostu kody ASCII cyrylicy (zgaduję), po prostu zamieniasz to na zwykłe literki (bez polskich znaków). Między nimi znajdują się odniesienia do zmiennych, które nie polepszają sytuacji bo wygląda to groźnie. Ale linia:

snprintf(LCD_Row_4, 21, "\x63\xC2\xB5\xBC/\6 %1d.%02d\xBC\xBC \4\3", Ap/100, Ap%100)

to tak naprawdę

snprintf(LCD_Row_4, 21, "tekst1 %1d . %02d tekst2", Ap/100, Ap%100)

gdzie masz 5 argumentów - pierwsze dwa odnoszą się do wyświetlacza, następnie masz tekst, w którym są odniesienia do dwóch zmiennych:

%1d
%02d

gdzie za %1d jest wstawiana wartość Ap/100
a za %02d jest wstawiana wartość Ap%100

czyli na ekranie pojawi się np. tekst1 20.5 tekst2 gdzie 20 to wartość wyrażenia Ap/100 a 5 to wartość wyrażenia Ap%100 (czyli reszta z dzielenia przez 100, w efekcie prosty sposób na dzielenie z dokładnością do jednej dziesiątej, mikrokontrolery zdecydowanie wolą mnożenie i dzielenie liczb całkowitych od liczb dziesiętnych).

No, przynajmniej z grubsza, proszę mnie poprawić, jeśli coś tu pominąłem, bo piszę w zasadzie z pamięci, a dawno już nie miałem okazji pisać nic w C, a nawet jeśli już to z tekstem miałem rzadko do czynienia. Nie byłem też nigdy fanem takiej formy zapisu tekstu.

Tutaj możesz przeczytać więcej o formatowaniu w funkcji printf - https://learn.microsoft.com/en-us/cpp/c ... w=msvc-170