Помогите разобраться с кодом
- Войдите на сайт для отправки комментариев
Хочу переделать китайскую машинку на ардуино. Arduino micro pro + TB6612FNG + NRF24L01 с антенкой. Два моторчика соединены к драйверу TB6612FNG, один будет поворачивать колеса, а другой движение назад вперед. Тестировал беспроводную связь между двумя NRF24L01, все пакеты отсылаются и приходят нормально,так что с проводками я не напутал. Код взял с проекта на ютубе, но он меня не работает ) Пытался методом тыка менять значения всякие, но понял что я в этом не понимаю совсем, то моторчик крутиться сначала на высоких оборотах, то на маленьких, то реагирует на джойстик совcем не так.
Джойстики рабочие, центральное положение у меня такие значение x-543 (0-1023), y-590 (25-1023)
Код передатчика
#include <SPI.h> #include "RF24.h" RF24 radio(3,2); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int potpin_1 = A9; int val_1; int potpin_2 = A8; int val_2; void setup(void){ radio.begin(); radio.openWritingPipe(pipe); } void loop() { val_1 = analogRead(potpin_1),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1); val_2 = analogRead(potpin_2),val_2 = map(val_2, 0, 1023, 128, 255),msg[0] = val_2,radio.write(msg, 1); }
Код приемника
// Необходимо установить библиотеку для радиомодуля nRF24 #include <SPI.h> #include "RF24.h" RF24 radio(3,2); const uint64_t pipe = 0xE8E8F0F0E1LL; int msg[1]; int data; int fspeed; // forward speed int bspeed; // backward speed int lspeed; // left speed int rspeed; // right speed const int in1 = 4; // direction pin 1 const int in2 = 5; // direction pin 2 const int ena = 6; // PWM pin to change speed const int in3 = 7; // direction pin 3 const int in4 = 8; // direction pin 4 const int enb = 9; // PWM pin to change speed void setup() { pinMode(in1, OUTPUT); // connection to L298n pinMode(in2, OUTPUT); // connection to L298n pinMode(ena, OUTPUT); // connection to L298n pinMode(in3, OUTPUT); // connection to L298n pinMode(in4, OUTPUT); // connection to L298n pinMode(enb, OUTPUT); // connection to L298n delay(50); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available())radio.read(msg, 1); if (msg[0] >=1 && msg[0] <=63)data = msg[0], rspeed = map(data, 126, 64, 0, 255), right(rspeed); if (msg[0] >=64 && msg[0] <=127)data = msg[0], lspeed = map(data, 63, 1, 0, 255), left(lspeed); if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed); if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed); if (msg[0] >190 && msg[0] <200)data = msg[0], stop(); } void stop() { analogWrite(ena, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); } void forward(int fspeed) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed); } void backward(int bspeed) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, bspeed); } void right(int rspeed) { digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, rspeed); } void left(int lspeed) { digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, lspeed); }
Похожая проблема.
Подаю шим сигнал на TB6612 всё работает.
Прикручиваю всё это на NRF24 и начинается какая-то фигня. В мониторе порта вижу что двигая джойстик изменяются значения плавно, но на выходе (припаял светодиод вместо TB6612) резкие мерцаная на максимальных значениях (250...255).
Даже такой код не работает. К плате подключена серва, после запуска этого кода серва начинает дергаться, а на выходе с ШИМ припаян светодиод, он загорается через раз. Никакого ШИМа получается что нет вообще. Как с этим бороться и куда вообще копать непонятно. Может у кого есть идеи.
Работать перестаёт после строки servo_1.attach(2);
Если её закомментировать, то остальной код работает нормально.
Работать перестаёт после строки servo_1.attach(2);
Если её закомментировать, то остальной код работает нормально.
Ну раз нет ни всего кода, ни схемы подключения, ни информации по питанию - остаётся только открыть сундук, достать оттуда запылившийся хрустальный шар и, долго вглядываясь в его глубину - пытаться найти там ответ на вашу проблему ;)
Работать перестаёт после строки servo_1.attach(2);
Если её закомментировать, то остальной код работает нормально.
кто-нибудь еще видит строку: servo_1.attach(2); кроме автора ?
или опять - скетч не тот, схема не та, да вообще форум не тот.
Можно проще :)
Заменить библиотеку Servo на другую, ищу варианты.
Заменить библиотеку Servo на другую, ищу варианты.
Ищи, мы в тебя верим, честное-пречестное ;)
что за личности всплывают тут и там с "серьезными" датами регистрации и несущие полный бред ?
Мужики, не обижайте и не обижайтесь!
Согласен, код я не написал, но написал текстом, наверное не совсем понятно, просто полёт мыслей, сижу уже 3 часа с этой проблемой.
Скетч не работал из-за библиотеки Servo, скачал Servo2, всё заработало.
Простите, что побеспокоил :)
Мож кому пригодится, качал Servo2 здесь http://wiki.amperka.ru/%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0:%D1%81%D0%B5%D1%80%D0%B2%D0%BE%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D1%8B
Ну, теперь Вы крутой специалист! Будут ещё проблемы - ищите библиотеку Servo3!