Это
модификация предыдущего модуля "CyberBot" для
Wi-Fi робота
Список деталей и схема подключения для робота
Схема с энкодерами
Схема подключения моторов такая же, а так же в этой версии добавлены дополнительные функции
1-управление поворотом камеры по оси X и Y
2-регулировка скорости движения робота
3-включение фар
4-клаксон
5-выстрел из пушки
6-разметка габаритов робота
Скетч
PHP код:
#include <CyberLib.h> // Подключаем библиотеку
#include <Servo.h> // Подключаем библиотеку сервоприводов
Servo myservo1;
Servo myservo2;
long previousMillis; // Нужно для таймера
uint8_t LedStep = 0; // Счетчик
int i;
boolean light_stat;
uint8_t inByte;
uint8_t speed=255; //максимальная скорость по умолчанию
#define init {D4_Out; D5_Out; D6_Out; D7_Out; D8_Out; D11_Out; D12_Out;}
void setup()
{
myservo1.attach(9); // Подключение сервоприводов к порту
myservo2.attach(10); // Подключение сервоприводов к порту
init; // Инициализация портов
D11_Low; // Динамик OFF
randomSeed(A6_Read); //Получить случайное значение
horn(); //звуковое оповещение готовности робота
UART_Init(57600);// Инициализация порта для связи с роутером
// wdt_enable (WDTO_500MS);
}
void loop()
{
unsigned long currentMillis = millis(); // Обновление таймера
if (LedStep == 0 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.
previousMillis = currentMillis; // обновление таймер
LedStep = 1; // Счетчик шагов
}
if (LedStep == 1 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.
previousMillis = currentMillis; // обновление таймер
LedStep = 2; // Счетчик шагов
}
if (LedStep == 2 && currentMillis - previousMillis > 500){ // Задержка 0,5 сек.
LedStep = 0; // Счетчик шагов
}
if (UART_ReadByte(inByte)) //Еесли что то пришло
{
switch (inByte) // Смотрим какая команда пришла
{
case 'x': // Остоновка робота
robot_stop();
break;
case 'W': // Движение вперед
robot_go();
break;
case 'D': // Повопорт влево
robot_rotation_left();
break;
case 'A': // Поворот вправо
robot_rotation_right();
break;
case 'S': // Движение назад
robot_back();
break;
case 'U': // Серво поднимается
myservo1.write(i -= 20);
break;
case 'J': // Серво опускается
myservo1.write(i += 20);
break;
case 'H': // Серво поворачивается вправо
myservo2.write(i += 20);
break;
case 'K': // Серво поворачивается влево
myservo2.write(i -= 20);
break;
case 'B': // Бластер
D12_High;
break;
case 'C': // Клаксон
horn();
break;
case 'V': // Включить/Выключить фары
if(light_stat)
{
D8_Low;
light_stat=false;
} else
{
D8_High;
light_stat=true;
}
break;
}
if(inByte>47 && inByte<58) speed=(inByte-47)*25+5;//принимает команду и преобразуем в скорость
}
// wdt_reset();
}
void horn()
{
for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение
}
void robot_go()
{
D4_Low;
analogWrite(5, speed);
analogWrite(6, speed);
D7_Low;
}
void robot_back()
{
D4_High;
analogWrite(5, 255-speed);
analogWrite(6, 255-speed);
D7_High;
}
void robot_stop()
{
D4_Low;
analogWrite(5, 0);
analogWrite(6, 0);
D7_Low;
}
void robot_rotation_left()
{
D4_Low;
analogWrite(5, speed);
analogWrite(6, 255-speed);
D7_High;
}
void robot_rotation_right()
{
D4_High;
analogWrite(5, 255-speed);
analogWrite(6, speed);
D7_Low;
}
К сожалению проверить работу скетча и модуля пока нет возможности
Так что проверяйте и отписывайтесь
Работу с сервами взял из модифицированного проекта CyberBot от Artur Gulinsky