Problem mit Libery

/*
* Arduino WakeMyPc
 * Ricardo Dias
 * http://ricardo-dias.com/
 *
 * This sketch sends the "magic packet" to wake up
 * a PC on Local Area Network when a push-button
 * is pressed.
 */
#include <Ethernet.h>

#include <UdpRaw.h>


// ARDUINO CONFIG
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Arduino MAC
byte ip[] = { 192, 168, 2, 145 }; // Arduino IP
byte gateway[] = { 192, 168, 2, 1 }; // Gateway IP address
int localPort = 8888; //local port to listen on

// THE TARGET
byte targetIp[] = { 192, 168, 2, 114 };
int targetPort = 5456;
byte wolMac[] = { 0x20,0x89,0x84,0x61,0xCA,0x41 }; // The target PC Mac Address

void setup() {
  Ethernet.begin(mac,ip,gateway);
  UdpRaw.begin(localPort);

  // Will run the sendPkt() function when a button wired to
  // pin 2 is pressed
  attachInterrupt(0, sendPkt, RISING);
}

void loop() {
  delay(1);
}

void sendPkt(){
  // The 'magic packet' consists of 6 times 0xFF followed by 16 times
  // the hardware address (MAC).

  byte all[102];
  int i,c1,j=0;

  for(i = 0; i < 6; i++,j++){
    all[j] = 0xFF;
  }
  for(i = 0; i < 16; i++){
    for( c1 = 0; c1 < 6; c1++,j++)
      all[j] = wolMac[c1];
  }

  UdpRaw.sendPacket(all,102,targetIp,targetPort);
}

In file included from C:\Users\Julian\Documents\Arduino\libraries\Ethernet\Dhcp.cpp:4:
C:\Users\Julian\Documents\Arduino\libraries\Ethernet/w5100.h: In static member function ‘static void W5100Class::setSS()’:
C:\Users\Julian\Documents\Arduino\libraries\Ethernet/w5100.h:365: error: ‘cli’ was not declared in this scope
C:\Users\Julian\Documents\Arduino\libraries\Ethernet/w5100.h: In static member function ‘static void W5100Class::resetSS()’:
C:\Users\Julian\Documents\Arduino\libraries\Ethernet/w5100.h:366: error: ‘sei’ was not declared in this scope

Was mache ich falsch?

Hallo,
das

"C:\Users\Julian\Documents\Arduino\libraries\Ethernet/w5100.h:365: error: 'cli' was not declared in this scope"

ist fast immer- Lib falsch/ an falschen "Ort" installiert.
Gruß und Spaß
Andreas

woehrer:
Was mache ich falsch?

Welche Arduino-Softwareversion hast Du installiert?
Wie lautet der Pfad, in den Du das startbare Arduino-Programm installiert hast?
Lassen sich bei Dir die Beispielprogramme zur Ethernet-Library ("Datei-Beispiele-Ethernet") fehlerfrei kompilieren?

Habe es probiert andere Ethernet Programme gehen auch nicht.
Verwende die Version 1.0.5
Wo soll die den instaliert sein?
Momentag ist sie unter C:/Programme/Arduino

Im libraries Ordner.

Serenifly:
Im libraries Ordner.

Was im libraries Ordner?
Das da die Libraries rein gehören weis ich selber aber wohin mit dem Programm?

woehrer:
wohin mit dem Programm?

Ich weiß nicht, wie es unter Windows vorgesehen ist, aber wenn Du auf Deiner Windows-Installation als "Eingeschränkter Benutzer" angemeldet bist, dann bist Du bei der Arduino-Software auf der sicheren Seite, wenn Du die Software nicht unter C:/Programme installierst, wo Du bei neueren Windowsversionen keinen Datei-Vollzugriff mehr hast. Sondern wenn Du einen Pfad wählst, unter dem der angemeldete User Datei-Vollzugriff hat, also unterhalb Deines User-Ordners.

Bei mir liegt die Arduino-Software unter dem Usernamen abgelegt und ich installiere NICHT aus der Installer-Datei, sondern lade die ZIP-Datei herunter und installiere daraus.

Wenn Du mit dem Namen "XYZ" angemeldet bist, hast Du auf dem Desktop bei WIN7 standardmäßig ein Userordnersymbol "XYZ" liegen. Oder wenn Du über den Windows-Startbutton und "Computer-Benutzer-XYZ" gehst, wird als Verzeichnis angezeigt:
C:\Users\XYZ
Dort installierst Du dann die Arduino-Software in der gewünschten Version, Du kannst mehrere Versionen parallel installiert haben:
C:\Users\XYZ\arduino-1.0.3
C:\Users\XYZ\arduino-1.0.5
C:\Users\XYZ\arduino-1.5.6-r2

