Код управления роботом с планшета Android и визуальная проверка оптических энкодеров
На планшете в плей маркете ищем и устанавливаем приложение "BlueCam"
Для этого понадобятся:
контроллер
Arduino Nano V.7
материнская плата CyberBot , будут в продаже через 2 недели
драйвер двигателей(Motor Shield)
модуль Bluetooth
При использовании роутера
TP-LINK TL WR703N и
вебкамеры, Вы можете не только управлять роботом с любого Android, но и наблюдать окружающую обстановку вокруг робота
Для проверки энкодера возьмите робота в руки и запустите кнопку движение в лево(право), при этом светодиод D13 должен вспыхивать равномерно с одной частотой, без каких либо прерываний.
код для Arduino Nano
PHP код:
#include <CyberLib.h>
#include <SoftwareSerial.h>
#define motors_pins D4_Out; D5_Out; D6_Out; D7_Out
#define robot_go D4_Low; D5_High; D6_High; D7_Low
#define robot_back D4_High; D5_Low; D6_Low; D7_High
#define robot_left D4_Low; D5_High; D6_Low; D7_Low
#define robot_right D4_Low; D5_Low; D6_High; D7_Low;
#define robot_stop D4_Low; D5_Low; D6_Low; D7_Low
SoftwareSerial mySerial(9, 10); // RX, TX
void setup()
{
motors_pins;
D13_Out; //индикация энкодеров
//Serial.begin(115200);
mySerial.begin(9600);
//mySerial.println("Hello, world!");
D2_In; D3_In; D2_High; D3_High; //Подключить внутренние подтягивающие резисторы
attachInterrupt(0, MotorA, RISING); // настроить срабатывание прерывания interrupt0 pin 2 по перерпапду с низкого (Low) на высокий(HIGH)
attachInterrupt(1, MotorB, RISING); // настроить срабатывание прерывания interrupt1 pin 3 по перерпапду с низкого (Low) на высокий(HIGH)
IntroSound(); //звуковое оповещение готовности робота
}
void loop()
{
Start
if (mySerial.available())
{
switch (mySerial.read())
{
case 60: robot_right;
break;
case 62: robot_left;
break;
case 86: robot_back;
break;
case 94: robot_go;
break;
default: robot_stop;
}
}
End;
}
//***************************************************
void MotorA() // обработка внешнего прерывания 0 правое колесо
{
D13_Inv;
//stepA++;
//course = stepA - stepB; // расхождение в оборотах колес
}
void MotorB() // обработка внешнего прерывания 1 левое колесо
{
D13_Inv;
// stepB++;
}
//***************************************************
void beep(byte dur, word frq)
{
dur=(1000/frq)*dur; //расчет длительности бипа
for(byte i=0; i<dur; i++)
{
D11_High;
delay_us(frq);
D11_Low;
delay_us(frq);
}
}
//***************************************************
void IntroSound()
{
beep(30,300);
beep(30,400);
beep(50,300);
beep(50,900);
beep(50,850);
beep(50,750);
beep(30,600);
beep(30,300);
beep(100,200);
}