Помогите. Bluetooth машинка
- Войдите на сайт для отправки комментариев
Вс, 16/04/2017 - 20:17
Код написал. блютуз мигает и сопряжение есть, но не едет. На все кнопки нажимаю и ничего а потом сброс и по новой мигает сопряжается и всё,что не так?
#include <AFMotor.h>
#include <Servo.h>
#include <SoftwareSerial.h>
//Создаем объекты для двигателей
AF_DCMotor M11(5); //канал М1 на Motor Shield — задний левый motor1
AF_DCMotor M12(6); //канал М2 на Motor Shield — задний правый motor2
AF_DCMotor M21(10); //канал М3 на Motor Shield — передний левый motor3
AF_DCMotor M22(9); //канал М4 на Motor Shield — передний правый motor4
// Создаем объект для сервопривода
Servo vservo;
SoftwareSerial BTSerial(A0, A1); // RX, TX
// Создаем переменную для команд Bluetooth
char vcmd;
// Создаем переменные для запоминания скорости двигателей
int vspdL, vspdR;
/* Создаем переменную, на значение которой будет уменьшаться скорость при плавных поворотах.
Текущая скорость должна быть больше этого значения. В противном случае двигатели со стороны направления поворота просто не будут вращаться */
int vspd = 200;
void setup() {
// Устанавливаем скорость передачи данных по Bluetooth
BTSerial.begin(9600);
// Устанавливаем скорость передачи данных по кабелю
Serial.begin(9600);
// Выбираем пин к которому подключен сервопривод
vservo.attach(9); // или 10, если воткнули в крайний разъём
// Поворачиваем сервопривод в положение 90 градусов при каждом включении
vservo.write(90);
// Устанавливаем максимальную скорость вращения двигателей
vspeed(255,255);
}
void loop() {
// Если есть данные
if (BTSerial.available())
{
// Читаем команды и заносим их в переменную. char преобразует код символа команды в символ
vcmd = (char)BTSerial.read();
// Отправляем команду в порт, чтобы можно было их проверить в "Мониторе порта"
Serial.println(vcmd);
// Вперед
if (vcmd == 'F') {
vforward();
}
// Назад
if (vcmd == 'B')
{
vbackward();
}
// Влево
if (vcmd == 'L')
{
vleft();
}
// Вправо
if (vcmd == 'R')
{
vright();
}
// Прямо и влево
if (vcmd == 'G')
{
vforwardleft();
}
// Прямо и вправо
if (vcmd == 'I')
{
vforwardright();
}
// Назад и влево
if (vcmd == 'H')
{
vbackwardleft();
}
// Назад и вправо
if (vcmd == 'J')
{
vbackwardright();
}
// Стоп
if (vcmd == 'S')
{
vrelease();
}
// Скорость 0%
if (vcmd == '0')
{
vspeed(0,0);
}
// Скорость 10%
if (vcmd == '1')
{
vspeed(25,25);
}
// Скорость 20%
if (vcmd == '2')
{
vspeed(50,50);
}
// Скорость 30%
if (vcmd == '3')
{
vspeed(75,75);
}
// Скорость 40%
if (vcmd == '4')
{
vspeed(100,100);
}
// Скорость 50%
if (vcmd == '5')
{
vspeed(125,125);
}
// Скорость 60%
if (vcmd == '6')
{
vspeed(150,150);
}
// Скорость 70%
if (vcmd == '7')
{
vspeed(175,175);
}
// Скорость 80%
if (vcmd == '8')
{
vspeed(200,200);
}
// Скорость 90%
if (vcmd == '9')
{
vspeed(225,225);
}
// Скорость 100%
if (vcmd == 'q')
{
vspeed(255,255);
}
}
}
// Вперед
void vforward() {
vspeed(vspdL,vspdR);
vforwardRL();
}
// Вперед для RL
void vforwardRL() {
M11.run(FORWARD);
M12.run(FORWARD);
M21.run(FORWARD);
M22.run(FORWARD);
}
// Назад
void vbackward() {
vspeed(vspdL,vspdR);
vbackwardRL();
}
// Назад для RL
void vbackwardRL() {
M11.run(BACKWARD);
M12.run(BACKWARD);
M21.run(BACKWARD);
M22.run(BACKWARD);
}
// Влево
void vleft() {
vspeed(vspdL,vspdR);
M11.run(BACKWARD);
M12.run(FORWARD);
M21.run(BACKWARD);
M22.run(FORWARD);
}
// Вправо
void vright() {
vspeed(vspdL,vspdR);
M11.run(FORWARD);
M12.run(BACKWARD);
M21.run(FORWARD);
M22.run(BACKWARD);
}
// Вперед и влево
void vforwardleft() {
if (vspdL > vspd) {
vspeed(vspdL-vspd,vspdR);
}
else
{
vspeed(0,vspdR);
}
vforwardRL();
}
// Вперед и вправо
void vforwardright() {
if (vspdR > vspd) {
vspeed(vspdL,vspdR-vspd);
}
else
{
vspeed(vspdL,0);
}
vforwardRL();
}
// Назад и влево
void vbackwardleft() {
if (vspdL > vspd) {
vspeed(vspdL-vspd,vspdR);
}
else
{
vspeed(0,vspdR);
}
vbackwardRL();
}
// Назад и вправо
void vbackwardright() {
if (vspdR > vspd) {
vspeed(vspdL,vspdR-vspd);
}
else
{
vspeed(vspdL,0);
}
vbackwardRL();
}
// Стоп
void vrelease(){
M11.run(RELEASE);
M12.run(RELEASE);
M21.run(RELEASE);
M22.run(RELEASE);
}
// Изменение скорости
void vspeed(int spdL,int spdR){
if (spdL == spdR) {
vspdL=spdL;
vspdR=spdR;
}
M11.setSpeed(spdL);
M12.setSpeed(spdR);
M21.setSpeed(spdL);
M22.setSpeed(spdR);
}