Passiver Buzzer - tone()/noTone() Fehlermeldung

Moin zusammen,

es wäre toll, wenn ich mich heute nicht wieder rechtfertigen müsste, wieso ich NewPing.h etc benutze. So wie das Gefährt aktuell konfiguriert ist, läuft alles sehr stabil und damit bin ich zufrieden.

Mein Problem ist folgendes: Ich möchte eine ganz simple "Hupe" einbauen. Dafür habe ich einen 100 Ohm Widerstand an einen passiven Buzzer gelötet und diesen mit digital-Pin 9 und Grd verbunden.

Da Pin 9 ein PWM Pin ist, sollte der Funktion tone() und noTone() nicht entgegen sprechen.

#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>


#define relay_pin 2
#define L_S A4
#define R_S A3
//defining pins and variables
#define TRIG_PIN A1
#define ECHO_PIN A2
#define MAX_DISTANCE 200
#define MAX_SPEED 200  // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20
#define Taster A5
#define turn_amount 500
int state_bz1 = 0;                  //The actual state of the state machine
int state_prev_bz1 = 0;             //Remember the previous state (useful to know if the state has changed)
int buzzer = 9;                     //Buzzer pin
int val_bz1 = 0;                    //Buzzer value (on or off)
unsigned long t_bz1 = 0;            //Current time of the buzzer state machine (in milli seconds)
unsigned long t_0_bz1 = 0;          //The time that we last passed through a state of interest (in milli seconds)
unsigned long on_delay_bz1 = 500;   //On time for the buzzer as it beeps (in milli seconds)
unsigned long off_delay_bz1 = 500;  //Off time for the buzzer as it beeps (in milli seconds)
int beep_count_bz1 = 0;             //Number of times we've beeped on this journey
int beep_number_bz1 = 4;            //Number of times we should beep before resetting
//defining motors,servo,sensor
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_8KHZ);
AF_DCMotor motor4(4, MOTOR12_8KHZ);
Servo myservo;
const char befehle[] = { 'F', 'B', 'L', 'R', 'S', 'X', 'Y', 'N', 'M' };
byte number;
char command;
//defining global variables
boolean goesForward = false;
int distance = 100;
int speedSet = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(10);
  myservo.write(90);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  motor1.setSpeed(100);
  motor2.setSpeed(100);
  motor3.setSpeed(100);
  motor4.setSpeed(100);
  pinMode(relay_pin, OUTPUT);
  pinMode(L_S, INPUT);
  pinMode(R_S, INPUT);
  digitalWrite(relay_pin, LOW);
  pinMode(Taster, INPUT);
  pinMode(buzzer, OUTPUT);
}

void loop() {
  action();
  connection();
  if (digitalRead(Taster) == HIGH) {
    digitalWrite(relay_pin, HIGH);
  } else {
    digitalWrite(relay_pin, LOW);
  }
}

void ultrasensor() {
  int distanceR = 0;
  int distanceL = 0;
  delay(40);
  Serial.println(distance);

  if (distance <= 15) {
    Serial.println("Object Detected");
    moveStop();
    delay(100);
    moveBackward();
    delay(300);
    moveStop();
    delay(200);
    distanceR = lookRight();
    Serial.print("Distance Right = ");
    Serial.println(distanceR);
    delay(200);
    distanceL = lookLeft();
    Serial.print("Distance Left = ");
    Serial.println(distanceL);
    delay(200);

    if (distanceR >= distanceL) {
      turnRight();
      moveStop();
    } else {
      turnLeft();
      moveStop();
    }
  } else {
    moveForward();
  }

  //reseting the variable after the operations
  distance = readPing();
}

int lookRight() {
  myservo.write(0);
  delay(500);
  int distance = readPing();
  delay(100);
  myservo.write(90);
  return distance;
}

int lookLeft() {
  myservo.write(180);
  delay(500);
  int distance = readPing();
  delay(100);
  myservo.write(90);
  return distance;
  delay(100);
}

int readPing() {
  delay(70);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

void moveForward() {

  if (!goesForward) {
    goesForward = true;
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);
  }
}

void moveBackward() {
  goesForward = false;
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
}

