falsch : VarSpeedServo servo_armUnten;
richtig: VarSpeedServo servo_armUnten();
Hallo zusammen,
wir benutzen Servomotoren um einen Roboterarm zu bewegen und wollen die Library VarSpeedServo nutzen um die Geschwindigkeit der Servos steuern zu können. Allerdings haben wir ein Problem beim kompilieren des Programmcodes.
Unser Board ist das ARM Board Arduino Due. Wenn wir für dieses Board den Code kompilieren wollen bekommen wir folgende Fehlermeldung:Code:#include <VarSpeedServo.h> // hier wird die Servo-Befehls-Bilbliothek eigebunden // diese ist standardmäßig vorhanden und muss nicht extra installiert werden VarSpeedServo servo_armUnten; int pos = 0; // variable to store the servo position void setup() // Setup-Funktion die einmalig nach dem Start des Arduino ausgeführt wird. { servo_armUnten.attach(5); pos=90; servo_armUnten.slowmove(pos, 1); // tell servo to go to position in variable 'pos' } // Ende der Serup-Funktion void loop() // Loop-Funktion, die das Board immer wieder durchläuft { }
Testweise haben wir das ganze mal für ein beliebiges AVR Board kompilieren lassen, was problemlos funktionierte. Der Fehler liegt also offenbar in der VarSpeedServo Library, da diese anscheinend nur mit AVR Boards funktioniert. Hat jemand eine Idee, wie wir dieses Problem lösen können? Am liebsten wäre es uns, wenn wir die Library einfach irgendwie anpassen könnten, da diese die Geschwindigkeitssteuerung ganz simpel über einen einzigen Parameter ermöglicht.Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Due (Programming Port)"
Build options changed, rebuilding all
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:158: error: expected constructor, destructor, or type conversion before '(' token
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp: In function 'void initISR(timer16_Sequence_t)':
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:206: error: 'TCCR1A' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:207: error: 'TCCR1B' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:207: error: 'CS11' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:207: error: '_BV' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:208: error: 'TCNT1' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:214: error: 'TIFR1' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:214: error: 'OCF1A' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:215: error: 'TIMSK1' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:215: error: 'OCIE1A' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp: In member function 'void VarSpeedServo::writeMicroseconds(int)':
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:368: error: 'SREG' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:369: error: 'cli' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp: In member function 'void VarSpeedServo::write(int, uint8_t)':
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:414: error: 'SREG' was not declared in this scope
C:\Users\Stefan\Documents\Arduino\libraries\VarSpe edServo\VarSpeedServo.cpp:415: error: 'cli' was not declared in this scope
Dann viel Spaß beim Grübeln und schonmal vielen Dank für eure Unterstützung.
Viele Grüße
Farin
falsch : VarSpeedServo servo_armUnten;
richtig: VarSpeedServo servo_armUnten();
Danke für den Tipp. Haben wir gerade ausprobiert. Klappt aber leider nicht. Aber die Fehlermeldung ist schonmal kürzer geworden
Diese Fehlermeldung bekomme ich nun auch, wenn ich das Programm für ein Arduino Uno kompilieren möchte.Code:Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Due (Programming Port)" sketch_mar17a.ino: In function 'void setup()': sketch_mar17a:12: error: request for member 'attach' in 'servo_armUnten', which is of non-class type 'VarSpeedServo()' sketch_mar17a:15: error: request for member 'slowmove' in 'servo_armUnten', which is of non-class type 'VarSpeedServo()'
Gruß
Farin
Ne, war Schachsinn, die Klammern müssen weg.
Ich hab mir mal die Library angeschaut und den Fehler festgestellt:
Die Library Arduino.h wird nicht geladen.
Also müsstet ihr die Datei VarSpeedServo.h erweitern um den Eintrag:
#include <Arduino.h>
Dann steht im dort nachher:
Code:... #ifndef VarSpeedServo_h #define VarSpeedServo_h #include <Arduino.h> #include <inttypes.h> ...
Das hilft leider auch nicht. Die Fehlermeldung bleibt genau die gleiche.
Wie ich im ersten Beitrag schon geschrieben habe, vermute ich auch keinen grundsätzlichen Fehler im Code, da er ja beim Kompilieren für ein AVR Board fehlerfrei funktioniert. Allerdings besitzen wir ein ARM Board (Arduino Due) und da tritt die oben genannte Fehlermeldung auf. Ich habe mir auch mal die VarSpeedServo.h nochmal angeschaut und denke es liegt an der fehlenden Einbindung von ARM Boards, denn für sämtliche AVR Boards werden diverse Variablen deklariert.
Nun bin ich allerdings leider auch ziemlicher Anfänger, was Objekt orientierte Programmiersprachen angeht, sodass ich zwar im Groben verstehe, was da in dem Code steht, aber jede einzelne Zeile nachvollziehen bzw. selbst anzupassen, gelingt mir dann eben doch noch nicht.
Daher hoffe ich noch weiter auf eure Hilfe um das Problem lösen zu können.
VG
Farin
Lesezeichen