Go Down

Topic: Arduino Ver 1.0 libraries udp ... (Read 981 times) previous topic - next topic

userport

Hallo,
ich habe Probleme nach der Umstellung auf die Version 1.0 der IDE.
Ich verstehe die Releasenote nicht richtig.
Was muss ich ändern wenn ich Ehternet und UDP verwnden möchte.
Anbei ein Programm das mit der alten Verion ging.
Ich habe auch mal die udp.h in EthernetClient.h geändert, hatte aber weiterhin Fehler.
:smiley-fat:


//Senden und epfangen von Daten per UDP

//Bibliothek LCD4Bit_mod.h einbinden
#include <LCD4Bit_mod.h>
//Neues Objekt vom Type LCD4Bit_mod erzeugen und Anzahl Zeilen übergeben
LCD4Bit_mod lcd = LCD4Bit_mod(2);

// Wird für Arduino version groesser 0018 gebraucht fuer Ethernet
#include <SPI.h>        //Bibliothek SPI.h einbinden (Wird für Arduino version groesser 0018 gebraucht fuer Ethernet)
#include <Ethernet.h>  //Bibliothek Ethernet.h einbinden fuer Netzwerk
#include <Udp.h>         //Bibliothek Udp.h einbinden fuer UDP


int taste_enter=742;  //Taste Enter vom LCD4Bit
int taste_links=504;  //Taste Links vom LCD4Bit
int taste_rechts=0;  //Taste Rechts vom LCD4Bit
int taste_oben=143;  //Taste Oben vom LCD4Bit
int taste_unten=327;  //Taste Unten vom LCD4Bit
int taste_nix=1023;  //Keine Taste gedruckt vom LCD4Bit

int lcd_tastatureingabe; //Variable fuer die Tastatureingaben vom LCD4Bit
char lcd_tastatureingabe_text; //Variable fuer die Tastatureingaben vom LCD4Bit

//Arduino Netzwerkdaten
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Macadresse Arduino
byte ip[] = {192,168,112,177 };// IP-Adresse Arduino
unsigned int localPort = 8869;      // Localer Port auf dem der Arduino auf Daten wartet

//Remotepc Daten
byte remoteIp[4]= {192,168,123,13 };  // IP-Adresse des Remotepc
unsigned int remotePort=8868;  // Port an den Arduino Daten sendet (Remotepc)

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //Puffer fuer eingehende Pakete
char  ReplyBuffer[] = "acknowledged";       // Ein Text zun zuruecksenden


void setup() {
  // start Ethernet und UDP:
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);

  Serial.begin(9600);
  pinMode(13, OUTPUT);  //Port 13 als Ausgang für Herzschlag
  lcd.init();  //lcd initialisieren
  lcd.clear();  //lcd loeschen
  lcd.printIn("Bereit");  //Bereit auf Display ausgeben
}

void loop() {
  // Wenn Daten verfuegbar dann lesen
  int packetSize = Udp.available(); // Daten mit UDP header
  // Udp.sendPacket( "bereit", remoteIp, remotePort);
  //delay(10);
  //Udp.sendPacket( "bereit 1", remoteIp, remotePort);
  //delay(10);
  //Udp.sendPacket( "bereit 2", remoteIp, remotePort);
  //delay(10);
  //Udp.sendPacket( "bereit 3", remoteIp, remotePort);
  //delay(10);
  //Udp.sendPacket( "bereit 4", remoteIp, remotePort);
  //delay(10);
  //Udp.sendPacket( "bereit 5", remoteIp, remotePort);
  //delay(10);
  lcd_tastatureingabe = analogRead(0);    // liest Eingaben von der LCD Tastatur

  lcd.cursorTo(2, 0);  //line=2, x=0

 
  if (lcd_tastatureingabe==taste_enter){lcd_tastatureingabe_text="enter";Serial.println ("Enter");lcd.printIn("Enter                ");};
  if (lcd_tastatureingabe==504) {lcd_tastatureingabe_text="links";Serial.println ("links");lcd.printIn("links               ");};
  if (lcd_tastatureingabe==143) {lcd_tastatureingabe_text="oben";Serial.println ("oben");lcd.printIn("oben                  ");};
  if (lcd_tastatureingabe==327) {lcd_tastatureingabe_text="unten";Serial.println ("unten");lcd.printIn("unten                ");};
  if (lcd_tastatureingabe==0) {lcd_tastatureingabe_text="rechts";Serial.println ("rechts");lcd.printIn("rechts                ");};
  if (lcd_tastatureingabe==1023) {lcd_tastatureingabe_text="nix";Serial.println ("nix");lcd.printIn("nix                   ");};
Udp.sendPacket( lcd_tastatureingabe_text, remoteIp, remotePort);
  if(packetSize)
  {
    packetSize = packetSize - 8;      // 8 byte header abziehen
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
   

    // read the packet into packetBufffer and get the senders IP addr and port number
    Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);  //Liest Daten vom RemotePC in packetBuffer
    Serial.println(packetBuffer);  //Daten vom Remotepc ausgeben
    lcd.cursorTo(2, 0);  //line=2, x=0
    lcd.printIn(packetBuffer); //Daten vom Remotepc auf LCD ausgeben
    // Udp.sendPacket( "bereit", remoteIp, remotePort);
    Udp.sendPacket( ReplyBuffer, remoteIp, remotePort);
  }
  delay(10);
}


Folgende Fehlermeldungen erscheinen:

H_UDPSendReceiveString:33: error: 'UDP_TX_PACKET_MAX_SIZE' was not declared in this scope
H_UDPSendReceiveString.cpp: In function 'void setup()':
H_UDPSendReceiveString:40: error: 'Udp' was not declared in this scope

As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetClient.

H_UDPSendReceiveString.cpp: In function 'void loop()':
H_UDPSendReceiveString:51: error: 'Udp' was not declared in this scope

As of Arduino 1.0, the Udp class in the Ethernet library has been renamed to EthernetClient.

H_UDPSendReceiveString:69: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:70: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:71: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:72: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:73: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:74: error: invalid conversion from 'const char*' to 'char'
H_UDPSendReceiveString:84: error: 'packetBuffer' was not declared in this scope
H_UDPSendReceiveString:84: error: 'UDP_TX_PACKET_MAX_SIZE' was not declared in this scope



Gruss userport

Hallo,
ich habe deinen Code mal "zerpflückt".
Hier die Fehler:

a)
Code: [Select]
#include <Udp.h>
ersetzen durch
Code: [Select]
#include <EthernetUdp.h>

b)
Code: [Select]
Udp.sendpacket(...)
ersetzen durch
Code: [Select]
//Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    //Udp.write(<was immer auch für einen text>);
    //Udp.endPacket();


c)
Code: [Select]
int packetSize = Udp.available();
ersetzen durch
Code: [Select]
int packetSize = Udp.parsePacket();

d)
Code: [Select]
Udp.readPacket(packetBuffer,UDP_TX_PACKET_MAX_SIZE, remoteIp, remotePort);  //Liest Daten vom RemotePC in packetBuffer
ersetzen durch
Code: [Select]
Udp.read(packetBuffer,UDP_TX_PACKET_MAX_SIZE);

Damit konnte ich es auf der 1.0 kompilieren. Da ich aber weder deine LCD library noch ein LCD besitze kann ich den code leider nicht testen.

Grüße
Anaximander

Go Up