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



Teraz jest 6 kwi 2026, o 17:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 4 lis 2016, o 12:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Witam!

Proszę o pomoc w konwersji stringa temperatury ze znakiem na część dziesiętną ze znakiem i część ułamkową (do wyświetlenia na lcd). Napisałem kod jak niżej, który działa dobrze, ale tylko dla stringów zawierających temperaturę >1 i <1°C. Temperatury z zakresu -1 do 1°C pokazywane są bez znaku bo część dziesiętna jest zerem. Jak wydobyć ze stringa temperaturę np. -0.4°C i odróżnić ją od +0.4°C?

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


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


Pozdrawiam
avrfun



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 13:32 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Ale Ty najpierw wrzucasz coś do struktury a potem dopiero przypisujesz zmiennej test wartość...
To jak Ci to ma zadziałać :?:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 13:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Cytuj:
Ale Ty najpierw wrzucasz coś do struktury a potem dopiero przypisujesz zmiennej test wartość...
To jak Ci to ma zadziałać


Działa bo warunek if wywoływany jest co 100ms, a więc za pierwszym przejściem po restarcie nie zadziała, ale już za każdym kolejnym tak bo zmienna test ma już nadaną wartość. Napisałem to do testów. W programie struktura napełnia się, a dopiero później następuje odczyt.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 14:13 
Offline
Użytkownik

Dołączył(a): 05 lut 2014
Posty: 252
Lokalizacja: obok Częstochowy
Pomógł: 14

Nie napisałeś,czy może korzystasz z mirkowej biblioteki do DS1820.
Jeśli tak to masz tam zmienną subzero. Na jej podstawie możesz se tego minusika,czy plusika wypisać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 14:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Cytuj:
Nie napisałeś,czy może korzystasz z mirkowej biblioteki do DS1820.
Jeśli tak to masz tam zmienną sub. Na jej podstawie możesz se tego minusika,czy plusika wypisać.

Tak korzystam z biblioteki z BB. Pomiary z DS zapisywane są w bazie danych jako stringi. Z bazy są pobierane przez odbiornik jako stringi, który ma je tylko wyświetlić na LCD. Cały string się wyświetla się poprawnie, ale parsuję go dla potrzeb wyświetlacza 7-seg LED na część dziesiętną i ułamkową. Gdy string ma postać "-12.3" część dziesiętna wynosi -12, a część ułamkowa wynosi 3 i to działa, ale gdy string ma postać "-0.4" lub "0.4" to część dziesiętna wynosi 0 (bo zero nie ma znaku), a część dziesiętna 4. Tak więc nie można odróżnić temperatury - od +. Muszę pracować na gotowym stringu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 14:32 
Offline
Moderator
Avatar użytkownika

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

avrfun napisał(a):
Tak więc nie można odróżnić temperatury - od +

Dawno już takich rzeczy z kosmosu nie słyszałem ....

_________________
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: 4 lis 2016, o 14:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Skrót myślowy. W bazie jest -0.4, a na wyświetlaczu 0.4 i tak samo, w bazie jest +0.4, a na wyświetlaczu 0.4. Tak więc patrząc na wyświetlacz nie wiem czy jest -0.4 czy +0.4.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 14:38 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

A sprawdź może sobie w stringu czy pierwszy znak == 45 (minus w ASCII) jeśli tak to masz wszystko co wyjdzie ujemne a jeśli nie to dodatnie.
Robiłem podobnie w jakieś funkcji na LCD brakowało mi miejsca i dla znaków 5x7 szkoda mi było na minus, kropkę, przecinek tracić aż 6 pikseli.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 14:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

iwi napisał(a):
A sprawdź może sobie w stringu czy pierwszy znak == 45 (minus w ASCII) jeśli tak to masz wszystko co wyjdzie ujemne a jeśli nie to dodatnie.
Robiłem podobnie w jakieś funkcji na LCD brakowało mi miejsca i dla znaków 5x7 szkoda mi było na minus, kropkę, przecinek tracić aż 6 pikseli.

Dziękuję bardzo, to jest konstruktywna podpowiedź. Przetestuję i dam znać



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 16:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Dokładnie ja tak samo robie sprawdzamm czy jest + czy - wtedy zaleznie od zmiennej subzero albo dodaje - przed wynikiem lub nie.

Wysłane z mojego LIVE przy użyciu Tapatalka

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 17:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

majster napisał(a):
Dokładnie ja tak samo robie sprawdzamm czy jest + czy - wtedy zaleznie od zmiennej subzero albo dodaje - przed wynikiem lub nie.

Tak, tylko wynik jest już gotowy: "-0.4" i trzeba to wyświetlić na wyświetlaczach 7-segmentowych. Dzięki za głos.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2016, o 18:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 450
Pomógł: 3

Cytuj:
iwi napisał(a):
A sprawdź może sobie w stringu czy pierwszy znak == 45 (minus w ASCII) jeśli tak to masz wszystko co wyjdzie ujemne a jeśli nie to dodatnie.
Robiłem podobnie w jakieś funkcji na LCD brakowało mi miejsca i dla znaków 5x7 szkoda mi było na minus, kropkę, przecinek tracić aż 6 pikseli.

Dziękuję bardzo, to jest konstruktywna podpowiedź. Przetestuję i dam znać

Dziękuję jeszcze raz. Poradziłem sobie! Do kodu zamieszczonego w pierwszym poście dopisałem proste sprawdzanie pierwszego i drugiego znaku stringa. Jeżeli pierwszy to "-", a drugi to 0 wyświetlam na "-" na lcd. Liczby ujemne >=-1 wyświetlają się ze znakiem zgodnie z działaniem zastosowanych funkcji.

Klikam pomógł!



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: 12 ] 

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