Старая песня про компорт
- Войдите на сайт для отправки комментариев
Втр, 19/11/2013 - 19:21
Так посылаю из ардуины
Serial.print("*a"); Serial.println(Status); Serial.print("*b"); Serial.println(FS); Serial.print("*c"); Serial.println(FH); Serial.print("*d"); Serial.println(FL); Serial.print("*e");
Так вижу в терминале
*а0 *b0 *c219 *d216 *e
А так пытаюсь принять данные в С++Builder-е
Поток чтения:
DWORD WINAPI ReadThread(LPVOID) { COMSTAT comstat; DWORD btr, temp, mask, signal; overlapped.hEvent = CreateEvent(NULL, true, true, NULL); SetCommMask(COMport, EV_RXCHAR); while(1) { WaitCommEvent(COMport, &mask, &overlapped); signal = WaitForSingleObject(overlapped.hEvent, INFINITE); if(signal == WAIT_OBJECT_0) { if(GetOverlappedResult(COMport, &overlapped, &temp, true)) if((mask & EV_RXCHAR)!=0) { ClearCommError(COMport, &temp, &comstat); btr = comstat.cbInQue; if(btr) { ReadFile(COMport, bufrd, btr, &temp, &overlapped); counter+=btr; ReadPrinting(); } } } } }
А так пытаюсь расшифровать
AnsiString srtok = AnsiString((char)*bufrd); //переменая для удобства if(srtok.Pos("*e")){ //Пришол ли псевдо конец строки int i = srtok.Pos("*a"); int b = srtok.Pos("*b") - (srtok.Pos("*a")+2); int d=1; for ( int s = i; i<=b; i++){ d *= 10; Status += srtok[s]*d; } i = srtok.Pos("*b"); b = srtok.Pos("*c") - (srtok.Pos("*b")+2); d=1; for ( int s = i; i<=b; i++){ d *= 10; fS += srtok[s]*d; } i = srtok.Pos("*c"); b = srtok.Pos("*d") - (srtok.Pos("*c")+2); d=1; for ( int s = i; i<=b; i++){ d *= 10; fH += srtok[s]*d; } i = srtok.Pos("*d"); b = srtok.Pos("*e") - (srtok.Pos("*d")+2); d=1; for ( int s = i; i<=b; i++){ d *= 10; fL += srtok[s]*d; }
Только bufrd пустой и что-бы неделал либо билеберда либо пусто. Ткните носом где тута сабака полылась?
"билеберда" может быть из-за разной заданной скорости порта
Программа:
//инициализация структуры
DCB dcb.BaudRate = StrToInt(9600);
dcb.fOutxCtsFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE; /
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
//загрузить структуру DCB в порт
if(!SetCommState(COMport, &dcb))
{ COMClose(); Form1->StatusBar1->Panels->Items[0]->Text = "Не удалось установить DCB"; return; }
м/б принимаете не символы,а коды символов?
Не понял почему? я же принемаю как