Mám problém,
mám redukci na seriový port. Na tento port musím připojit robota se třemi servy, která jsou ovládána, přes seriový port. Ale bohužel nemohu ani vytvořit komunikaci pro seriový port a tento daný mikropočítač.
Mohl byste mi prosím nědko poradit?
Děkuji
Fórum › C / C++
Seriovy port v C
testoval sem to pod win xp jak v perlu tak pomoci C a winapi .. zadnej problem to neni .. ale poskodil sem si starej komp takze zdrojaky uz nemam ani od jednoho .. manual: http://msdn.microsoft.com/en-us/library/ms810467.aspx
jouda napsal:
To jatagan : Takze pokud to chapu dobre, tak potrebujes kod pro mikrokontroler i seriovy port v PC? Pokud tomu tak je, mas uz nejakou predstavu o necem jako komunikacni protokol - prikazy pro MCU, nastaveni komunikace...?
Pro mikrokontroler to nepotřebuji, ten už je připravenej od výrobce. Tam je jedno servo ovládáno takto:
<1byte><2byte><3byte>
kde 1byte je synchronizacni, takze vzdy 255
2byte je cislo serva
a 3byte je poloha serva
takze ja si myslim, ze ted potrebuju "jen " nejaky komunikacni program pres ktery toho robota a pocitac propojim pomoci portu a pak na stisk klavesy se odesle vzdy jeden pohyb
To Jatagan : Tak to neni problem... A je to jeste jednodussi, pokud te nezajima odpoved (pokud existuje) od MCU, protoze tam by to pak asi vedlo na vlakno(zalezi na protokolu)... Vsechny potrebne fce ti napsal KIIV, pokud chces jen odesilani, tak ti staci CreateFile, OpenFile, WriteFile a CloseFile. Kdybys u toho necemu nerozumel, tak zas napis....
tak jsem vytvořila toto, zatim bez posílání, ale ted mám porblém, že mi to nidke nejde zkompiovat, takže to dělám asi blbě.. Jako základy programování krapet mám, ale nevim, jestli to otveřiát jako windows application nebo console application a jetsli mi na to stačí codeblock?Děkuji za odpovědi
#include <windows.h>
int main()
{
HANDLE hSerial;
hSerial=CreateFile("COM4",
GENERIC_READ | GENERIC_WRITE, //MOZNA POSTACI JEN WRITE, KDYZ NECHCEME CIST
0,
0,
OPEN_EXISTING,
FILE-ATRIBUTE_NORMAL,
0);
if (hSerial=INVALID_HANDLE_VALUE){
if (GetLastError()==ERROR_FILE_NOT_FOUND){
//Serial port does nost exost. Inform user.
}
//Some other error ocurred. Inform user.
}
DCB dcbSerialParams={0};
dcbSerial.DCBlenght=sizeof(dcbSerialParams);
if (!GetCommState(hSerial,&dcbSerialParams)){
//error getting state
}
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialparams.Parity=NOPARITY;
/*if (!SetCommState(hSerial;&dcbSerialParams)){
//error setting serial port state
}
COMMTIMEOUTS timeouts={0}; //casy v milisekundach
timeouts.ReadInternalTiomeout=50;
timeouts.ReadTotalTimeoutMultiplier=10;
timeouts.WriteTotalTimeoutConstant=50;
timeoutes.WriteTotalTimeoutMultiplier=10;
if (!SetCommTimeouts(hSerial;&timeouts)){
//error ocureed. Inform user.
} */
char szBuff[4]={0}; // n+1
DWOR dwBytesWrite=0;
if (!WriteFile(hSerial,szBuff, 3, &dwBytesWrite, NULL)){
//error ocurres. Report to user.
}
CloseHandle(hSerial);
return 0;
}
Když si opravíš chyby, překlepy a nedoklepy, tak ti to půjde, namátkou (jak to má být správně):
FILE_ATTRIBUTE_NORMAL
if (hSerial==INVALID_HANDLE_VALUE){
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
DWORD dwBytesWrite=0;
To Jatagan : DWOR dwBytesWrite=0; -> typ promenne by mel byt DWORD, s code blocks nedelam, ale urcite by ti to melo jit v devCpp, pokud nechces stahovat visual studio nebo Turbo C++. Asi by to melo jit i jako konzolova aplikace....
Pak tam jeste nikde nevidim pouziti funkce OpenFile... ta by mela predchazet pouziti WriteFile....
To jouda :
tak hobby to není, mám to mít do konce května. Prostě bakalářka. ale začla jsme pozdě, tradičně,ale když rozchodim toto, tak už to snad půjde.
Moc děkuji za rady:)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Sériový port — založil Yety
Seriovy port v C — založil jatagan
Sériový/paralelní port — založil ZaZa
Java - seriovy port — založil martin
C++ a odesílání na sériový port — založil esmen
Moderátoři diskuze