Go Down

Topic: Problem mit PacketBuffer bei UDP-Empfang ? (Read 918 times) previous topic - next topic

kuno86

Feb 11, 2011, 05:24 pm Last Edit: Feb 14, 2011, 05:35 pm by kuno86 Reason: 1
Hallo,
ich habe in den lezten Tagen ein Programm für meinen Arduino "ATmega328" mit Ethernetshield und L298P-Motorshield geschrieben, dass ein RC-Auto kontrollieren kann.
Ich sende mit einem VB-Programm einen 8-Stelligen String den ich im Arduino mit über ein Char array auslesen kann.
Soweit funktioniert auch noch alles einwandfrei.

Nun habe ich allerdings noch ein Problem:

Das Arduino-Programm nimmt manchmal nach einer Bestimmten Zeit keine neuen Netzwerkdaten mehr an und hat verschiedene Symbole im Steuerstring, die nicht vom VB-Programm kommen.
Ich bin mir nicht sicher, ob sich das Ethernetshield aufhängt, jedenfalls hilft dann nur noch der Reset-knopf oder code neu hochladen.

Hier noch mein aktueller Quellcode:
Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
#include <Udp.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 56, 35, 178 };
byte gateway[] = { 10, 56, 35, 1 };
byte subnet[] = { 255, 255, 255, 0 };

#define MAX_SIZE 32 // maximum packet size
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet
byte remoteIp[4]; // holds recvieved packet's originating IP
unsigned int remotePort; // holds received packet's originating port

const int ledPin = 13;

int E1 = 5;
int M1 = 4;
int E2 = 6;
int M2 = 7;


void setup() {
 Ethernet.begin(mac, ip , gateway, subnet);
 Udp.begin(9100);
 Serial.begin(9600);
 pinMode(ledPin, OUTPUT);
 pinMode(M1,OUTPUT);
 pinMode(M2,OUTPUT);
}

void loop() {
 int packetSize=Udp.available();  // holds received packet size
 int DriveSpeed = 0;
 boolean SteuerFehler;
 if(packetSize)
   {
   digitalWrite(ledPin,HIGH);
   int packetSize = packetSize-8;   ws // minus 8-Bit Header
   Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);
   Serial.println(packetBuffer);
   Serial.println(packetSize);
   }
 if(packetSize==0)
   {digitalWrite(ledPin,LOW);}

/*    
for (int i=1;i!=8;i++)    //Sucht nach ungültigen Zeichen im Steuerstring
 {
 SteuerFehler=false;
 if(packetBuffer[i]!='-' |packetBuffer[i]!='x' |packetBuffer[i]!='0' |packetBuffer[i]!='1' |packetBuffer[i]!='2' |packetBuffer[i]!='3' |packetBuffer[i]!='4' |packetBuffer[i]!='5' |packetBuffer[i]!='6' |packetBuffer[i]!='7' |packetBuffer[i]!='8' |packetBuffer[i]!='9')
   {SteuerFehler=true;}
 }
 
 
 
if (SteuerFehler)
 {
 Serial.println("--------Fehler--------");
 packetBuffer[0]='-';    //Reset des Steuerstring auf alles aus
 packetBuffer[1]='-';
 packetBuffer[2]='-';
 packetBuffer[3]='-';
 packetBuffer[4]='-';
 packetBuffer[5]='-';
 packetBuffer[6]='-';
 packetBuffer[7]='-';
 
 //Udp.close();        //Udp resetten zum fixen ?!?
 //Udp.begin(9100);    //Udp.close() geht nicht...???
 
 SteuerFehler=false;
 }
*/

if(packetBuffer[4]!='-')
 {
   switch(packetBuffer[4]){
   case '0': DriveSpeed=30;break;
   case '1': DriveSpeed=55;break;
   case '2': DriveSpeed=80;break;
   case '3': DriveSpeed=105;break;
   case '4': DriveSpeed=130;break;
   case '5': DriveSpeed=155;break;
   case '6': DriveSpeed=180;break;
   case '7': DriveSpeed=205;break;
   case '8': DriveSpeed=230;break;
   case '9': DriveSpeed=255;break;
   }
 }
 
if(packetBuffer[0]=='-' | packetBuffer[1]=='-') //Stillsttand
   {analogWrite(E1,0);}
if(packetBuffer[0]=='x')  
   {digitalWrite(M1,HIGH);analogWrite(E1,DriveSpeed);} //Rückwärts ?    //
if(packetBuffer[1]=='x')                       //
   {digitalWrite(M1,LOW);analogWrite(E1,DriveSpeed);}  //Vorwärts ?     //


if(packetBuffer[2]=='-' | packetBuffer[3]=='-') //Geradeaus
   {analogWrite(E2,0);}
if(packetBuffer[2]=='x')                        //Links
   {digitalWrite(M2,LOW);analogWrite(E2,255);}  
if(packetBuffer[3]=='x')                        //Rechts                  
   {digitalWrite(M2,HIGH);analogWrite(E2,255);}      
   

}


Falls nötig kann ich auch noch mein VB-Programm hochladen.
Danke schonmal  :)


Ist irgendwie gelöst, da es komischerweise nur noch auftritt, wenn ich die COM-Konsole offen hab :~

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy