Bir LCD ekranda (boylam ve enlem) bazı verileri görüntülemek için bir GPS modülüne sahip bir ATMega32 kullanıyorum. GPS modülü, saniyede 9600 bps'de bir veri dizesi gönderir. Dize, $ işareti ile başlayan bir NMEA cümlesidir ve bu karakteri alıcının (AVR UART) senkronize edilmesi için kullanıyorum. Ben GPS_read bir char array geçmek ve daha sonra LCD ekranda dize görüntülemekAVR USART beklendiği gibi çalışmaz
// GPS.h
void GPS_read(char *sentence)
{
while ((*sentence = USART_receive()) != '$')
;
USART_receive_string(++sentence);
}
// USART.h
unsigned char USART_receive(void)
{
while (!(UCSRA & (1<<RXC)))
;
return UDR;
}
void USART_receive_string(char *string)
{
do
{
*string = USART_receive();
} while (*string++ != '\n'); // NMEA sentences are <CR><LF> terminated
*string = '\0';
}
:
bu
kullandığım koddur. Verileri görüntülemek için seçtiğim zamanlamaya bağlı olarak, bir $ G ve bir \ n karakterinden oluşan bazı çöp verileri alıyorum.Burada bazı hata yapıyorum, ama iki gün oldu ve ben
yardım lütfen (ben bir acemi gömülü programcı değilim :)) yanlış yapıyorum anlamaya olamaz! teşekkürler Luca
'* cümle [Indexer ++]'? - Ben öyle düşünmüyorum. – JimmyB
"Kodunuzda birkaç hata var" - Bu hatalar nelerdir? – JimmyB
Neden? * cümle, char diziliminin adresini işaret eder, Index bir indeksleyici olarak kullanılır, Data değeri dizinin o belirli elemanına kaydedilirse, Indexer'ı dizideki bir sonraki öğeye bir 'nokta' ile artar USART_receive_string() işlevi için. Neyi kaçırıyorum? –