![]() |
|
![]() |
#1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
В планах добавить кнопку "Авто"-это автоматический режим движения по УЗД сенсору
Еще можно добавить голосовое озвучка текстов, отправленных со стороны управления Что то вроде обратной связи. P.S. У меня пока нет идей, что бы что то особенное добавить |
![]() |
![]() |
![]() |
#2 |
Member
Регистрация: 12.01.2016
Адрес: Кривой Рог
Сообщений: 36
Вес репутации: 0 ![]() |
![]()
Я на меге на гуляющиий rx tx повесил плеер с записанными голосовыми фрагментами. В скетче прописал все возможные варианты воспроизведения команд. Добавил голосовое распознавание. Которое так же управляет воспроизведением фрагментов звука. И на ругательное слово "Эй железяка", отвечает как его зовут на самом деле. И остальные команды распознавателя так же что делают. Скажем так, минимальный диалог можно продумать.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Регистрация: 01.04.2016
Сообщений: 2
Вес репутации: 0 ![]() |
![]()
#include <CyberLib.h>
#include <Servo.h> #include <AFMotor.h> // Подключаем библиотеку для управления двигателями AF_DCMotor motor1(1); //создаем мотор №1 AF_DCMotor motor2(2); //создаем мотор №2 AF_DCMotor motor3(3); //создаем мотор №1 AF_DCMotor motor4(4); //создаем мотор №2 Servo myservo1; Servo myservo2; #define step_servo 10 //минимальный угол поворота ссервы за один клик uint8_t min_pos=10, max_pos=170; //минимальное и максимаьное положение сервы int i=130, i2=90; //начальное положение сервы boolean light_stat; //состояние фар uint8_t inByte, packid; uint8_t speed=255; //максимальная скорость моторов по умолчанию #define init {D3_Out; D4_Out; D5_Out; D6_Out; D7_Out; D9_Out; D10_Out; D11_Out;} //используемые порты void setup() { Serial.begin(57600); //включаем передачу данных на скорости 9600 бит/c motor1.setSpeed(255); //Скорость движка №1 motor2.setSpeed(255); //Скорость движка №2 motor3.setSpeed(255); //Скорость движка №1 motor4.setSpeed(255); //Скорость движка №2 myservo1.attach(9); // Подключение сервоприводов к порту myservo2.attach(10); // Подключение сервоприводов к порту myservo2.write(i2); // начальное положение сервы(горизот) при включении myservo1.write(i); // начальное положение сервы(вертикаль) при включении init; // Инициализация портов D11_Low; // Динамик OFF randomSeed(A5_Read); //Получить случайное значение horn(); //звуковое оповещение готовности робота UART_Init(57600); // Инициализация порта для связи с роутером //wdt_enable (WDTO_500MS); } void loop() { if (UART_ReadByte(inByte)) { if ( packid == 16 ) // контрольная сумма команды cm= { packid=0; 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': // Серва поднимается if(i > min_pos) myservo1.write(i -= step_servo); break; case 'J': // Серва опускается if(i < max_pos) myservo1.write(i += step_servo); break; case 'K': // Серва поворачивается вправо if(i2 > min_pos) myservo2.write(i2 -= step_servo); break; case 'H': // Серва поворачивается влево if(i2 < max_pos) myservo2.write(i2 += step_servo); break; case 'B': // Бластер D10_High; break; case 'C': // Клаксон horn(); break; case ']': // запрос состояния аналоговых датчиков byte2char(A6_Read,A7_Read); break; case 'V': // Включить/Выключить фары if(light_stat) { D9_Low; light_stat=false; } else { D9_High; light_stat=true; } break; } if(inByte>47 && inByte<58) speed=(inByte-47)*17+85; //скорость вращения колес } else packet_id(inByte); } // wdt_reset(); } //**************************************** ************ void horn() { for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение } void robot_go() { motor1.run(FORWARD); //движемся вперед motor2.run(FORWARD); //движемся вперед motor3.run(FORWARD); //движемся вперед motor4.run(FORWARD); //движемся вперед } void robot_back() { motor1.run(BACKWARD); //движемся назад motor2.run(BACKWARD); //движемся назад motor3.run(BACKWARD); //движемся назад motor4.run(BACKWARD); //движемся назад } void robot_left() { motor2.run(FORWARD); //Повернем влево motor3.run(FORWARD); //Повернем влево } void robot_right() { motor1.run(FORWARD); //Повернем вправо motor4.run(FORWARD); //Повернем вправо } void robot_stop() { motor1.run(RELEASE); //Останавливаем колеса motor2.run(RELEASE); //Останавливаем колеса motor3.run(RELEASE); //Останавливаем колеса motor4.run(RELEASE); //Останавливаем колеса } void packet_id(uint8_t inbyte) //проверяем идентификатор пакета "cm=" { switch (inbyte) { case 'c': packid=2; break; case 'm': packid*=2; //packid=packid<<1; break; case '=': packid*=4; //packid=packid<<2; break; default: packid=0; } } void byte2char(uint16_t inbyte0, uint16_t inbyte1) { char bytetochar[5]; uint8_t buf_answer[]="{\"dat1\":\"0000\",\"dat2\":\"0000\"}" ; itoa(inbyte0+10000, bytetochar, 10); buf_answer[9]= bytetochar[1]; buf_answer[10]= bytetochar[2]; buf_answer[11]= bytetochar[3]; buf_answer[12]= bytetochar[4]; itoa(inbyte1+10000, bytetochar, 10); buf_answer[23]= bytetochar[1]; buf_answer[24]= bytetochar[2]; buf_answer[25]= bytetochar[3]; buf_answer[26]= bytetochar[4]; UART_SendArray(buf_answer, sizeof(buf_answer)-1); } Верно или зачем тебе голова мальчик? |
![]() |
![]() |
![]() |
Здесь присутствуют: 7 (пользователей: 0 , гостей: 7) | |
|
|