Старая песня про компорт

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Так посылаю из ардуины

  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 пустой и что-бы неделал либо билеберда либо пусто. Ткните носом где тута сабака полылась?

MaksMS
Offline
Зарегистрирован: 11.03.2013

"билеберда" может быть из-за разной заданной скорости порта

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013
Ардуино:
 Serial.begin(9600);
  while (!Serial) {
    ; // void setup капирнул из примера
  }

Программа:

//инициализация структуры

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

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

м/б принимаете не символы,а коды символов?

Dmti
Dmti аватар
Offline
Зарегистрирован: 13.10.2013

Не понял почему? я же принемаю как 

unsigned char bufrd[BUFSIZE];