PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VarSpeedServo Problem beim Kompilieren



Farin
13.03.2014, 23:15
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.


#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
{

}

Unser Board ist das ARM Board Arduino Due. Wenn wir für dieses Board den Code kompilieren wollen bekommen wir folgende Fehlermeldung:


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


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.

Dann viel Spaß beim Grübeln und schonmal vielen Dank für eure Unterstützung.

Viele Grüße
Farin

Sisor
16.03.2014, 11:19
falsch : VarSpeedServo servo_armUnten;

richtig: VarSpeedServo servo_armUnten();

Farin
17.03.2014, 10:25
Danke für den Tipp. Haben wir gerade ausprobiert. Klappt aber leider nicht. Aber die Fehlermeldung ist schonmal kürzer geworden ;)

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()'


Diese Fehlermeldung bekomme ich nun auch, wenn ich das Programm für ein Arduino Uno kompilieren möchte.

Gruß
Farin

Sisor
17.03.2014, 15:14
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:


...

#ifndef VarSpeedServo_h
#define VarSpeedServo_h

#include <Arduino.h>
#include <inttypes.h>

...

Farin
18.03.2014, 10:48
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