Serial port wysyłanie float

0

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);
            
        }
 
0

liczba.ToString() używa bieżącego formatu liczby, który zapewne masz z przecinkiem, a sprintf() w C jeżeli nie użyłeś setlocale() oczekuje kropki.

Użyj .ToString(CultureInfo.InvariantCulture)

0

Wyslane.AppendText("Serwo_1: "+liczba.ToString()+"\r\n");

ale przecież ta linijka kodu nie wysyła nic na port ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1