Skocz do zawartości

[C] Umieszczenie części kodu w funkcji


Jeżyk-1

Pomocna odpowiedź

Witam. Chciałem dostosować kod z ćwiczenia 5 kursu:

http://hobby.abxyz.bplaced.net/index.php?pid=4&aid=8

do swoich potrzeb ale że jestem początkujący to coś mi nie idzie 🙂

Chciałem część kodu wstawić w funkcję:


void wys_tem(void)
{
/* Funkcja 'ds18b20_ConvertT' wysyła do układu ds18b20 
polecenie pomiaru */ 
if(ds18b20_ConvertT())
{

/* 750ms - czas konwersji */
_delay_ms(750);

/* Odczyt z układu ds18b20, dane zapisywane są w tablicy ds18b20_pad. 
Dwie pierwsze pozycje w tablicy to kolejno mniej znaczący bajt i bardziej 
znaczący bajt wartość zmierzonej temperatury */ 
ds18b20_Read(ds18b20_pad);

/* Składa dwa bajty wyniku pomiaru w całość. Cztery pierwsze bity mniej
znaczącego bajtu to część ułamkowa wartości temperatury, więc całość
dzielona jest przez 16 */ 
temp = ((ds18b20_pad[1] << 8) + ds18b20_pad[0]) / 16.0 ;

/* Formułuje komunikat w tablicy 'str' */
sprintf(str,"%4.1f\xdf""C", temp);

/* Wyświetla tytuł */ 
LCD_LOCATE(0,1);
lcd_puts("tempe: ");
/* Wysyła komunikat do wyświetlacza */
LCD_LOCATE(8,1);
lcd_puts(str); 


}
}

a w funnkcji głównej tylko jego odnośnik :


int main(void)
{

/* Zmienna przechowuje aktualną wartość temperatury */ 
double temp;
/* W tablicy zapisywane będą dane odczytane z układu ds18b20 */
unsigned char ds18b20_pad[9];

/* Funkcja inicjalizuje wyświetlacz */
lcd_init();
/* Włącza wyświetlanie */
LCD_DISPLAY(LCDDISPLAY); 
/* Czyści ekran */
LCD_CLEAR; 


wys_tem();

}

Ale kompilator zwraca mi różne błędy. Pewnie wina jest że funkcja ma zły typ i parametr funkcji albo wymagana jest gdzieś zmienna globalna 🙁

może ktoś podpowiedzieć jak powinno być to ruszyło?

Link do komentarza
Share on other sites

Ale kompilator zwraca mi różne błędy.
Warto te błędy czytać, zazwyczaj mówią właśnie co jest nie tak. Jeśli ich nie rozumiesz, wrzuć na forum, będzie łatwiej sprawdzić.

Tak na pierwszy rzut oka, nie masz zadeklarowanych zmiennych temp i str.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No tak mało wiem jak to poprawić

oto kod błędu :

Compiling C: main.c
avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2 -DF_CPU=1000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./main.lst  -std=gnu99 -MMD -MP -MF .dep/main.o.d main.c -o main.o 
main.c: In function 'wys_tem':
main.c:38: error: 'ds18b20_pad' undeclared (first use in this function)
main.c:38: error: (Each undeclared identifier is reported only once
main.c:38: error: for each function it appears in.)
main.c:43: error: 'temp' undeclared (first use in this function)
main.c: In function 'main':
main.c:82: warning: unused variable 'ds18b20_pad'
main.c:80: warning: unused variable 'temp'
make.exe: *** [main.o] Error 1

> Process Exit Code: 2
> Time Taken: 00:02
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.