Skocz do zawartości

[C] Umieszczenie części kodu w funkcji


Pomocna odpowiedź

Napisano

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?

Musisz jeszcze dodać kod obsługujący 1 Wire i wyświetlacz lcd. Wszystko jest w tym kursie (nie pamiętam w których częściach).

Muszę dodać do funkcji czy pokazać na forum ?

Bo jak pokazać na forum to podałem linka na początku do tego kursu, tam jest cały kod.

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.

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...