Помогите пожалуйста с скетчем
- Войдите на сайт для отправки комментариев
Пнд, 22/04/2019 - 23:34
Собираю модель советского трактора т 74, напечатанную на 3Д принтере. С механикой проблем не возникло, а вот с ардуино работаю впервые. Нашел в интернете схему и скетч к ней, собственно ардуино, L298N, блютуз модуль. Все собрал, а вот скетч залить не могу, выбивает ошибку: 'vforvard' was not declared in this scope
Вот скетч:
#include <SoftwareSerial.h>
const int TIMEOUT_TIME_MS = 150;
unsigned long lastPilotSymbolTime;
char symbol;
int val;
int IN1 = 7; // выводы модуля L298N подключены к следующим пинам Arduino
int IN2 = 5;
int IN3 = 4;
int IN4 = 2;
int LED = 13; // используем встроенный светодиод для индикации работы
SoftwareSerial BTSerial(A0,A1);
char vcmd;
int vspdL,vspdR;
int vspd=200;
enum States
{
WAITING,
READING,
RUNNING,
ERROR,
TIMEOUT
};
States state;
States onWait();
States onRead();
States onRun();
States onError();
States onTimeout();
void setup()
{
BTSerial.begin(9600);
Serial.begin(9600);
lastPilotSymbolTime = 0;
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
//используем 13 пин как индикатор включённой ардуины
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
}
void loop()
{
if(BTSerial.available())
{
vcmd=(char)BTSerial.read();
Serial.println(vcmd);
if(vcmd=='F')
{
vforvard();
}
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();
switch (state)
{
case WAITING:
state = onWait();
break;
case READING:
state = onRead();
break;
case RUNNING:
state = onRun();
break;
case TIMEOUT:
state = onTimeout();
break;
default:
state = onError();
}
}
States onWait()
{
if (Serial.available() > 0)
{
return READING;
}
if (lastPilotSymbolTime && (millis() - lastPilotSymbolTime > TIMEOUT_TIME_MS))
{
return TIMEOUT;
}
return WAITING;
}
States onRead()
{
symbol = Serial.read();
return RUNNING;
}
States onRun()
{
switch (symbol)
{
case 'W':
//начало действий при полученном символе 'W' (вперед)
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 'S':
//начало действий при полученном символе 'S' (назад)
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 'D':
//начало действий при полученном символе 'D' (вправо)
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 'A':
//начало действий при полученном символе 'A' (влево)
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 'T':
//начало действий при полученном символе 'T' (остановка)
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 'P':
//получили контрольный символ, не изменяйте этот код
lastPilotSymbolTime = millis();
break;
default:
return ERROR;
}
return WAITING;
}
States onError()
{
//Получены неоговоренные символы. Очищаем ввод и продолжаем.
//Здесь можно добавить какие-то действия для этой ситуации.
//...
while (Serial.available())
{
Serial.read();
}
return WAITING;
}
States onTimeout()
{
//Действия при таймауте.
//Вероятно, связь утеряна,
//но при получении контрольного символа она будет восстановлена.
//Здесь, например, уместно выключить двигатели
//[ДОБАВИТЬ СВОЙ КОД НИЖЕ]
digitalWrite(IN1, LOW); // На пары выводов IN поданы сигналы одинакового уровня, моторы не работают
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
if (Serial.available())
{
return READING;
}
return TIMEOUT;
}
Буду благодарен за помощь, не пинайте очень, не хватает времени во всем разбираться(((
я вам еще прошлый раз сказал, чтоб вы прочитали тему в Песочнице ми вставили код правильно. Не будете выполнять правила форума - тему просто снесут а ник заблокируют.
Ошибка в этом коде связана с тем, что тут половины кода просто нет.
Пришлите код gas31a@mail.ru
Исправлю.