void turnRight() {
  Serial.println("Turning Right");
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  delay(turn_amount);
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

void turnLeft() {
  Serial.println("Turning Left");
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  delay(turn_amount);
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}
void turnLeft2() {
  Serial.println("Turning Left");
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  delay(turn_amount);
}
void turnRight2() {
  Serial.println("Turning Right");
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  delay(turn_amount);
}

void drive() {
  number = random(3);
  if (number == 1) {
    turnLeft();
    delay(1500);
  } else {
    turnRight();
    delay(1500);
  }
}
void connection() {
  if (Serial.available() > 0) {
    char newCommand = Serial.read();
    Serial.println(command);  // Read the incoming command

    if (newCommand != command && isPrintable(newCommand))  // Neues Zeichen und ist anzeigbar
    {
      Serial.print(F("Neues Commando: "));  // ausgeben
      Serial.println(newCommand);

      for (byte b = 0; b < sizeof(befehle) / sizeof(befehle[0]); b++)  // zähle durch alle vorandenen Werte
      {
        if (befehle[b] == newCommand)  // wenn vorhanden, dann übernehmen
        {
          command = newCommand;
        }
      }
    }
  }
}
void action() {
  switch (command) {
    case 'F': moveForward(); break;

    case 'B': moveBackward(); break;

    case 'L': turnLeft(); break;

    case 'R': turnRight(); break;

    case 'S': moveStop(); break;

    case 'X':
      ultrasensor();
      break;
    case 'Y': linefollow(); break;
    case 'n':
    case 'N': StateMachine_bz1(); break;
    case 'm':
    case 'M': break;
  }
}

void linefollow() {
  int rechter_Sensor, linker_Sensor;
  rechter_Sensor = analogRead(R_S);
  linker_Sensor = analogRead(L_S);
  Serial.print("Rechts:");
  Serial.println(rechter_Sensor);
  Serial.print("Links:");
  Serial.println(linker_Sensor);  // active by over 900, deactivated by 0

  if (linker_Sensor >= 300) {
    turnRight2();
  } else if (rechter_Sensor >= 300) {
    turnLeft2();
  } else if (rechter_Sensor <= 300 && linker_Sensor <= 300) {
    moveForward();
  }
}
void StateMachine_bz1() {

  //Almost every state needs these lines so I'll put it outside the State Machine
  state_prev_bz1 = state_bz1;

  //State Machine Section
  switch (state_bz1) {
    case 0:  //RESET
      //Set Beep Count to 0 then proceed to WAIT
      beep_count_bz1 = 0;
      state_bz1 = 1;
      break;

    case 1:  //WAIT
      //do nothing, the main loop can progress this Machine from state 1 to state 2
      break;

    case 2:  //TURN ON
      //Start buzzer, record time then proceed to ON,
      tone(buzzer, 1000, 500);
      t_0_bz1 = millis();
      state_bz1 = 3;
      break;

    case 3:  //ON
      //Wait for time to elapse, then proceed to TURN OFF
      t_bz1 = millis();
      if (t_bz1 - t_0_bz1 > on_delay_bz1) { state_bz1 = 4; }
      break;

    case 4:  //TURN OFF
      //Increment the beep counter, turn off buzzer, proceed to OFF
      beep_count_bz1++;
      noTone(buzzer);
      t_0_bz1 = millis();
      state_bz1 = 5;
      break;

    case 5:  //OFF
      t_bz1 = millis();
      if (t_bz1 - t_0_bz1 > off_delay_bz1) { state_bz1 = 2; }
      if (beep_count_bz1 >= beep_number_bz1) { state_bz1 = 0; }
      break;
  }
}

Ich hab ja dazu gelernt und wollte eine ISM einbauen. Ich schmücke mich ja nicht mit fremden Federn (https://gist.github.com/NormalUniverse/f807ca9f267b861365c688193ddfdd68

Ich bekomme jetzt die Fehlermeldung

FQBN: arduino:avr:uno
Verwende das Board 'uno' von der Plattform im Ordner: C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Verwendung des Kerns 'arduino' von Platform im Ordner: C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Verwendete Bibliotheken erkennen ...
C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\sketch\Obstacle_Avoiding.ino.cpp -o nul
Alternativen für AFMotor.h: [Adafruit Motor Shield library@1.0.1]
ResolveLibrary(AFMotor.h)
  -> Kandidaten: [Adafruit Motor Shield library@1.0.1]
C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\sketch\Obstacle_Avoiding.ino.cpp -o nul
Alternativen für NewPing.h: [NewPing@1.9.7]
ResolveLibrary(NewPing.h)
  -> Kandidaten: [NewPing@1.9.7]
C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library -Ic:\Users\Natalie\Documents\Arduino\libraries\NewPing\src C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\sketch\Obstacle_Avoiding.ino.cpp -o nul
Alternativen für Servo.h: [Servo@1.2.2]
ResolveLibrary(Servo.h)
  -> Kandidaten: [Servo@1.2.2]
C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library -Ic:\Users\Natalie\Documents\Arduino\libraries\NewPing\src -IC:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\sketch\Obstacle_Avoiding.ino.cpp -o nul
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: c:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library\AFMotor.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: c:\Users\Natalie\Documents\Arduino\libraries\NewPing\src\NewPing.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\avr\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\mbed\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\megaavr\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\nrf52\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\renesas\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\sam\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\samd\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\stm32f4\Servo.cpp
Verwendung von zwischengespeicherten Bibliotheksabhängigkeiten für die Datei: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src\xmc\Servo.cpp
Funktionsprototypen werden generiert ...
C:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Natalie\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\standard -Ic:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library -Ic:\Users\Natalie\Documents\Arduino\libraries\NewPing\src -IC:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo\src C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\sketch\Obstacle_Avoiding.ino.cpp -o C:\Users\Natalie\AppData\Local\Temp\2640630763\sketch_merged.cpp
C:\Users\Natalie\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\Natalie\AppData\Local\Temp\2640630763\sketch_merged.cpp

Sketch wird kompiliert ...
"C:\\Users\\Natalie\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\Natalie\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\Natalie\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-Ic:\\Users\\Natalie\\Documents\\Arduino\\libraries\\Adafruit_Motor_Shield_library" "-Ic:\\Users\\Natalie\\Documents\\Arduino\\libraries\\NewPing\\src" "-IC:\\Users\\Natalie\\AppData\\Local\\Arduino15\\libraries\\Servo\\src" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\sketch\\Obstacle_Avoiding.ino.cpp" -o "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\sketch\\Obstacle_Avoiding.ino.cpp.o"
Bibliotheken werden kompiliert ...
Bibliothek "Adafruit Motor Shield library" wird kompiliert
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Adafruit_Motor_Shield_library\AFMotor.cpp.o
Bibliothek "NewPing" wird kompiliert
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\NewPing\NewPing.cpp.o
Bibliothek "Servo" wird kompiliert
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\mbed\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\nrf52\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\avr\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\renesas\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\sam\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\xmc\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\megaavr\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\stm32f4\Servo.cpp.o
Zuvor kompilierte Datei wird verwendet: C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\Servo\samd\Servo.cpp.o
Kern wird kompiliert ...
Verwendung des vorkompilierten Kerns: C:\Users\Natalie\AppData\Local\arduino\cores\arduino_avr_uno_3ab054e155476055df87795c09d2fb9c\core.a
Alles zusammenlinken...
"C:\\Users\\Natalie\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -Wall -Wextra -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180/Obstacle_Avoiding.ino.elf" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\sketch\\Obstacle_Avoiding.ino.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Adafruit_Motor_Shield_library\\AFMotor.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\NewPing\\NewPing.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\avr\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\mbed\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\megaavr\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\nrf52\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\renesas\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\sam\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\samd\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\stm32f4\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180\\libraries\\Servo\\xmc\\Servo.cpp.o" "C:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180/..\\..\\cores\\arduino_avr_uno_3ab054e155476055df87795c09d2fb9c\\core.a" "-LC:\\Users\\Natalie\\AppData\\Local\\arduino\\sketches\\AFDB961B823F147FBB2CCE37CC8DE180" -lm
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':
(.text+0x0): multiple definition of `__vector_7'
C:\Users\Natalie\AppData\Local\arduino\sketches\AFDB961B823F147FBB2CCE37CC8DE180\libraries\NewPing\NewPing.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Bibliothek Adafruit Motor Shield library in Version 1.0.1 im Ordner: C:\Users\Natalie\Documents\Arduino\libraries\Adafruit_Motor_Shield_library  wird verwendet
Bibliothek NewPing in Version 1.9.7 im Ordner: C:\Users\Natalie\Documents\Arduino\libraries\NewPing  wird verwendet
Bibliothek Servo in Version 1.2.2 im Ordner: C:\Users\Natalie\AppData\Local\Arduino15\libraries\Servo  wird verwendet
exit status 1

Compilation error: exit status 1

Ich denke mal, der Fehler sagt mir, dass die Funktionen in den Bibliotheken bereits besteht und ich es deswegen nicht nutzen kann. Gibts da ne Möglichkeit das zu fixen? Ohne die Bibliotheken zu löschen und das ganze umzuschreiben?

Du darfst nur eine ISR auf dem Vector haben.

das bedeutet für mich? Kann man das irgendwie umgehen bzw. fixen?

Nein!
Der Fehler ist nicht zu beheben.

Der Grund:

So wie man bei einem Auto nicht aus 2 Türen gleichzeitig aussteigen kann, kann man auch nicht ISR doppelt verwenden.

Lesestoff: AVR-LibC: <avr/interrupt.h>: Interrupts

Ok danke, das ist ne Aussage mit der ich arbeiten kann. dann sehe ich mich nach Alternativen um bzw muss die Hupe vergessen

Es gibt im Netz jede Menge Sketche die einen billigen Buzzer sogar als "Sound-Player" benutzen.

Bitte jetzt nicht mit MP3 verwechseln. :wink:

z.b.
https://docs.arduino.cc/built-in-examples/digital/toneMelody/

Also denke ich das du das auch hin bekommst.

Nur, viele DB wird das Teilchen nicht schaffen. Ich persönlich setzte ihn ein, als Signal wenn der Job fertig ist. 3 x Beep und gut ist.

Gruß

Pucki

? Sie meinen dB ?

Na ja lesen ist nicht deine Stärke, es wird nicht funktionieren warum?
Alles lesen, Minimum 3 mall, womöglich klärt sich das "Warum"

Ich habe mir einen aktiven Buzzer organisiert und damit sollte es ja theoretisch gehen. Die selbe State Machine genommen, aber leider kommt kein Ton raus.

Wenn ich ihn in die Taste N so rein schreibe, piepst er auch, also funktionieren tut er, nur eben ohne Pause.

////////////////////////////////////////////////////////
//          Arduino Obstacle Avoiding Robot v2.0      //
//            By Aarav Garg - 2021                    //
////////////////////////////////////////////////////////

//including the libraries
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>


#define relay_pin 2
#define L_S A4
#define R_S A3
//defining pins and variables
#define TRIG_PIN A1
#define ECHO_PIN A2
#define MAX_DISTANCE 200
#define MAX_SPEED 200  // sets speed of DC  motors
#define MAX_SPEED_OFFSET 20
#define Taster A5
#define turn_amount 500
int state_bz1 = 0;                  //The actual state of the state machine
int state_prev_bz1 = 0;             //Remember the previous state (useful to know if the state has changed)
int buzzer = 9;                     //Buzzer pin
int val_bz1 = 0;                    //Buzzer value (on or off)
unsigned long t_bz1 = 0;            //Current time of the buzzer state machine (in milli seconds)
unsigned long t_0_bz1 = 0;          //The time that we last passed through a state of interest (in milli seconds)
unsigned long on_delay_bz1 = 500;   //On time for the buzzer as it beeps (in milli seconds)
unsigned long off_delay_bz1 = 500;  //Off time for the buzzer as it beeps (in milli seconds)
int beep_count_bz1 = 0;             //Number of times we've beeped on this journey
int beep_number_bz1 = 4; 
//defining motors,servo,sensor
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_8KHZ);
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_8KHZ);
AF_DCMotor motor4(4, MOTOR12_8KHZ);
Servo myservo;
const char befehle[] = { 'F', 'B', 'L', 'R', 'S', 'X', 'Y', 'N', 'M' };
byte number;
char command;
//defining global variables
boolean goesForward = false;
int distance = 100;
int speedSet = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(10);
  myservo.write(90);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  motor1.setSpeed(100);
  motor2.setSpeed(100);
  motor3.setSpeed(100);
  motor4.setSpeed(100);
  pinMode(relay_pin, OUTPUT);
  pinMode(L_S, INPUT);
  pinMode(R_S, INPUT);
  digitalWrite(relay_pin, LOW);
  pinMode(Taster, INPUT);
  pinMode(buzzer,OUTPUT);

}

void loop() {
  action();
  connection();
  if (digitalRead(Taster) == HIGH) {
    digitalWrite(relay_pin, HIGH);
  } else {
    digitalWrite(relay_pin, LOW);
  }
}

void ultrasensor() {
  int distanceR = 0;
  int distanceL = 0;
  delay(40);
  Serial.println(distance);

  if (distance <= 15) {
    Serial.println("Object Detected");
    moveStop();
    delay(100);
    moveBackward();
    delay(300);
    moveStop();
    delay(200);
    distanceR = lookRight();
    Serial.print("Distance Right = ");
    Serial.println(distanceR);
    delay(200);
    distanceL = lookLeft();
    Serial.print("Distance Left = ");
    Serial.println(distanceL);
    delay(200);

    if (distanceR >= distanceL) {
      turnRight();
      moveStop();
    } else {
      turnLeft();
      moveStop();
    }
  } else {
    moveForward();
  }

  //reseting the variable after the operations
  distance = readPing();
}

int lookRight() {
  myservo.write(0);
  delay(500);
  int distance = readPing();
  delay(100);
  myservo.write(90);
  return distance;
}

int lookLeft() {
  myservo.write(180);
  delay(500);
  int distance = readPing();
  delay(100);
  myservo.write(90);
  return distance;
  delay(100);
}

int readPing() {
  delay(70);
  int cm = sonar.ping_cm();
  if (cm == 0) {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

void moveForward() {

  if (!goesForward) {
    goesForward = true;
    motor1.run(FORWARD);
    motor2.run(FORWARD);
    motor3.run(FORWARD);
    motor4.run(FORWARD);
  }
}

void moveBackward() {
  goesForward = false;
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
}

void turnRight() {
  Serial.println("Turning Right");
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  delay(turn_amount);
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

void turnLeft() {
  Serial.println("Turning Left");
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  delay(turn_amount);
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}
void turnLeft2() {
  Serial.println("Turning Left");
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
  delay(turn_amount);
}
void turnRight2() {
  Serial.println("Turning Right");
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
  delay(turn_amount);
}

void drive() {
  number = random(3);
  if (number == 1) {
    turnLeft();
    delay(1500);
  } else {
    turnRight();
    delay(1500);
  }
}
void connection() {
  if (Serial.available() > 0) {
    char newCommand = Serial.read();
    Serial.println(command);  // Read the incoming command

    if (newCommand != command && isPrintable(newCommand))  // Neues Zeichen und ist anzeigbar
    {
      Serial.print(F("Neues Commando: "));  // ausgeben
      Serial.println(newCommand);

      for (byte b = 0; b < sizeof(befehle) / sizeof(befehle[0]); b++)  // zähle durch alle vorandenen Werte
      {
        if (befehle[b] == newCommand)  // wenn vorhanden, dann übernehmen
        {
          command = newCommand;
        }
      }
    }
  }
}
void action() {
  switch (command) {
    case 'F': moveForward(); break;

    case 'B': moveBackward(); break;

    case 'L': turnLeft(); break;

    case 'R': turnRight(); break;

    case 'S': moveStop(); break;

    case 'X':
      ultrasensor();
      break;
    case 'Y': linefollow(); break;
    case 'n':
    case 'N': StateMachine_bz1();break;
    case 'm':
    case 'M': break;
  }
}
void StateMachine_bz1() {

  //Almost every state needs these lines so I'll put it outside the State Machine
  state_prev_bz1 = state_bz1;

  //State Machine Section
  switch (state_bz1) {
    case 0:  //RESET
      //Set Beep Count to 0 then proceed to WAIT
      beep_count_bz1 = 0;
      state_bz1 = 1;
      break;

    case 1:  //WAIT
      //do nothing, the main loop can progress this Machine from state 1 to state 2
      break;

    case 2:  //TURN ON
      //Start buzzer, record time then proceed to ON,
      digitalWrite(buzzer,HIGH);
      t_0_bz1 = millis();
      state_bz1 = 3;
      break;

    case 3:  //ON
      //Wait for time to elapse, then proceed to TURN OFF
      t_bz1 = millis();
      if (t_bz1 - t_0_bz1 > on_delay_bz1) { state_bz1 = 4; }
      break;

    case 4:  //TURN OFF
      //Increment the beep counter, turn off buzzer, proceed to OFF
      beep_count_bz1++;
      digitalWrite(buzzer,LOW);
      t_0_bz1 = millis();
      state_bz1 = 5;
      break;

    case 5:  //OFF
      t_bz1 = millis();
      if (t_bz1 - t_0_bz1 > off_delay_bz1) { state_bz1 = 2; }
      if (beep_count_bz1 >= beep_number_bz1) { state_bz1 = 0; }
      break;
  }
}


void linefollow() {
  int rechter_Sensor, linker_Sensor;
  rechter_Sensor = analogRead(R_S);
  linker_Sensor = analogRead(L_S);
  Serial.print("Rechts:");
  Serial.println(rechter_Sensor);
  Serial.print("Links:");
  Serial.println(linker_Sensor);  // active by over 900, deactivated by 0

  if (linker_Sensor >= 300) {
    turnRight2();
  } else if (rechter_Sensor >= 300) {
    turnLeft2();
  } else if (rechter_Sensor <= 300 && linker_Sensor <= 300) {
    moveForward();
  }
}

Hat jemand einen Tipp, wie ich meine "Hupe" zum laufen bekomme?

Für eine Pause brauchst du einen Schleife.

Im Prinzip ist ein Buzzer nix anders wie die LED von Blinki.

Also zieh dir den Code rein, und dann macht der auch Beep-Pause-Beep.

Gruß

Pucki

Ich will ja nicht Beep-Pause-Beep, sondern Beep-Pause :wink: Eine Schleife wiederholt ja unendlich

Das ist eine Frage der Schleife :wink:

Wie wäre es denn mit einer For-Next-Schleife , pro Lauf einmal Beep + 1 x Pause.

https://docs.arduino.cc/language-reference/de/struktur/control-structure/for/

Wenn du das erste Beispiel nachbaust, hast du eine heulende Sirene. :wink:

Gruß

Pucki

Aufruf von StateMachine_bz1() in die loop() verschieben und beim Command N stattdessen deren Statusvariable state_bz1 auf 2 setzen.

Edit: Ich vergaß noch zu erwähnen, dass es möglicherweise anders hupt als Du wünscht. Das liegt dann vermutlich an den vielen delay() in Deinem Code.

@daria87: Du bist doch an diesen Projekt seit fast einen Jahr. Respekt für so viel Hartnäckigkeit. Aber: Seit einem Jahr wird dir auch gesagt, du musst ohne delay arbeiten. Bei Statemaschienen braucht man kein delay.

Versuche die doch mal alle auszubauen.

ok das kann ich irgendwie nachvollziehen.... durch die delays wird der Befehl vermutlich verspätet ertönen, weil ja mindestens ein delay durchlaufen muss. Um es mal vereinfacht zu sagen. Richtig verstanden?

Du solltest Dir mal ein Blatt Papier nehmen und aufschreiben, was beim 1., 2., 3. und allen weiteren Aufrufen der Funktion StateMachine_bz1() in Abhängigkeit vom Inhalt der Statusvariablen state_bz1 passiert.
Der muss man mit Status 2 erstmal sagen, dass es losgehen soll und die dann immer wieder aufrufen, um den Piepser N-mal tröten zu lassen.

Das passiert durch die Anordnung in der loop() automatisch. Sehr vereinfacht passiert außerhalb Deines Codes ungefähr sowas:

// System bekommt Spannung
// ... Ardunio macht Initialisierungen ("geheim", Service für uns)
setup()
// ... vielleicht noch mehr
while (1)
{
  // ... Irgendwas anderes "Geheimes"
  loop();
  // ...
}

Und im Prinzip auf genau die gleiche Art wie beim Buzzer kannst Du Deine delay()s loswerden.