Запара пришла, не могу решить вопрос, а может баг в библиотеке для моторов от алексгайвера.
Собрал макет из 4 серво, драйвера TB6612, 2 моторов, PCF8554 и nrf.
Суть такова: при запуске контроллера начинает вращаться левый мотор (GMotor motorL(DRIVER3WIRE, A2, A3, 6) , с пина (A2) почему то идет сигнал на драйвер для запуска, хотя не должно. Менял ардуино нано 328, 168, менял драйвер, тоже самое. Менял распиновку, и все равно так же. Питание 12 вольт, конденсатор припаен к входу ардуино.
NRF отключен вовсе, а значит связи нет, и помех для блудного влючения сигнала не должно быть
Собрал макет из 4 серво, драйвера TB6612, 2 моторов, PCF8554 и nrf.
Суть такова: при запуске контроллера начинает вращаться левый мотор (GMotor motorL(DRIVER3WIRE, A2, A3, 6) , с пина (A2) почему то идет сигнал на драйвер для запуска, хотя не должно. Менял ардуино нано 328, 168, менял драйвер, тоже самое. Менял распиновку, и все равно так же. Питание 12 вольт, конденсатор припаен к входу ардуино.
NRF отключен вовсе, а значит связи нет, и помех для блудного влючения сигнала не должно быть
C++:
#include "GyverMotor.h"
#include "RF24.h"
#include "nRF24L01.h"
#include <SPI.h>
#include <Servo.h>
#include "PCF8574.h" // Подключение библиотеки PCF8574 (входы A4,A5)
PCF8574 pcf8574(0x20); // Создаем объект и указываем адрес устройства 0x20
GMotor motorR(DRIVER3WIRE, A7, A6, 3);
GMotor motorL(DRIVER3WIRE, A2, A3, 6);
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
byte address[][6] = { "1Node", "2Node", "3Node", "4Node", "5Node", "6Node" }; //возможные номера труб
int recieved_data[13]; // массив принятых данных
int valX; // скорость мотора
int valY; // поворот колес
int valB; // сервопривод1 180
int valJ; // сервопривод2 180
int valN; // сервопровод3 180
int Dv = P3; // движение вперед мотор через драйвер
int Dn = P4; // движение назад мотор через драйвер
bool butt_flagled1 = 0;
bool butt_flagled2 = 0;
bool butt_flagled3 = 0;
bool butt_flagled4 = 0;
bool butt_flagled7 = 0;
bool butt_flagled8 = 0;
int led = A0; // индикатор работы системы запуска контроллера A0
int valZ; // для индикатора связи
int sig = A1;
boolean butt_flag = 0;
boolean butt;
boolean led_flag = 0;
unsigned long last_press;
Servo servo;
Servo servo1;
Servo servo2;
Servo servo3;
void setup() {
// Пины D5 и D6 - 7.8 кГц
TCCR0B = 0b00000010; // x8
TCCR0A = 0b00000011; // fast pwm
// Пины D3 и D11 - 62.5 кГц
TCCR2B = 0b00000001; // x1
TCCR2A = 0b00000011; // fast pwm
Serial.begin(9600); //открываем порт для связи с ПК
servo.attach(5);
servo1.attach(4);
servo2.attach(2);
servo3.attach(7);
pinMode(Dv, OUTPUT);
pinMode(Dn, OUTPUT);
pcf8574.pinMode(P0, OUTPUT); // Устанавливаем выход P, как выход
pcf8574.pinMode(P1, OUTPUT); // Устанавливаем выход P, как выход
pcf8574.pinMode(P2, OUTPUT); // Устанавливаем выход P, как выход
pcf8574.pinMode(P3, OUTPUT); // Устанавливаем выход P, для мотора двигател
pcf8574.pinMode(P4, OUTPUT); // Устанавливаем выход P, как мотора двигателя
pcf8574.pinMode(P5, OUTPUT); // Устанавливаем выход P, как выход
pcf8574.pinMode(P6, OUTPUT); // Устанавливаем выход P, как выход
pcf8574.pinMode(P7, OUTPUT); // Устанавливаем выход P, как выход
pinMode(led, OUTPUT); // овещение
pinMode(sig, OUTPUT); // настроить пин реле как выход
// Проверка инициализация библиотеки pcf8574
Serial.print("Init pcf8574...");
if (pcf8574.begin()) {
Serial.println("OK");
} else {
Serial.println("ERROR");
}
delay(50);
motorR.setDirection(REVERSE);
motorL.setDirection(REVERSE);
motorR.setMode(AUTO);
motorL.setMode(AUTO);
motorR.setSpeed(0);
motorL.setSpeed(0);
motorL.setMinDuty(1);
motorR.setSmoothSpeed(30);
motorL.setSmoothSpeed(30);
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0
radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
radio.setPALevel(RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN,
radio.setDataRate(RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS,
radio.powerUp(); //начать работу
radio.startListening(); //начинаем слушать эфир, мы приёмный модуль
servo.write(90); // начало угла сервопривода при включение
servo1.write(0);
servo2.write(0);
servo3.write(0);
}
void loop() {
byte pipeNo;
while (radio.available(&pipeNo)) { // слушаем эфир со всех труб
radio.read(&recieved_data, sizeof(recieved_data)); // чиатем входящий сигнал
valX = recieved_data[0]; // назначить массив мотора
int signalX = 255 - valX / 2;
motorL.smoothTick(signalX);
motorR.smoothTick(signalX);
valY = recieved_data[1]; // поворот колес
valY = map(valY, 1023, 0, 0, 40);
servo.write(valY);
valZ = recieved_data[3]; // назначить массив сигнал для передачи лампочки
valB = recieved_data[6]; // сервопривод 1
valB = map(valB, 0, 1023, 0, 180);
servo1.write(valB);
valJ = recieved_data[7]; // сервопривод 2
valJ = map(valJ, 0, 1023, 0, 180);
servo2.write(valJ);
valN = recieved_data[8]; // сервопривод 3
valN = map(valN, 0, 1023, 0, 180);
servo3.write(valN);
Dv = recieved_data[9]; // двигатель вперед
Dn = recieved_data[10]; // двигатель назад
butt_flagled1 = recieved_data[2];
pcf8574.digitalWrite(P0, !butt_flagled1); //фик джойстик кнопка !
butt_flagled2 = recieved_data[4];
pcf8574.digitalWrite(P1, !butt_flagled2); //фик джойстик кнопка !
butt_flagled3 = recieved_data[5];
pcf8574.digitalWrite(P2, !butt_flagled3); // фик кнопка !
butt_flagled4 = recieved_data[11];
pcf8574.digitalWrite(P5, !butt_flagled4); //не фикс кнопка !
butt_flagled7 = recieved_data[12];
pcf8574.digitalWrite(P6, !butt_flagled7); //не фикс !
butt_flagled8 = recieved_data[13];
pcf8574.digitalWrite(P7, butt_flagled8); //нее фик !
if (valZ == 1 && butt_flag == 0 && millis() - last_press > 5000) {
butt_flag = 1;
Serial.println("Button press");
led_flag = !led_flag;
digitalWrite(sig, led_flag);
last_press = millis();
}
if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
Serial.println("Button No");
}
}
}
Изменено: