![]() |
![]() |
#1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
ИК приемник подключен к D8
Драйвер левого мотора подключен к D4 и D5 Драйвер правого мотора подключен к D6 и D7 Для входа в режим программирования пульта ДУ, нужно установить перемычку на пин (A1) и GND Arduino и нажать кнопку сброса, после сброса прозвучит сигнал готовности. Вы заранее должны выбрать на пульте удобные для управления роботом кнопки. Теперь после сигнала готовности, последовательно нажимайте выбранные Вами кнопки Порядок назначения кнопок будет такой: 1-вперед 2-назад 3-влево 4-вправо 5-стоп После того как контроллер сохранит в памяти все нажатые Вами кнопки, не забудие удалить перемычку с A0 Код:
#include <IRremote.h> #include <CyberLib.h> #include <avr/wdt.h> #define robot_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 IRrecv irrecv(8); //вход для ик приемника decode_results results; unsigned long ir_go, ir_back, ir_left, ir_right, ir_stop, ir_tmp; void setup() { robot_pins; //управление мотрами D11_Out; D11_Low; //пищалка D15_In; //вход для перемычки D15_High; //включить подтяжку robot_stop; irrecv.enableIRIn(); // включить приемник irrecv.blink13(true); // включить мигание светодиода при приеме ProgPush() ; //программирование кнопок ir_go=ReadEEPROM_Long(0);//прочитать команду из EEPROM ir_back=ReadEEPROM_Long(1);//прочитать команду из EEPROM ir_left=ReadEEPROM_Long(2);//прочитать команду из EEPROM ir_right=ReadEEPROM_Long(3);//прочитать команду из EEPROM ir_stop=ReadEEPROM_Long(4);//прочитать команду из EEPROM randomSeed(A6_Read); //Получить случайное значение for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота wdt_enable (WDTO_8S); //Сторожевая собака 8сек. } void loop() { Start if (irrecv.decode(&results)) //если был сигнал с пульта { ir_tmp=results.value; if(ir_go==ir_tmp) //если принятый код равен коду который в памяти то вперед { robot_go; beep(100,300); } else if(ir_back==ir_tmp) //если принятый код равен коду который в памяти то назад { robot_back; beep(100,400); } else if(ir_left==ir_tmp) //если принятый код равен коду который в памяти то назад { robot_right; beep(100,450); } else if(ir_right==ir_tmp) //если принятый код равен коду который в памяти то назад { robot_left; beep(100,500); } else if(ir_stop==ir_tmp) //если принятый код равен коду который в памяти то стоп { robot_stop; beep(10,300); beep(10,400); beep(10,300); } irrecv.resume(); //очистить входящий буфер } wdt_reset(); //покормить собаку, что бы она не сбежала End } ////////////////////////////////////////////////////////////////////////////////////////////// void SavePush(uint8_t addr) //сохранить нажатие кнопки { delay_ms(400); //задержка для крректной работы for(uint32_t i=0; i<2000000; i++)//ждем нажатия кнопки пульта { if (irrecv.decode(&results)) //если был сигнал с пульта { // то сохраняем результат в EEPROM WriteEEPROM_Long(addr, results.value); break; //прервать цикл } wdt_reset(); //покормить собаку } delay_ms(100); irrecv.resume(); //очистить входящий буфер } ////////////////////////////////////////////////////////////////////////////////////////////////// void ProgPush() { if(D15_Read==0)//если кнопка нажата { beep(50,800); beep(50,900); beep(50,1000); SavePush(0); //сохранить первое кодовое значение пульта beep(80,800); SavePush(1); //сохранить второе кодовое значение пульта beep(80,900); SavePush(2); //сохранить третье кодовое значение пульта beep(80,850); SavePush(3); //сохранить четвертое кодовое значение пульта beep(80,950); SavePush(4); //сохранить пятое кодовое значение пульта beep(50,1000); beep(50,900); beep(50,800); } } |
![]() |
![]() |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|