Программирование RoboCar4WD
- Войдите на сайт для отправки комментариев
Вс, 27/12/2015 - 12:07
Добрый день всем. Подскажите пожалуйста что делаю не так. Заинтересовал один проект по Arduino, купил все необходимое, собрал, но когда дело дошло до программирования то получилась засада.
Вот код программы:
#include <KemaDrive.h>
#include <KemaUS.h>
#include <KemaState.h>
#include <VirtualWire.h> //pin 11
KemaDrive myDrive(2,3,4,5,6,7);
KemaState curState;
KemaState prevState;
KemaUS ultraSonic(22,23,24,25);
long prevTime = 0; //для алгоритма работы цикла loop() 10р/с
long deltaTime = 0; //для алгоритма работы цикла loop() 10р/с
int incomingByte = 0; //для тестирования через сериал-порт
boolean rfCtrl = true; // запрет/разрешение раидоуправления
char passRfCtrl[4] = {'*', '*', '*', '*'}; //кодовое слово для проверки приходящего сообщения
char act = '?'; //текущая команда
void setup()
{
Serial.begin(9600);
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
vw_rx_start();
myDrive.turn(curState.turnAng());
}
void loop()
{
prevTime = millis();
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
rfCtrl = true;
// ---------------------------------------------------- Sensor Section
curState.setEchoR(ultraSonic.pingR());
curState.setEchoL(ultraSonic.pingL());
//----------------------------------------------------- RF control
if (vw_get_message(buf, &buflen)) // Non-blocking
{
int i;
char letter;
rfCtrl = true;
for (i = 0; i < buflen-1; i++)
{
letter = buf[i];
if(letter != passRfCtrl[i])
{
rfCtrl = false;
break;
}
}
if(rfCtrl)
{
letter = buf[buflen-1];
Serial.println(letter);
switch (letter)
{
case 'S':
curState.setAct('S');
curState.setSpeed(0);
act = 'S';
break;
case 'B':
curState.setAct('B');
curState.setSpeed(curState.speed()-1);
act = 'B';
break;
case 'F':
curState.setAct('F');
curState.setSpeed(curState.speed()+1);
act = 'F';
break;
case 'R':
curState.setAct('R');
curState.setTurnAng(curState.turnAng() + 10);
act = 'R';
break;
case 'L':
curState.setAct('L');
curState.setTurnAng(curState.turnAng() - 10);
act = 'L';
break;
case 'W':
curState.setAct('W');
curState.setTurnAng(0);
act = 'W';
break;
}
}
}
// ---------------------------------------------------- Smart Section
if(!rfCtrl)
{
if((curState.echoR() < 300) && (curState.echoL() < 300)) //stop
{
curState.setAct('S');
curState.setSpeed(0);
act = 'S';
}
if((curState.echoR() < 150) && (curState.echoL() < 150)) //back
{
curState.setAct('B');
curState.setSpeed(curState.speed()-1);
act = 'B';
}
if((curState.echoR() == 0) && (curState.echoL() == 0)) //forward
{
curState.setAct('F');
curState.setSpeed(curState.speed()+1);
act = 'F';
}
}
if (Serial.available() > 0)
{
incomingByte = Serial.read();
Serial.println("command");
if (incomingByte == 52)
{
curState.setAct('L');
curState.setTurnAng(curState.turnAng() - 10);
act = 'L';
Serial.println("left");
}
if (incomingByte == 53)
{
curState.setAct('W');
curState.setTurnAng(0);
act = 'W';
Serial.println("stop");
}
if (incomingByte == 54)
{
curState.setAct('R');
curState.setTurnAng(curState.turnAng() + 10);
act = 'R';
Serial.println("right");
}
}
// ---------------------------------------------------- Drive Section
switch (act)
{
case 'S':
myDrive.move(curState.speed());
break;
case 'B':
myDrive.move(curState.speed());
break;
case 'F':
myDrive.move(curState.speed());
break;
case 'R':
myDrive.turn(curState.turnAng());
break;
case 'L':
myDrive.turn(curState.turnAng());
break;
case 'W':
myDrive.turn(curState.turnAng());
break;
}
// --------------------------------------------------- Final Section
act = '?';
prevState = curState;
deltaTime = millis() - prevTime;
if(deltaTime < 100)
delay(100 - deltaTime);
// Serial.println(curState.act());
}
После загрузки его, при подаче питания на Ардуино, сразу происходит центровка передних серводвигателей, но на этом все и кончается, немогу понять как заставить работать ультразвуковыедатчики и 4 мотора (подключенные через l298n парарельно по два). Я с Ардуино связываюсь впервые, подскажите где, что и как поменять или переподключить что бы всё заработало. Заранее очень благодарен за помощь.
Подскажите пожалуйста что делаю не так.
Для начала, не так Вы код вставляете в сообщение - http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
Ведь предлагал уже - всем при регистрации сделать обязательной к прочтению эту тему. Так тапками закидали.
oleg15618, в приведенном Вами коде подключается 3 нестандартные библиотеки. Ответить на вопрос "Что не так", не разбираясь в том, как работают эти библиотеки, невозможно.
Кроме того, Вы не написали, как появился приведенный Вами код, и почему Вы считаете, что он должен работать с конкретно Вашим роботом.