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();
}