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



Teraz jest 24 lut 2026, o 04:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 4 lut 2016, o 19:17 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

Witam, bez bicia przyznaję od razu przepisałem kodzik z stronki:
....
i próbuje zrobić operację If np. taką:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to wywala mi taki błąd:
Kod:
comparison between pointer and integer [enabled by default]


I ktoś mi wyjaśni jak sobie z tym poradzić ?



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

...a z jakiej litery piszesz if?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 20:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

No przecież pisze co robisz źle: porównujesz wskaźnik z wartością integer. Może zrób tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lut 2016, o 20:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Błąd oznacza, że próbujesz porównać zmienną będącą wskaźnikiem z liczbą.
Musisz użyć operatora wyciągania wartości z pod wskaźnika (*). W BB jest to pięknie opisane. I jak chcesz programować, to musisz to zrozumieć.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 10:05 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

PJS napisał(a):
No przecież pisze co robisz źle: porównujesz wskaźnik z wartością integer. Może zrób tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dziękuje działa,
Jednak nie działa poprawnie, nawet gdy wynik1 jest 4000 to i tak wykonuje polecenie.

Teraz mam problem z tym kodem:

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


Kod:
comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses]


Czyli nie ma sensu matematycznego



rskup napisał(a):
Błąd oznacza, że próbujesz porównać zmienną będącą wskaźnikiem z liczbą.
Musisz użyć operatora wyciągania wartości z pod wskaźnika (*). W BB jest to pięknie opisane. I jak chcesz programować, to musisz to zrozumieć.

--
Pozdrawiam,
Robert


BB czyli? (Blue Book?)


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

Ale kod nie działa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 10:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1188
Lokalizacja: Kraków
Pomógł: 95

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

Ale kod nie działa

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

Problemem może być wyrażenie >*



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 10:46 
Offline
Użytkownik

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

damian5602 napisał(a):
BB czyli? (Blue Book?)


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

Ale kod nie działa

Tak chodzi o Niebieską Książkę ;-)
Zależy co chcesz osiągnąć. Może byś zrobił tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


-------
Kolega marhef był szybszy :lol:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 11:54 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

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


To nic się nie dzieje.

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

to jest to wykonywane poprawnie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 12:13 
Offline
Użytkownik

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

damian5602 napisał(a):
Mam pewien problem.
Jeżeli dam tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To nic się nie dzieje.

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

to jest to wykonywane poprawnie.

I bardzo dobrze!
Tak ma być. Przecież wszystko zależy od tego co masz w zmiennej wynik1
Nie może być równocześnie i większe i mniejsze :lol:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 12:53 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

MirkoT napisał(a):
damian5602 napisał(a):
Mam pewien problem.
Jeżeli dam tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To nic się nie dzieje.

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

to jest to wykonywane poprawnie.

I bardzo dobrze!
Tak ma być. Przecież wszystko zależy od tego co masz w zmiennej wynik1
Nie może być równocześnie i większe i mniejsze :lol:



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

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

i wynik1 ma wartość np 4500 to nic się nie dzieje.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lut 2016, o 20:15 
Offline
Użytkownik

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

pokaż więcej kodu bo cóś (pisownia zamierzona) kręcisz

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 10:12 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

Tu jest sam kod do obrotów bez tych if:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 13:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Pierwsza sprawa - wynik1 to tablica char, więc przyjmuje wartości do 256, więc nic dziwnego, że masz problemy z porównaniami - poczytaj m.in. o niejawnej konwersji typów.
Druga sprawa - do tablicy odwołuj się przez wynik1[tu wstaw numer komórki], bo odwołanie typu wynik1 czy też *wynik1 jest błędne czy też niezbyt czytelne (w najlepszym razie) - przynajmniej dla początkującego.
Trzecia sprawa - czy opanowałeś podstawy języka C, czy też próbujesz rzucać się bez wiedzy: na zasadzie, a nuż się uda; jeśli to drugie to najpierw zapoznaj się z językiem C. Nie będę polecał innych książek, jako że te Mirka są dla początkującego wręcz idealne.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 13:15 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

