Hi,
ich versuche seit ein paar Stunden mich darin einen Code, der in einer .ino-Datei lag zu modularisieren und je erstmal Gewisse Teile des Codes in eine .cpp und .h auszulagern.
Dabei erhalte ich eine Fehlermeldung mit dem schönen Titel: ‘multiple definition of’ und ich fische total im Trüben.
Ich würde mich sehr freuen, wenn Ihr mir dabei helfen könntet um den Fehler herum zu schiffen. Da, ich auch eher das learining by doing voran komme, freue ich mich auch sehr über sonstige Typs auch gerne über Stilefragen.
Vielen Dank.
Der Code der .ino lautet:
//for moving ultrasonic sensor
#define SERVO 6 //Servo at Pin 6 etc.
#define IRSENS 2
#define PING 2
#include "Sensors.h"
#include "Sensors.cpp"
#include <Servo.h>
//for motors
#define dirA 12
#define dirB 13
#define PWMA 3//for speed
#define PWMB 11
#define brakeA 9
#define brakeB 8
int Start[DIFFERENCE];
int Final[DIFFERENCE];
void transposetoXY() {
}
void motors_setup() {
//set speed for forward movement
int speedA = 135;
int speedB = 128;
//set pins for direction
pinMode(dirA, OUTPUT);
pinMode(dirB, OUTPUT);
//set pins for the break
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
//sets the speed of the movement
analogWrite(PWMA, speedA);
analogWrite(PWMB, speedB);
//fasten break
digitalWrite(brakeA, HIGH);
digitalWrite(brakeB, HIGH);
}
void moveForward( int distance) {
digitalWrite(dirA, HIGH);
digitalWrite(dirB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
delay(distance*105);//move distance in cm
digitalWrite(brakeA, HIGH);
digitalWrite(brakeB, HIGH);
}
void setup() {
Serial.begin(115200);
head.attach(SERVO);
//head.write(LEFT);
Serial.println (DIFFERENCE);
motors_setup();
moveForward(30);//move 30 cm
}
void loop() {
moveSensor(Start, Final, DELAY);
trackMotion(Start, Final);
}
Der der .cpp
#include <Servo.h>
#include <Arduino.h>//Arduino includes
#include "Sensors.h"
#ifndef PING
#define PING 2
#endif
Servo head;
//for moving ultrasonic sensor
const int DIFFERENCE = ((RIGHT - LEFT)/STEP)+1;
const int DELAY = PAUSE*STEP;
/*float getIR() {
pinMode(IRSENS, INPUT);
float voltage = analogRead(IRSENS);
float distance = (6787/ (voltage - 3))-4;
if (distance > 80.0)
distance = 80.0;
if (distance < 10.0)
distance = 10.0;
return distance;
}*/
int getPing(int pingPin) {
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
pinMode(pingPin, INPUT);
float microseconds = pulseIn(pingPin, HIGH, 20300);//set to maximal 350 m
int cm = int(microseconds/29/2);//output in cm, Ultrasound travels with 29 µs/cm
return cm;
}
int getDistance() {
int distance;
int i;
const uint8_t COMPLETE = 3;
do {
//int distance = int(getIR());
distance = getPing(PING);
i++;
} while (((distance > 290) || (distance <= 3)) && i < COMPLETE);
return distance;
}
void moveSensor(int outStart[], int outFinal[], int Ending ) {
int k = 0;
int phi = 0;
for (int i = LEFT; i < RIGHT; i = i + STEP) {
head.write(i);
outStart[k] = getDistance ();
k++;
delay(Ending);
}
for (int i = RIGHT; i > LEFT; i = i - STEP) {
k--;
head.write(i);
outFinal[k] = getDistance();
delay(Ending);
}
}
void trackMotion (int inStart[], int inFinal[]) {
int motion[DIFFERENCE];
for (int k = 0; k < DIFFERENCE; k++) {
int phi = k*STEP + LEFT - FRONT;
motion[k] = inFinal[k] - inStart[k];
Serial.print("Die Entfernnung bei ");
Serial.print(phi);
Serial.print(" Grad betraegt: ");
Serial.print(inStart[k]);
Serial.print(" und ");
Serial.print(inFinal[k]);
Serial.print(" cm, Bewegung ist: ");
Serial.print(motion[k]);
Serial.println(" cm.");
}
}
und der Header sieht wie folgt aus:
#include <Arduino.h>//Arduino includes
#define PAUSE 20
#define STEP 1
#define FRONT 99
#define LEFT 79
#define RIGHT 119
//float getIR();
int getPing(int pingPin);
int getDistance();
void moveSensor(int outStart[], int outFinal[], int Ending );
void trackMotion (int inStart[], int inFinal[]);