Witam, tworze programowy PWM na ATmega16+ aplikacje na PC w c# do sterowania. Problem polega na wysyłaniu zmiennych typu float ( z int nie ma problemów), mikrokontroler odbiera dane z portu, zapisuje ja do bufora i odsyła do komputera i jak przy zmiennych typu int wszystko ładnie się wyświetla tak przy floatach wyświetla liczby typu 52,205,0... Liczby z PC są wysyłane podczas zmiany wartości w trackbarze. O to mój kod C oraz C#:
unsigned char bufor[64];
while(1)
{
zmienna= uart_getchar();
sprintf(bufor,"%.1f\n",zmienna);
uart_puts(bufor);
}
unsigned char uart_getchar(void)
{
while(!(UCSRA & (1<<RXC)));
return UDR;
}
oraz kod C#.
float liczba;
string wiadomosc;
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
liczba = (float)trackBar1.Value /10;
Wyslane.AppendText("Serwo_1: "+liczba.ToString()+"\r\n");
byte[] b = BitConverter.GetBytes(liczba);
serialPort1.Write(b, 0, 4);
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
wiadomosc = serialPort1.ReadExisting();
this.Invoke(new EventHandler(wyswietl));
}
private void wyswietl(object sender, EventArgs e)
{
Odebrane.AppendText(wiadomosc);
}