Помогите пожалуйста с скетчем

YuriiOd
Offline
Зарегистрирован: 22.04.2019

Собираю модель советского трактора т 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;
}
 
Буду благодарен за помощь, не пинайте очень, не хватает времени во всем разбираться(((
b707
Offline
Зарегистрирован: 26.05.2017

я вам еще прошлый раз сказал, чтоб вы прочитали тему в Песочнице ми вставили код правильно. Не будете выполнять правила форума  - тему просто снесут а ник заблокируют.

Ошибка в этом коде связана с тем, что тут половины кода просто нет.

Gas311
Gas311 аватар
Offline
Зарегистрирован: 06.12.2018

Пришлите код gas31a@mail.ru

Исправлю.