PJS napisał(a):
Pierwsza sprawa - wynik1 to tablica char, więc przyjmuje wartości do 256, więc nic dziwnego, że masz problemy z porównaniami - poczytaj m.in. o niejawnej konwersji typów.
Druga sprawa - do tablicy odwołuj się przez wynik1[tu wstaw numer komórki], bo odwołanie typu wynik1 czy też *wynik1 jest błędne czy też niezbyt czytelne (w najlepszym razie) - przynajmniej dla początkującego.
Trzecia sprawa - czy opanowałeś podstawy języka C, czy też próbujesz rzucać się bez wiedzy: na zasadzie, a nuż się uda; jeśli to drugie to najpierw zapoznaj się z językiem C. Nie będę polecał innych książek, jako że te Mirka są dla początkującego wręcz idealne.

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

wyświetla liczbę normalnie tzn. aktualne obroty.

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

rozumiem.




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



I tylko wykonuje "lcd str blue"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 15:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

A więc tak:
1) wynik1[] to tablica znakowa - zawiera w sobie tekst w postaci znaków ASCII, a nie liczby całkowitej. Więc jak chcesz porównywać to z wartością 4000 czy inną?
2) zobacz co robi funkcja LCD_WriteText(wynik1);
3) zapoznaj się z BB, czyli poznaj podstawy C, a szczególnie typy.
Ad.1 w tablicy masz tekst: przykładowo 2400 czyli cztery znaki ASCII cyfr '2' '4' '0' '0', a nie liczbę 2400.
Ad2. osobiście nie znam zawartości LCD_WriteText(wynik1), ale myślę, że po prostu przekazujesz początek (adres) tablicy i funkcja wysyła kody znaków (zawarte w tej tablicy) na LCD.
Ad3. naprawdę zapoznaj się z BB lub inną książką o podstawach C, bo widać, że masz spore braki, a to w miarę czasu będzie miało wymierne negatywne skutki. Jak zrozumiesz typy zmiennych, a potem wskaźniki to całość będzie od razu dla ciebie jaśniejsza. A tak to z każdą modyfikacją, którą będziesz wprowadzał wystąpią problemy i pytanie o każdą najprostszą rzecz w pewnym momencie napierze tempa lawiny.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 16:27 
Offline
Nowy

Dołączył(a): 01 sty 2016
Posty: 21
Pomógł: 0

Próbowałem 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 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 tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

ale żaden z nich nie działa poprawnie z powyższym kodem..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 18:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Nadal nie rozumiesz, o co chodzi z tablicą wynik1[].
Tablica ta zawiera 16 znaków, które jeden po drugim są wysyłane na LCD. Co konkretnie na której pozycji jest nie wiem, ale może to być zestaw znaków ASCII np. taki
Kod:
"OBROTY: 2560/min"

lub
Kod:
"2500 obr/min.   "

lub coś innego.
Zatem te twoje próby zamiany ascii na integer nie zadziałają. Wyciąganie z tej tablicy wartości obrotów jest możliwe, ale nieopłacalne i bezsensowne.
Załóżmy jednak, że ilość obrotów to cztery cyfry na pozycjach wynik1[8]do wynik1[11], wtedy możesz zrobić coś takiego (piszę na sucho):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Myślę, że zadziała, ale czy jest sens, przecież wartość obrotów zanim została przeniesiona jako ASCII do tablicy wynik1[] musi być trzymana w innej zmiennej (np. typu integer) i musi być ona dostępna w programie. Ewentualnie jest wyliczana jakąś funkcją wcześniej; tak czy siak musi być dostępna gdzieś w programie.

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2016, o 20:20 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

W linii 167 tworzysz string i umieszczasz go w wynik1.
Najlepiej zadeklaruj jakąś zmienną np. int xyz; i do niej daj xyz=(60.0 * obrotow_na_sekunde); i po kłopocie.

PS. Doczytaj o C String i o tablicach.


Autor postu otrzymał pochwałę


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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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