IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:19.3.2017 1:52

Zdravím vytvořil jsem aplikaci stopky s mcu ATmega16 a k ní mám připojený převodník na USB. Do mcu jsem vložil funkci na posílání času do PC:

void odesli_cas(void) //cas
{

        str_cas[10] = '\0';
        str_cas[9] = '\n';
        str_cas[8]      = str_mil_sec[2];
        str_cas[7]      = str_mil_sec[1];
        str_cas[6]      = str_mil_sec[0];

        str_cas[5] = ',';

        str_cas[4] = str_sec[1];
        str_cas[3] = str_sec[0];

        str_cas[2] = ':';

        str_cas[1] = str_min[1];
        str_cas[0] = str_min[0];

        uart_puts(str_cas); // pošli na COM

        return;
}

a posílaný čas chci zobrazovat v nějaké okenní aplikaci napsané třeba v c# a řeším způsob jak dostat pouze jeden řádek času, když posílám čas přes funkci výše a pak to zobrazuji v nějakém labelu tak se to vypisuje jako do řádku pod sebe, prostě potřebuju odfiltrovat ostatní řádky a mít tam jen ten jeden s aktuálním časem.

kód v c#:

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)     // přijatá data
        {
            RxString = serialPort1.ReadExisting();

            //znak = serialPort1.Read(Char[11]);
            //znak = serialPort1.ReadExisting();

            this.Invoke(new EventHandler(DisplayText));

        }
        private void DisplayText(object sender, EventArgs e)
        {

            RXWINDOW.AppendText(RxString);
            //cas.Text=(RxString);

           /*znak = RxString.ToCharArray();
           vypis = znak.ToString();
           cas.Text=(vypis);
           */
        }

úplně mě nenapadá nějaké řešení jak dostat jen ten jeden řádek

 
Odpovědět
19.3.2017 1:52
Avatar
flotoo
Člen
Avatar
flotoo:19.3.2017 10:47

Zkus dát pod

RXWINDOW.AppendText(RxString);

toto:

if (in_data.IndexOf('\n')!= -1)
            {
                cas.Clear();
        }
cas.Text=(RxString);
 
Nahoru Odpovědět
19.3.2017 10:47
Avatar
studnicka.ji
Člen
Avatar
studnicka.ji:19.3.2017 11:40

nene to nefunguje

 
Nahoru Odpovědět
19.3.2017 11:40
Avatar
Roman
Člen
Avatar
Roman:8.9.2017 19:41

Cti znak po znaku a pokud narazis na enter tak ukonci cteni. Priklad funkce DataReceived

string ReceivedString = string.Empty;
SerialPort _sp = (SerialPort)sender;
if (_sp.BytesToRead > 0) {
        string receiveStr = string.Empty;
        int retChar;
        while ((retChar = _sp.ReadChar()) != 13) {
                receiveStr += (char)retChar;
        }
// v receiveStr je prijaty reteze  po enter int 13 = enter
}
 
Nahoru Odpovědět
8.9.2017 19:41
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na studnicka.ji
ostrozan:11.9.2017 16:23

Když nechceš ke stávajícímu textu přidávat žádný další, tak (logicky) nepoužívej metodu pro přidání - AppendText() ale normálně napiš

RXWINDOW.Text=RxString ;
 
Nahoru Odpovědět
11.9.2017 16:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.