Dein Sketch-Verzeichnis, wo dann die Sketche hin installiert werden, wird dann standardmäßig im "Eigene Dokumente"-Ordner angelegt, also z.B.:
C:\Users\XYZ\Documents\Arduino
Diesen Ordner kannst Du dann aber selbst frei einstellen und auswählen.

Wichtig ist insbesondere, dass der "Sketchordner", in dem die Sketche abgespeichert werden, NICHT identisch ist mit dem Ordner, in dem die Software installiert ist. Und dass der Anwender auf alle Dateien Datei-Vollzugriff hat, was insbesondere für Windowsinstallationen als "Eingeschränkter Benutzer" wichtig ist.

Mit dieser manuellen Installation aus dem ZIP funktioniert es jedenfalls immer.
Die Installer-Version und wo und wie das Programm damit installiert wird, habe ich nicht getestet.

An Deiner Programminstallation scheint jedenfalls krumm zu sein, dass Du mitgelieferte Standard-Libraries ("Ethernet") in dem Verzeichnis instaliert hast, in dem eigentlich nur zusätzliche User-Libraries von Drittanbietern installiert sein sollten.
C:\Users\Julian\Documents\Arduino\libraries\Ethernet
Die Ethernet-Library sollte dort meines Wissen nach nicht liegen. Entweder hast Du die Software mehrfach installiert, nicht nur unter Programme, sondern auch nochmal unter "Eigene Dokumente". Oder Du hast eine zusätzliche Library gleichen Namens nochmal extra installiert. Wenn Du das Programm nochmal manuell neu installierst so wie oben vorgeschlagen, verwende als Sketch-Ordner bitte nicht "C:\Users\Julian\Documents\Arduino" sondern einen anderen Ordner. Oder lösche im Verzeichnis C:\Users\Julian\Documents\Arduino\libraries\ alle Libraries raus, die dort nicht hingehören.

Hab jetzt lang rumprobiert und bin jetzt bei folgenden zwei Fehlern angelangt.
Vllt kann mir da jemand weiter helfen

In file included from Wake_up_on_lan.ino:7:
C:\Users\Julian\Desktop\Programm\Arduino\libraries\Ethernet/UdpBytewise.h:70: error: conflicting return type specified for 'virtual void UdpBytewiseClass::write(uint8_t)'
C:\Users\Julian\Desktop\Programm\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'

woehrer:
C:\Users\Julian\Desktop\Programm\Arduino\libraries\Ethernet/UdpBytewise.h:70: error: conflicting return type specified for 'virtual void UdpBytewiseClass::write(uint8_t)'

Kannst Du denn jetzt die Beispiele zur Ethernet-Library fehlerfrei kompilieren?
Wenn nein, mußt Du erstmal das Problem in Ordnung bringen!

Wenn ja, ist augenscheinlich Deine Library nicht kompatibel zur aktuellen Arduino-Version.

Hast Du dann mal probiert, in Zeile 70 der genannten Datei UdpBytewise.h und der dazugehörigen cpp-Datei die Deklaration von "uint8_t" nach "byte" zu ändern?

Habe es durch byte ersetzt jetzt bekomme ich folgenden Fehler

C:\Users\Julian\Documents\Arduino\libraries\Ethernet/UdpBytewise.h:49: error: 'byte' does not name a type

Die Beispiel Programme funktionieren

Der Parameter ist nicht das Problem. Hier überschreibt eine Klasse eine Methode der Basisklasse, aber hat einen anderen Rückgabewert. Die eine Methode gibt einen size_t zurück und die andere nichts.

Nur welche Klasse ist das?
Ich hab jetzt schon verschwidene Versionen von libraries versucht.
Habe das Programm schon zweimal an verschiedenen Orten instaliert und Deinstalliert.
Mich würd mich interesieren funktionierts bei jemand anderem?
Habe gerade keine andere Hardware zum es testen

Trotzdem würd ich den Fehler gern finden und beheben

edit: In UdpBytewise.h Zeile 70 wird “uint8_t” verwendet
und in print.h Zeile 48 auch.

woehrer:
Habe es durch byte ersetzt jetzt bekomme ich folgenden Fehler

C:\Users\Julian\Documents\Arduino\libraries\Ethernet/UdpBytewise.h:49: error: ‘byte’ does not name a type

Die Beispiel Programme funktionieren

Was ist denn das jetzt wieder für eine Installation?

