![]() |
|
|
#2 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Добавил сохранение 9 кнопок
И считываю 6 кнопок, на 1 кнопку больше чем в проекте моего робота Я думаю что дальше все будет понятно как еще 3 кнопки добавить Код:
#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_cool, 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
ir_cool=ReadEEPROM_Long(5);//прочитать команду из 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_cool==ir_tmp) //если принятый код равен коду который в памяти то включить вентилятор
{
//код для включения
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);
SavePush(5); //сохранить кодовое значение пульта
beep(50,1000);
beep(50,900);
SavePush(6); //сохранить кодовое значение пульта
beep(50,1000);
beep(50,900);
SavePush(7); //сохранить кодовое значение пульта
beep(50,1000);
beep(50,900);
SavePush(8); //сохранить кодовое значение пульта
beep(50,1000);
beep(50,900);
beep(50,800);
}
}
|
|
|
|
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|