Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 3 kwi 2025, o 17:55


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 11 gru 2022, o 11:50 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2017
    Posty: 582
    Pomógł: 0

    Witam.
    Pytanie może trochę banalne ale sprawia mi problem.
    Odczytuje wartość zmiennej uint16_t wartość ta odpowiada pomiarowi prądu ale np. 1,65 A jest jako 165 ponieważ potem jest potrzeba zapisu danych na kartę SD ale w postaci z oddzieleniem przecinkiem
    i tu powstaje pytanie - w jaki prosty sposób zmienić w/w liczbę uint16_t = 165 na zapis pojedynczych cyfr do tablicy czyli np. char pomiar_pradu [4] ; aby wynikiem zapisu było :

    pomiar_pradu[4]=0;
    pomiar_pradu[3]=0;
    pomiar_pradu[2]=1;
    pomiar_pradu[1]=6;
    pomiar_pradu[0]=5;

    Jest jakiś szybki sposób?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 gru 2022, o 12:12 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 323
    Lokalizacja: Rybnik
    Pomógł: 23

    Jeżeli chodzi o liczbę 3 cyfrową, to możesz to zrobić w taki sposób:

    pomiar_pradu[2] = zmienna/100;
    pomiar_pradu[1] = (zmienna/10)%10;
    pomiar_pradu[0] = zmienna%10;

    zakładając, że nie używasz przecinka w zmiennej "zmienna", bo to tego potrzebował byś zmiennej typu float a nie uint16_t.


    Autor postu otrzymał pochwałę

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 gru 2022, o 16:21 
    Offline
    Nowy

    Dołączył(a): 31 maja 2018
    Posty: 17
    Pomógł: 1

    Ja robię

    int16 Data =123;
    char TAB[6] ={0, 0, 0, 0, 0, '\0'};

    for (i_ = 5; i_ > 0; Data /= 10, i_--) {
    TAB[i_ - 1] = (Data % 10)+0x30;
    }

    wyjdzie
    TAB[0] = 0
    TAB[1] = 0
    TAB[2] = 0
    TAB[3] = 1
    TAB[4] = 2
    TAB[5] = 3



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 gru 2022, o 20:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2017
    Posty: 582
    Pomógł: 0

    Dzięki mario2015 super zadziałało jeszcze raz dzięki za pomoc .
    Przeliczenie na pewno dla mnie banalne ale pewnie 30 lat temu , dzięki za podpowiedz bo ruszę dalej z programem mającym na celu stworzenia programu do pomiaru ile mocy uzyskam z jednego panela
    fotowoltaicznego ładującego akumulator 44Ah.
    Do tego celu program będzie wykonywał pomiar napięcia i prądu i wykonywał zapis na kartę SD (pomocna tu biblioteka FAT FS).
    Teraz panel wiele mocy nie daje to mam czas na pisanie programu.

    Jak zrobić żeby była jeszcze jedna cyfra? pomiar_pradu[3] ?

    Przykład daro0606 coś nie ruszył i nie wiem bo dlaczego ? przykład trochę za trudny nie kompiluje się.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 gru 2022, o 08:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 323
    Lokalizacja: Rybnik
    Pomógł: 23

    Dla 4 liczb:
    pomiar_pradu[3] = zmienna/1000;
    pomiar_pradu[2] = (zmienna/100)%10;
    pomiar_pradu[1] = (zmienna/10)%10;
    pomiar_pradu[0] = zmienna%10;

    dla 5 liczb:
    pomiar_pradu[4] = zmienna/10000;
    pomiar_pradu[3] = (zmienna/1000)%10;
    pomiar_pradu[2] = (zmienna/100)%10;
    pomiar_pradu[1] = (zmienna/10)%10;
    pomiar_pradu[0] = zmienna%10;

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2022, o 16:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 323
    Lokalizacja: Rybnik
    Pomógł: 23

    daro0606 napisał(a):
    Ja robię

    int16 Data =123;
    char TAB[6] ={0, 0, 0, 0, 0, '\0'};

    for (i_ = 5; i_ > 0; Data /= 10, i_--) {
    TAB[i_ - 1] = (Data % 10)+0x30;
    }


    Możesz mi powiedzieć jak rozszyfrować tę twoją pętlą
    Cytuj:
    for (i_ = 5; i_ > 0; Data /= 10, i_--)


    Przecież składnia pętli for wygląda tak:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    czyli dla i=5 wykonuj pętlę i dopóki i jest większe od 0 to dekrementuj i ,
    a ty wrzucasz jakiś dodatkowy parametr " Data/=10".
    Co chciałeś tym osiągnąć?
    Po wpisaniu twojego kodu do kompilatora online, uzyskałem takie o to wyniki:
    Obrazek
    Więc jak ty chciałeś uzyskać wynik 123?

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 gru 2022, o 20:42 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    mario2015 napisał(a):
    Przecież składnia pętli for wygląda tak:

    A tak z ciekawości zapytam, dotarłeś już w naszym kursie C do pętli for() ... bo coś czuję , że nie jeśli dla ciebie nie jest jasne co kolega tu robi w nie z tym Data /= 10, ... zauważ że jest przecinek po tym

    Zaś w kompilatorze OnLine wpisz sobie to nieco inaczej - o tak:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    i sprawdź co zobaczysz - bo teraz zobaczyłeś w swoim kodzie czyste kody ASCII a tym sposobem zobaczysz znaki ASCII tych kodów i co robi kod tego kolegi

    ------------------------ [ Dodano po: 2 minutach ]

    mirekk36 napisał(a):
    (Data % 10)+0x30;

    Oczywiście takie coś lepiej zapisać w kodzie w ten sposób:

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    wtedy innym łatwiej jest nieco zrozumieć co tu się dzieje - ale o tym też już mówiliśmy w kursie C

    ------------------------ [ Dodano po: 4 minutach ]

    a jeszcze lepiej pritf'a daj sobie tak ;)

    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2022, o 19:30 
    Offline
    Nowy

    Dołączył(a): 31 maja 2018
    Posty: 17
    Pomógł: 1

    Cytuj:
    a ty wrzucasz jakiś dodatkowy parametr " Data/=10".
    Co chciałeś tym osiągnąć?


    Zmienna Data "123" jest dzielona przez 10 a wynik jest umieszczany w zmienną Data za każdym razem jak wykona się blok instrukcji ta liczba jest zmniejszana o ostatnią.

    Ja się uczę i nie wiem czy dobrze to powiedziałem po "fachowemu"



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 16 gru 2022, o 22:13 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27366
    Lokalizacja: Szczecin
    Pomógł: 1043

    daro0606 napisał(a):
    Ja się uczę i nie wiem czy dobrze to powiedziałem po "fachowemu"

    kodzik źródłowy mówi sam za siebie ;)

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO