Hallo zusammen,
ich bin am verzweifeln
Ich habe ein RN-Mega 2560 und möchte vom PC aus Daten senden und empfangen.
Wenn ich zum ersten mal den Wert 127X1 sende kann ich diesen Wert auch empfangen. Beim zweiten Durchlauf klappt das Senden wohl auch, aber das Empfangen klappt nicht. Ich empfange immer Schrott, z.B. 127XÌÌÌÌ.
Das Senden und Empfangen sieht so aus:
Das Programm auf dem Controller sieht so aus:Code:if(!WriteFile(hSerial, &write_char, laenge_write_char, &dwBytesWrite, NULL)) { //error occurred. Report to user msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!", (LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION); EndDialog(hwnd, 1); return TB_ERROR; } else { string_parameter_write = write_char; int laenge_string_write = string_parameter_write.length() - 2; string_parameter_write2 = string_parameter_write.substr(laenge_string_write,2); int laenge_write_r = strlen ("\r"); if(!WriteFile(hSerial, "\r", laenge_write_r, &dwBytesWrite, NULL)) { //error occurred. Report to user msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei WriteFile!", (LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION); EndDialog(hwnd, 1); return TB_ERROR; } else { string_fehlerfrei_gesendet = "Ja"; } } }while(string_fehlerfrei_gesendet == "Nein" ); string_fehlerfrei_gesendet = "Nein"; int do_zaehler = 1; do // Ausführen bis der empfangene Wert der Achse, etc. gleich des gesendeten Wertes der Achse ist { do_zaehler ++; int laenge_read_buffer = sizeof (dwBytesRead); //read_buffer[8] = ' '; if(!ReadFile(hSerial, &read_buffer, 7, &dwBytesRead, NULL))//n, &dwBytesRead, NULL)) { //error occurred. Report to user. msgboxIDss = MessageBox(NULL, (LPCWSTR)L"Fehler bei ReadFile!", (LPCWSTR)L"Fehler", MB_OK | MB_ICONEXCLAMATION); EndDialog(hwnd, 1); return TB_ERROR; } // Achsenwert übergeben string_parameter_read = read_buffer;
Ich krieg es einfach nicht hin. Vielleicht hat ja jemand einen Tip.Code:$prog , 255 , &B11011100 , '&B11011001 , 'Quarz an / Teiler aus / Jtag aus $regfile = "m2560def.dat" $hwstack = 82 '80 $framesize = 68 ' 64 $swstack = 68 '44 $crystal = 16000000 'Quarzfrequenz Config Pind.5 = Output Led Alias Portd.5 $baud = 19200 'Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'Open "com1:" For Binary As #1 'RS232 'Open "com2:" For Binary As #2 'RS232 Open "com3:" For Binary As #3 'RS232 'Open "com4:" For Binary As #4 'RS232 Dim Eingabe As String * 50 Dim Ausgabe As String * 6 Dim String1 As String * 3 Dim String2 As String * 2 Dim X1_position As Integer Dim Y1_position As Integer Dim Z1_position As Integer Config Porth = Output Out1 Alias Porth.0 Out2 Alias Porth.1 Out3 Alias Porth.2 Out4 Alias Porth.3 Out5 Alias Porth.4 Out6 Alias Porth.5 Out7 Alias Porth.6 Out8 Alias Porth.7 Declare Sub Daten_empfangen() Declare Sub Daten_senden() Do Led = 0 Call Daten_empfangen() Led = 1 Call Daten_senden() Loop End Sub Daten_empfangen() Input Eingabe String1 = Mid(eingabe , 1 , 3) String2 = Mid(eingabe , 4 , 2) Ausgabe = String1 + String2 + Chr(13) If String2 = "X1" Then X1_position = Val(string1) End If If String2 = "Y1" Then Y1_position = Val(string1) End If If String2 = "Z1" Then Z1_position = Val(string1) End If End Sub Sub Daten_senden() If Ausgabe = "127X1" Then Led = 0 Waitms 20 Led = 1 Waitms 20 Led = 0 Waitms 20 Led = 1 Waitms 20 Led = 0 Waitms 20 Led = 1 Waitms 20 Led = 0 Waitms 20 Led = 1 Waitms 20 Else Led = 0 Wait 2 Led = 1 Wait 2 End If Print Ausgabe End Sub
Grüße
datatom







Zitieren

Lesezeichen