Anfänger: Fehlermeldung bei "digitalWriteFast()"

Hallo Leute,

für ein anderes Projekt möchte ich die Library “digitalWriteFast()” verwenden. Also habe ich die Library runtergeladen, entpackt und den Ordner in den Arduino-Libraries-Ordner kopiert. Die Bibliothek wird mir auch ordnungsgemäß angezeigt.

Ein einfacher Test sollte die Funktion prüfen:

#include <digitalWriteFast.h>



int led = 13;

void setup() {                
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWriteFast(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWriteFast(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Allerdings wird mir beim Kompilieren eine Fehlermeldung ausgespuckt:

"Arduino: 1.6.0 (Windows 7), Platine: “Arduino Uno”
Build-Optionen wurden verändert, alles wird neu gebaut
Verwende die Bibliothek digitalWriteFast im Ordner: C:\Program Files (x86)\Arduino\libraries\digitalWriteFast (legacy)
C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\digitalWriteFast C:\Users\BASTIA~1\AppData\Local\Temp\build4791753386864231100.tmp\Test1.cpp -o C:\Users\BASTIA~1\AppData\Local\Temp\build4791753386864231100.tmp\Test1.cpp.o
In file included from Test1.ino:1:0:
C:\Program Files (x86)\Arduino\libraries\digitalWriteFast/digitalWriteFast.h:1:23: fatal error: WProgram.h: No such file or directory
#include “WProgram.h”

  • ^*
    compilation terminated.
    Fehler beim Kompilieren."

Kann mir jemand sagen, wo das Problem liegt? Offenbar wird eine Datei nicht gefunden?
Muss ich noch etwas anderes tun als den Ordner von hier zu entpacken und in “Libraries” zu kopieren?

Danke für eure Hilfe!
Gruß Bastian

WProgram.h:

Uralt...
Versuche mal eine frischere Version zu finden.

Oder ersetze WProgram.h durch Arduino.h im Quellcode der Lib.

Die letzte Version ist von 2010 :confused:

Lässt sich aber leicht per Hand ausbessern

Serenifly:
Die letzte Version ist von 2010 :confused:

Lässt sich aber leicht per Hand ausbessern

In meiner Version von 2010 findest sich kein WProgram.h.
Auch kein Arduino.h

Dann hast du die normale Version. Die InterruptSafe Version fängt so an

#include "WProgram.h"    //<--- das hier auf Arduino.h ändern
#include <wiring.h>

Hier würde es aber wohl auch die Standard Version tun. InterruptSafe braucht man sowie ich verstehe nur ab PORTF und höher. Spielt also auf dem UNO keine Rolle. Und wenn - wie hier glaube ich der Fall - die Funktion in einer ISR verwendet kann sowieso kein Interrupt dazwischen kommen.

Wobei die InterruptSafe Version sowieso verbuggt ist, wenn man sich mal die “issues” ansieht…

Hallo Leute,
danke für die vielen Antworten! :slight_smile:

Ich habe jetzt "#include “WProgram.h” durch "#include “Arduino.h” ersetzt. Nun tritt derselbe Fehler Bezüglich “#include <wiring.h>” auf…

“…
In file included from Test1.ino:1:0:
C:\Program Files (x86)\Arduino\libraries\digitalWriteFast/digitalWriteFast.h:2:20: fatal error: wiring.h: No such file or directory
#include <wiring.h>
^
compilation terminated.
Fehler beim Kompilieren.”

Schade… :wink:

Gruß Bastian

Also bei mir hat das gereicht

Nimm mal das hier:
https://code.google.com/p/digitalwritefast/downloads/detail?name=digitalWriteFast.zip&can=2&q=
Das sollte gehen

Serenifly:
Also bei mir hat das gereicht

Nimm mal das hier:
https://code.google.com/p/digitalwritefast/downloads/detail?name=digitalWriteFast.zip&can=2&q=
Das sollte gehen

Hallo Serenifly,

danke für deine Antwort! Leider funktioniert es noch immer nicht:

Also, nochmal von vorne:
Ich lade die *.zip-Datei aus deinem Link runter und entpacke sie. Darin sind Unterordner “…\digitalWriteFast\Users\raine001\digitalWriteFast”

In dem letzten Ordner liegen folgende Dateien:
digitalWriteFast.h
digitalWriteFastTestMegax3.pde
digitalWriteFastTestUno.pde
keywords.txt
progprog.py

Ich schließe die Software “Arduino 1.6.0”, kopiere den oben zuletzt genannten Unterordner in “C:\Program Files (x86)\Arduino\libraries” und öffne die Software wieder. (wenn ich den gesamten Ordner inkl. aller oben genannten Unterordner nehme, wird mir zwar die Bibliothek angezeigt, allerdings wird kein Code eingefügt) Bei den Bibliotheken wird mir jetzt “digitalWriteFast” angezeigt.

Ohne weitere Änderungen bekomme ich beim Kompilieren meines oben genannten Testprogramms folgende Fehlermeldung:

Arduino: 1.6.0 (Windows 7), Platine: "Arduino Uno"

Verwende die Bibliothek digitalWriteFast im Ordner: C:\Program Files (x86)\Arduino\libraries\digitalWriteFast (legacy) 
C:\Program Files (x86)\Arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10600 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files (x86)\Arduino\libraries\digitalWriteFast C:\Users\BASTIA~1\AppData\Local\Temp\build7268098125577594094.tmp\Test1.cpp -o C:\Users\BASTIA~1\AppData\Local\Temp\build7268098125577594094.tmp\Test1.cpp.o  
In file included from Test1.ino:7:0:
Test1.ino: In function 'void loop()':
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:170:80: error: invalid type argument of unary '*' (have 'uint8_t {aka unsigned char}')
 #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
                                                                                ^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:105:32: note: in definition of macro 'bitClear'
 #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
                                ^
C:\Program Files (x86)\Arduino\libraries\digitalWriteFast/digitalWriteFast.h:113:35: note: in expansion of macro 'digitalPinToTimer'
                         bitClear(*digitalPinToTimer(P), digitalPinToTimerBit(P)); \
                                   ^
Test1.ino:14:3: note: in expansion of macro 'digitalWriteFast'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:170:80: error: invalid type argument of unary '*' (have 'uint8_t {aka unsigned char}')
 #define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
                                                                                ^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:105:32: note: in definition of macro 'bitClear'
 #define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
                                ^
C:\Program Files (x86)\Arduino\libraries\digitalWriteFast/digitalWriteFast.h:113:35: note: in expansion of macro 'digitalPinToTimer'
                         bitClear(*digitalPinToTimer(P), digitalPinToTimerBit(P)); \
                                   ^
Test1.ino:16:3: note: in expansion of macro 'digitalWriteFast'
Fehler beim Kompilieren.

Ist zumindest eine andere Fehlermeldung als zuvor… :wink:

Jetzt wurde geschrieben, dass ich "#include “WProgram.h” durch "#include “Arduino.h” ersetzen soll? In welcher Datei? In der *.h ist nichts dergleichen drin, die *.pde und die *.py kann ich nicht öffnen.

Danke für eure Geduld!

Gruß Bastian

Jetzt wurde geschrieben, dass ich "#include "WProgram.h" durch "#include "Arduino.h" ersetzen soll? In welcher Datei? In der *.h ist nichts dergleichen drin,

Wenn es nicht drin steht, brauchst du es auch nicht zu ersetzen...

Nachtrag:
Bei mir kommt der Fehler auch....
(da kann man mal sehen, wie lange ich das schon nicht mehr genutzt habe)

Was ich oben geschrieben habe stimmte nicht ganz :frowning:
Das mit wiring.h muss auch raus

Das geht bei mir mit 1.6.1:

Das ist die ausgebesserte Version der InterruptSafe Variante

Aber eben WProgram.h durch Arduino.h ersetzen und wiring.h entfernen

Jouh, das war’s! Es funktioniert! :slight_smile:

Herzlichen Dank für deine Hilfe.

Gruß Bastian