Помогите доработать скетч
- Войдите на сайт для отправки комментариев
Вс, 19/02/2017 - 20:51
Есть готовый скетч под эту схему, мне нужно его переделать, хочу добавить еще один двигатель и убрать одну серву. Нужно реализовать 3 функции: 1) два двигателя работают; 2) 1 работает вперед, другой назад; 3) 1 работает назад, 2 вперед.
Вот исходный скетч
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;
Servo servo2;
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
int fspeed; // движение в перед
int bspeed; // движение назад
const int in1 = 2; // управление двигателем 1
const int in2 = 4; // управление двигателем 1
const int ena = 5; // ШИМ для пропорциональной скорости машинки
void setup()
{
pinMode(in1, OUTPUT); // подключаем к L298n
pinMode(in2, OUTPUT); // подключаем к L298n
pinMode(ena, OUTPUT); // подключаем к L298n
servo1.attach(6);
servo2.attach(3);
delay(50);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <63 && msg[0] >-1)data = msg[0], pos = map(data, 0, 62, 10, 50),servo1.write(pos);
if (msg[0] <=127 && msg[0] >=64)data = msg[0], pos = map(data, 64, 127, 0, 80),servo2.write(pos);
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);
}
Так как я не очень хорошо понимаю в этом, то я решил просто прописать еще один двигатель, вместо функции заднего хода сделал режим когда двигатели работают в разные стороны и добавил функцию когда двигатели работают в разные стороны вместо одного сервопривода.
Вот что получилось:
#include <Servo.h>
#include <SPI.h>
#include "RF24.h"
Servo servo1;
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
int lspeed;
int fspeed; // движение в перед
int bspeed; // движение назад
const int in1 = 2; // управление двигателем 1
const int in2 = 4; // управление двигателем 1
const int ena = 5; // ШИМ для пропорциональной скорости машинки
const int in3=7;
const int in4=8;
const int enb=3;
void setup()
{
pinMode(in1, OUTPUT); // подключаем к L298n
pinMode(in2, OUTPUT); // подключаем к L298n
pinMode(ena, OUTPUT); // подключаем к L298n
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enb, OUTPUT);
servo1.attach(6);
delay(50);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if (radio.available())radio.read(msg, 1);
if (msg[0] <63 && msg[0] >-1)data = msg[0], pos = map(data, 0, 62, 10, 50),servo1.write(pos);
if (msg[0] <=127 && msg[0] >=64)data = msg[0], lspeed = map(data, 64, 127, 0, 80),povorot(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);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
analogWrite(enb, 0);
}
void forward(int fspeed)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena, fspeed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, fspeed);
}
void backward(int bspeed)
{
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena, bspeed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(enb, bspeed);
}
void povorot(int lspeed)
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena, lspeed);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(enb, lspeed);
}
Но это не заработало, может кто то, что нибудь подскажет?
1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii (иначе Ваш скетч никто и читать не будет)
2. Вы действительно серву прямо на пины сажаете, а ESP питаете от ардуиновских 3,3В?
Можно ли как то отредактировать сообщение или надо тему новую создавать?
Да, все делал по схеме. С первоначальным скетчем все работало.