Помогите доработать скетч

igorek874
Offline
Зарегистрирован: 19.02.2017

Есть готовый скетч под эту схему, мне нужно его переделать, хочу добавить еще один двигатель и убрать одну серву. Нужно реализовать 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);
}
 
Но это не заработало, может кто то, что нибудь подскажет?
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii (иначе Ваш скетч никто и читать не будет)

2. Вы действительно серву прямо на пины сажаете, а ESP питаете от ардуиновских 3,3В?

igorek874
Offline
Зарегистрирован: 19.02.2017

Можно ли как то отредактировать сообщение или надо тему новую создавать?

Да, все делал по схеме. С первоначальным скетчем все работало.