Wenn das Programm im Pfad
C:\Users\Julian\Desktop\Programm\Arduino
installiert ist, dann ist die Ethernet-Library unter
C:\Users\Julian\Desktop\Programm\Arduino\libraries\Ethernet
vollkommen richtig. Soweit OK, das ist die mitgelieferte Ethernet-Library.

Aber wo kommt die Ethernet-Library in diesem Pfad her:
C:\Users\Julian\Documents\Arduino\libraries\Ethernet/
???

In dem Pfad unter “Documents” liegt der Sketch-Ordner, und da dürfen unter “libraries” nur ZUSÄTZLICHE LIBRARIES VON DRITTANBIETERN enthalten sein. Und mit diesen Libraries darf es KEINEN NAMENSKONFLIKT mit den Libraries geben, die bei der Arduino-Software schon mitgeliefert werden, so wie z.B. Ethernet.
C:\Users\Julian\Desktop\Programm\Arduino\libraries\Ethernet
C:\Users\Julian\Documents\Arduino\libraries\Ethernet

Der Namenskonflikt ist doch offensichtlich: Zweimal eine Library mit dem Namen Ethernet. Einmal die “original” Ethernet-Library, die zur Arduino-Software gehört.

Oder einmal irgendwelcher dazukopierter Dreck bei \Documents\Arduino\libraries\Ethernet

Das ist ein absolutes No-Go, dass Du in einer Softwareinstallation zwei verschiedene, namensgleiche Libraries an verschiedenen Orten gespeichert hast, die im Suchpfad des Compilers und Linkers liegen.

Das mit dem Ethernet kennt man doch aus dem Kinofilm “Highlander”: Es kann nur einen geben…
In diesem Fall: Nur EINEN Library-Ordner mit dem Namen “Ethernet” in einer Arduino-Softwareinstallation.

Das zweite Ethernet ist extern das ist bei der Standard installation nicht dabei.
Darin befindet sich zb. die <UdpBytewise.h> wenn ich den ordner anderst nenn ändert sich nix.
Aber ich hab den Namenskonflikt dadrin das stimmt
jetzt muss ich mir mal überlegen wie ich den da raus bekomm

Wie wäre es, wenn Du die externe Lib einfach weg lässt?
Wenn ich das richtig sehe willst Wake on LAN Pakete senden, das geht super mit der vorhandenen Ethernet Library:

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

...

/**********************************************************************
 * send out an Wake-on-LAN package for a given MAC address
 *
 * @param byte mac[] - an array of 6 bytes representing the MAC address
 **********************************************************************/
void WOL(byte mac[6]) {
  
  //the first 6 bytes of a WoL package are "0xFF"
  byte preamble[] = {
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF    };
  char i;

  //send a UDP package to the broadcast address of the actual configured network
  //to UDP port 7
  Udp.beginPacket(bc, 7);
  
  //send preamble
  Udp.write(preamble, sizeof preamble);

  //now send the MAC address 16 times as recommended by WoL protocol
  for (i=0; i<16; i++)
    Udp.write(mac, 6);

  //finally end the package and send out
  Udp.endPacket();
}

Die Funktion WOL bekommt einfach das Array mit der MAC-Adresse und schickt dann damit ein WoL Paket raus.

Mario.

woehrer:
jetzt muss ich mir mal überlegen wie ich den da raus bekomm

Wenn das eine ALTERNATIVE Ethernet library sein soll, die Du ANSTELLE der originalen Library verwenden möchtest, dann bekommst Du den Namenskonflikt der zwei gleichnamigen Libraries dadurch entfernt, dass Du die originale Ethernet-Library löschst.

Habe den Sketch so kopiert wie es da steht und bekomme folgende Fehlermeldung

edit: Kannst du vllt den Kompletten code mal reinstellen?

Wake_up_on_lan.ino: In function 'void WOL(byte*)':
Wake_up_on_lan:21: error: 'Udp' was not declared in this scope

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

Wake_up_on_lan:21: error: 'bc' was not declared in this scope

Hallo,

schließe alle Programme und lösche im C:\Windows\Temp Ordner alles was möglich ist (manches kann zur Laufzeit nicht gelöscht werden) und lösche im Pfad ... User\AppData\local\Temp alles komplett. Wenn dann immer noch nichts geht, deinstalliere Dein gesamtes Arduino IDE. Dann nimmste die .zip Version zum Download, entpackst an den Ort Deiner Wahl, nimmst ein Bsp. der Ethernet oder sonstwas und läßt es kompilieren. Das muß erstmal funktionieren.