Pages: [1]   Go Down
Author Topic: Problem mit PacketBuffer bei UDP-Empfang ?  (Read 854 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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  smiley


Ist irgendwie gelöst, da es komischerweise nur noch auftritt, wenn ich die COM-Konsole offen hab smiley-confuse
« Last Edit: February 14, 2011, 11:35:49 am by kuno86 » Logged

Pages: [1]   Go Up
Jump to: