Hier im Wiki steht was dazu: https://www.roboternetz.de/wissen/in...32_mit_Windows
MfG Mark
Hier im Wiki steht was dazu: https://www.roboternetz.de/wissen/in...32_mit_Windows
MfG Mark
guck mal hier (nur den code):
https://www.roboternetz.de/phpBB2/ze...ag.php?t=32523
gruesse
Danke für eure schnelle unt gute Wieterhilfe!!!
Die beiden Seiten hab ich leider nicht gefunden.. ist mir schon fast peinlich das ich gefragt habe.
Habe trotzdem noch ein paar fragen:
Auf der Wiki Seite fehlen irgendwie die lib die man einfügen muss damit man die Funktionen überhaupt benutzen kann und ich weiß leider nicht wechle es sind (also z.b. die #include<stdio.h>) oder musss man das wie bei dem BCC dardrüber machen?
außerdem irritiert mich die funktion zum senden von Bytes.
WriteFile(hFile, Buffer, Count, &dwCount, 0);
hFile bekommt er oben aus der anderen Funktion,
Buffer sind die zu sendenen Daten,
Count die max. Anzahl der zu sendenen Byte`s,
dwCount die tatsächlich gesendeten Byte`s,
So ich möchte drei zahlen über den Port senden und nun komm ich mit der Funktion zum senden durcheinander:
Also ich vermute das ich dann in Count = 3 setzen muss weil ich drei Byte senden wil, aber wo schreibe ich jetzt meine Zahlen rein die ich senden will? In Buffer kann ich doch nur eine zahl schreiben oder ist das ein Array? Und woher soll ich vorher wissen wieviel Bytes er wirklich sendet (dwCount)?
Bei dem Code von Robocat sieht das ja auch wieder ganz anders aus.
Wenn ich es richtig verstanden habe ist das der Teil wo du Zahlen sendest die du als ASCII-Code interpretierst und dir so ein Wort "bastelst":
sprintf(string,"%c%c%c%c%c",255,86,120,120,86);
Und ich verstehe nicht ganz was du in der while-schleife machst. Ich vermute das du da (weil run = 1) endlos Daten liest und die dann auf dem Bildschirm ausgibts. Lieg ich da riechtig?
Leider kann ich noch nicht ausprobieren ob ich es richtig verstehe da meine Bestellung noch nicht da ist.....
MfG Jan
Nimm doch einfach ein Terminalporgramm. Wieso rackerst du dich damit ab?
Ich galube das ich ein Terminalprogramm nicht benutzen kann, weil ich die werte die gesendet werden sollen erst unter einem C-Programm ausgerechnet werden. Ich möchte über den Port ein Servocontroalboard ansteuern welches ein kleinen Roboterarm steuert und die inverse-kinematik ist halt in C geschrieben. Brauchte also eine lösung wie ich die Werte dann in das servoboard bekomme vom PC und was ich eben auf die schnelle zu Terminalprogramme gefunden habe, war das man die werte selber eingeben muss.
Wenn das auch anders geht sag mir bitte wie, da ich davon null Ahnung habe.
MfG Jan
es sind windows api funktionen, man muss also windows.h einbinden.Auf der Wiki Seite fehlen irgendwie die lib...
dwCount wird von der funktion "ausgefüllt". man kann damit prüfen, ob wirklich alle bytes versendet worden sind....woher soll ich vorher wissen wieviel Bytes er wirklich sendet (dwCount)?
string ist ein char array, das mit sprintf gefüllt wird. genauso würdest du deine 3 bytes da reinschreiben und versenden. es ginge natürlich auch string[0]=65; um den bytewert 65 (ASCII "A") an die erste stelle im array zu schreiben.sprintf(string,"%c%c%c%c%c",255,86,120,120,86);
genau, da werden endlos einzelne bytes gelesen und ausgegeben. wenn du nur daten senden willst, braucht dich das erstmal nicht zu kümmern.Und ich verstehe nicht ganz was du in der while-schleife machst. Ich vermute das du da (weil run = 1) endlos Daten liest und die dann auf dem Bildschirm ausgibts. Lieg ich da riechtig?
um mit der seriellen schnittstelle schon ein wenig spielen zu können, könntest du hinten am PC rx und tx verbinden. wenn man daten sendet, sollte man sie dann sofort wieder einlesen können.
wenn du mehr zu windows api funktionen wissen willst, solltest du dir eine api referenz (zB hier http://win32assembly.online.fr/files/win32api.zip) besorgen. oder du guckst immer auf die microsoft msdn seite.
gruesse von der katz
Hallo robocat,
ich habe mal ein bischen mit dein C-Code rumgespielt und bin auf einige Probleme gestoßen, aber erstmal hier wie er jetzt bei mir aussieht:
Wenn ich diesen nun laufenlasse mit verbundener RxD und TxD Leitung kommen nicht wie ich dachte die zahlen 255,86,120,120,86, sonder immer nur die ganze zeit "V". Dann dachte ich das das an dem %c liegen muss und habe es durch ein %i ersetzt damit er die zahlen auch als zahlen immt und es kam nur "ö".Code:// free code for reading gns9810 gps mouse attached to COM1 port done by robocat // compiler: bcc32, platform: xp #include <stdio.h> #include <windows.h> int main(void) { HANDLE port; DCB dcb; unsigned long dwNum; unsigned char c, string[6]; port=CreateFile("COM1", // hier com-port einstellen GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); // serielle Schnittstelle öffnen if(!port) { printf("failed to open port!\n"); getch(); exit(1); } if(!GetCommState(port, &dcb)) { CloseHandle(port); printf("failed to get port!\n"); getch(); exit(1); } dcb.DCBlength=sizeof(dcb); dcb.BaudRate = CBR_38400; dcb.ByteSize = 8; // 8 Datenbits dcb.Parity = 0; // kein Paritätsbit dcb.StopBits = ONESTOPBIT; // 1 Stoppbit dcb.fBinary = TRUE; dcb.fParity = 0; dcb.fNull=TRUE; if(!SetCommState(port, &dcb)) { CloseHandle(port); printf("failed to set port!\n"); getch(); exit(1); } sprintf(string,"%c%c%c%c%c",255,86,120,120,86); if(WriteFile(port,string,5,&dwNum,NULL))printf("init ok!\n"); while(run) { ReadFile(port,&c,1,&dwNum,NULL); printf("%c",c); } CloseHandle(port); // serielle Schnittstelle schließen return(0); }
Jetzt weiß ich nicht wie ich da meine zahlen senden soll für das Micro-Servoboard von Robotikhardware.
kannst du mir vll nochmal weiterhelfen?
MfG Jan
Warum sprintf ?
Nach dem Init würde ich das noch machenCode:BYTE* Buffer = new BYTE[5]; Buffer = [55,86,120,120,86]; if(WriteFile(port,Buffer,5,&dwNum,NULL)) { if(dwNum == 5) { // Alle Bytes geschrieben } }
// Puffer leer mach was da jetzt drin ist sollte schrott sein
PurgeComm(port,PURGE_TXCLEAR);
PurgeComm(port,PURGE_RXCLEAR);
@robocat
Liest du die GPS Mouse über das NEMA Protoll aus ?
Wenn ja wie fägst du das Hüpfen der Geopos bei stand ab ?
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
@Devil:
das mit den verbundenen tx und rx leitungen habe ich selbst noch nicht ausprobiert. kann also leider nichts dazu sagen.
@NumberFive:
stimmt, es geht ohne sprintf kürzer und eleganter. da war ich wohl blind auf allen augen bzw habe meine c grundlagen nicht ordentlich gelernt. danke für den hinweis.
die maus lese ich zwar über nmea mit einem alten psion handheld aus, lasse aber die koordinaten so wie sie sind. je nach satellitenzahl variiert die position um bis zu einige meter, aber um notfalls einen geocache zu heben, reicht es eigentlich aus. man könnte einen mittelwert aus 2-3 messungen bilden. war es das, was du gemeint hast?
gruesse
Lesezeichen