Chcę wysłać double z uC do PC. Czyli: w uC mam double pi = 3.1415 po wysłaniu zmiennej do komputera, konsola (terminal) powinna pokazywać 3.1415. Po wysłaniu pi do PC konsola pokazuje: ? <00> <00> 4f <00> ˙˙. Kod:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
void print_char(char letter)
{
if( bit_is_set(UCSRA, UDRE) )
{
_delay_ms(10);
UDR=letter;
loop_until_bit_is_set(UCSRA, TXC);
}
}
int main(void)
{
UBRRL = 103; //9600 16mhz
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
double pi=3.1415;
char cpi[8];
sprintf(cpi,"%#.4f", pi);
while(1)
{
for(int i=0; i<8; i++) print_char(cpi[i]);
UDR=0x0D;
UDR=0x0A;
_delay_ms(1000);
}
}
Jak wykonać poprawną konwersje/wysłanie znaku?