'multiple definition of'-Fehlermeldung bei Modularisierung


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 doing voran komme,  freue ich mich auch sehr über sonstige typs auch gerne über stilefragen.

vielen  dank.

der code der .ino lautet:

code: [select]
//for moving ultrasonic sensor
#define servo 6  //servo @ 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 forward movement
  int speeda = 135;
  int speedb = 128;
 
  //set pins direction
  pinmode(dira, output);
  pinmode(dirb, output);
 
  //set pins break
  pinmode(brakea, output);
  pinmode(brakeb, output);
 
  //sets speed of 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

code: [select]
#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 maximal 350 m
  int cm = int(microseconds/29/2);//output in cm, ultrasound travels 29 µs/cm
 
  return cm; 
}

int getdistance() {
  int distance;
  int i;
  const uint8_t complete = 3;
 
  {
    //int distance = int(getir());
    distance = getping(ping);
    i++;
  } while (((distance > 290) || (distance <= 3)) && < complete);
  return distance;
}

void movesensor(int outstart[], int outfinal[], int ending ) {
  int k = 0;
  int phi = 0;

  (int = left; < right; = + step) {
    head.write(i);
    outstart[k] = getdistance ();
    k++;
    delay(ending);
  }
   
  (int = right; > left; = - step) {
    k--;
    head.write(i);
    outfinal[k] = getdistance();
    delay(ending);
  }
}

void trackmotion (int instart[], int infinal[]) {
 
  int motion[difference];
 
  (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:

code: [select]
#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[]);


ich habe soetwas noch nicht gemacht und deshalb für mich ausprobiert, da ich gerade ein größeres projekt versuche. bei mir mit ide 1.5.8 sagt der compiler:
quote
der sketch verwendet 5.910 bytes (18%) des programmspeicherplatzes. das maximum sind 32.256 bytes.
globale variablen verwenden 461 bytes (22%) des dynamischen speichers, 1.587 bytes für lokale variablen verbleiben. das maximum sind 2.048 bytes.
möglicherweise hilft es den experten, wenn du verrätst, wie du compilierst. gutes gelingen!


Arduino Forum > International > Deutsch (Moderator: uwefed) > 'multiple definition of'-Fehlermeldung bei Modularisierung


arduino

Comments