Servo motor not compatible with IR library

I am trying to build a car using arduino for a school project and i have run into a roadblock. I cannot power and a motor and a rotor at the same time. My motor can only work on these pins and same for the rotor. I have already combed through the libraries I am using to find anything that uses pin 10 (the rotor pin) but have not found anything. I know it runs through the functions as it says so on the serial monitor and certain using IR_TIMER_2 makes it able to work, but using this timer renders the motor useless.
If anyone could help me it would be greatly appreciated.
Here is my code.

// de nodige libraries toevoegen en de pins benoemen
#include <IrReceiverSampler.h> 
#include <Nec1Decoder.h>
#include <PWMServo.h>
int directionPin = 13;
int pwmPin = 11;
int brakePin = 8;

// strings declareren
String todo;
String received;

int pos = 90;

static constexpr pin_t RECEIVE_PIN = 5U;  // IR op pin 5
static constexpr size_t BUFFERSIZE = 200U; // geen idee, maar het is belangrijk
static constexpr uint32_t BAUD = 115200UL; // iets met de Serial

static IrReceiver *receiver;

PWMServo myservo;

int remmen() {
  digitalWrite(brakePin, HIGH); // remmen aan
  analogWrite(pwmPin, 0); // kracht 0
  Serial.println("ik zit in remmen"); // test
}

int voren() {
  digitalWrite(directionPin, HIGH); // naar voren
  digitalWrite(brakePin, LOW); // remmen uit
  analogWrite(pwmPin, 50); // kracht in de motor
  delay(100); // even wachten
  Serial.println("ik zit in voren"); // test
}

int achter() {
  digitalWrite(directionPin, LOW); // naar achter
  digitalWrite(brakePin, LOW); // remmen uit
  analogWrite(pwmPin, 50); // kracht in de motor
  delay(100); // even wachten
  Serial.println("ik zit in achter");
}

int rechts() {
  pos += 3; //grotere hoek maken
  if (pos >= 180) { // hoek niet groter dan 180
    pos = 180;
  }
  myservo.write(pos); // servo naar deze hoek zetten
  Serial.println("Ik zit in rechts");
}

int links() {
  pos -= 3; //grotere hoek maken
  if (pos <= 0) { // hoek niet kleiner dan 0
    pos = 0;
  }
  myservo.write(pos); // servo naar deze hoek zetten
  Serial.println("Ik zit in links");
}

void setup() {

  todo = "niets"; // todo en received beginnen als niets
  received = "niets";
  Serial.begin(9600);  // serial starten
  //define pins
  pinMode(directionPin, OUTPUT);
  pinMode(pwmPin, OUTPUT);
  pinMode(brakePin, OUTPUT);
  // servo op 10 zetten
  myservo.attach(SERVO_PIN_B);
  while (!Serial)
        ;
    receiver = IrReceiverSampler::newIrReceiverSampler(BUFFERSIZE, RECEIVE_PIN);
}

void loop() {
  receiver->receive();

    if (receiver->isEmpty()){ // als het niks ontvangt
      received = "niets";
    }
    else { // als het wel ontvangt
        Nec1Decoder decoder(*receiver);
        if (decoder) { // als het het ontvangen signaal weet te decoderen
              decoder.printDecode(Serial);
              received = decoder.getDecode(); // het ontvangen signaal opslaan
              }
        else { // als het niet lukt te decoderen
          Serial.println(F("No decode as NEC"));
          received = "niets";
        }   
    }

    // tests
    Serial.print("received: ");
    Serial.println(received);

    // checken wat het ontvangen heeft en wat het moet doen benoemen
    if (received == "NEC1 ditto") {
      todo = todo;
    }

    else if (received == "niets") {
      todo = "niets";
    }

    else if (received == "NEC1 2 125 72") {
      todo = "voren";
    }

    else if (received == "NEC1 2 125 77") {
      todo = "achter";
    }

    else if (received == "NEC1 2 125 73") {
      todo = "rechts";
    }

    else if (received == "NEC1 2 125 78") {
      todo = "links";
    }

    // tests
    Serial.print("todo: ");
    Serial.println(todo);
    
    // aanzetten wat gebeuren moet
    if (todo == "voren") {
      voren();
    }

    if (todo == "achter") {
      achter();
    }

    if (todo == "rechts") {
      rechts();
    }

    if (todo == "links") {
      links();
    }

    else if (todo == "niets") {
      remmen();
    }

    // witregels
    Serial.println();
    Serial.println();

}

What is the "rotor"? Anyway, schematics, please.

I suggest to use the standard Servo.h library and use any pin for the servo motor.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.