Может кто-нибудь помочь мне понять, почему вращается только одно колесо?
Я пытаюсь использовать код, который я опубликовал ниже для двух колес. Однако при подключении к питанию вращается только одно колесо. Я использую батарею 9 В, которая была предложена, поэтому я не уверен, почему вращается только одно колесо. Когда оба колеса соединены, колесо, которое первоначально работало, перестало вращаться.
#include <SPI.h> //Библиотека SPI для связи с nRF24L01+
#include "RF24.h" //Основная библиотека nRF24L01+
#include "Wire.h"
RF24 radio (8, 9); // CE,CSN
//Create a pipe addresses for communication
const uint64_t pipe = 0xE8E8F0F0E1LL;
struct package
{
int X = 1;
int Y = 1;
};
typedef struct package Package;
Package pos;
int buttonState;
int spinnerState = false ;
int motora_1 = 3;
int motora_2 = 4;
int motorb_1 = 5;
int motorb_2 = 6;
int spinner = 2;
void setup()
{
Serial.begin(9600);
radio.begin(); //Start the nRF24 communicate
radio.openReadingPipe(1, pipe); //Задает адрес передатчика, на который программа будет получать данные.
radio.startListening();
pinMode(motora_1, OUTPUT);
pinMode(motora_2, OUTPUT);
pinMode(motorb_1, OUTPUT);
pinMode(motorb_2, OUTPUT);
pinMode(spinner, OUTPUT);
digitalWrite(spinner, LOW);
delay(100);
}
void loop()
{
if (radio.available()) {
radio.read(&pos, sizeof(pos));
radio.read(&buttonState, sizeof(buttonState));
Serial.print("X:");
Serial.print(pos.X);
Serial.print(" Y");
Serial.print(pos.Y);
Serial.print(" buttonState");
Serial.println(buttonState);
}
int xAxis = pos.X;
int yAxis = pos.Y;
int forward = map(yAxis, 570, 1024, 0, 255);
int backward = map(yAxis, 480, 0, 0, 255);
int right = map(xAxis, 570, 1024, 0, 255);
int left = map(xAxis, 480, 0, 0, 255);
if (yAxis > 570) { // Move Forward
// Set Motor A forward
analogWrite(motora_1, forward);
analogWrite(motora_2, 0);
// Set Motor B forward
analogWrite(motorb_1, forward);
analogWrite(motorb_2, 0);
} else if (yAxis < 480) { //Move Backward
// Set Motor A backward
analogWrite(motora_1, 0);
analogWrite(motora_2, backward);
// Set Motor B backward
analogWrite(motorb_1, 0);
analogWrite(motorb_2, backward);
} else if (xAxis > 570) { // Move Right
// Set Motor A forward
analogWrite(motora_1, right);
analogWrite(motora_2, 0);
// Set Motor B stop
analogWrite(motorb_1, 0);
analogWrite(motorb_2, 0);
} else if (xAxis < 480) { // Move Left
// Set Motor A stop
analogWrite(motora_1, 0);
analogWrite(motora_2, 0);
// Set Motor B foward
analogWrite(motorb_1, left);
analogWrite(motorb_2, 0);
} else { //stop
// Set Motor A stop
analogWrite(motora_1, 0);
analogWrite(motora_2, 0);
// Set Motor B stop
analogWrite(motorb_1, 0);
analogWrite(motorb_2, 0);
}
if (buttonState == 0 ) {
spinnerState = ! spinnerState;
delay(50);
}
if (spinnerState == true) {
digitalWrite(spinner, HIGH); //turn On spinner
delay(100);
} else {
digitalWrite(spinner, LOW); //turn Off spinner
delay(100);
}
}
1 ответ
Во-первых, 9V batery собирается бороться с управлением двумя двигателями. Замените эту батарею 9 В другим источником питания.
Как указывает @timemage в своем комментарии, вы используете команду PWM на штифте без ШИМ. Для Arduino Uno ШИМ - контакты: 3, 5, 6, 9, 10, 11. Переместите проводку и измените код так, чтобы он использовал контакт 9, 10 или 11 вместо контакта 4.
Это звучит так, как будто вы пытаетесь проверить свою аппаратную установку и прошивку одновременно. Гораздо проще сначала протестировать аппаратное обеспечение и убедиться, что оно работает должным образом, прежде чем тестировать прошивку. Я предлагаю написать более простую программу (чем проще, тем лучше), которая просто ведет двигатели вперед - по одному, а затем вместе. Убедитесь, что он работает, а затем измените программу тестирования, чтобы двигатели вращались в (полном) обратном направлении. Затем измените программу тестирования, чтобы она изменила скорость двигателей. Затем с известным рабочим оборудованием протестируйте свою прошивку.
Да, им может быть полезно разбить код на большее количество функций, чтобы сделать его более тестируемым., @timemage
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Под "батареей 9 В" вы подразумеваете стандартные блочные батареи 9 В, которые часто используются в детекторах дыма? Если да, пожалуйста, попробуйте использовать другой источник питания. Эти батареи предназначены для работы с очень низким энергопотреблением, а не для привода двигателей, @chrisl
Схема подключения была бы хороша!, @Fahad
У вас есть "int motora_2 = 4;
и" Аналоговая запись(motora_2, назад)"; и тег "arduino-uno". Вывод 4 на Arduino UNO не является выводом с поддержкой ШИМ.
Аналоговая запись "в основном становится" цифровой записью " при пороговом значении 0x80, когда вы используете ее с выводами без ШИМ. Таким образом, у вас есть по крайней мере одна проблема в вашем скетче, которая не может быть идентифицирована как *проблема* без *лучшего описания* проблемы., @timemage