PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ReadFile und WriteFile mit RN-MEGA2560



datatom
07.09.2011, 20:50
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:



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;


Das Programm auf dem Controller sieht so aus:



$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


Ich krieg es einfach nicht hin. Vielleicht hat ja jemand einen Tip.

Grüße

datatom

datatom
12.09.2011, 18:37
Hat denn hier keiner einen RN-Mega2560 Controller und kann mir seinen ReadFile und WriteFile als Beispiel zusenden?

datatom
22.09.2011, 03:58
---vielleicht hat einer einen RN-Control und schickt mir freundlicherweise seinen C++ -Code mit ReadFile und WriteFile zu? Bitte, Bitte.