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



Teraz jest 21 lis 2024, o 10:38


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: 551
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: 315
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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: 551
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: 315
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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: 315
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

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: 27309
Lokalizacja: Szczecin
Pomógł: 1041

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: 27309
Lokalizacja: Szczecin
Pomógł: 1041

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO