Робот управляемый с любого ИК пульта
- Войдите на сайт для отправки комментариев
Робот собирается за 10 минут и состоит из следующих деталей
Схема робота простейшая и имеет всего 4 компонента
2-Драйвер двигателя (Motor Shield)
4-Любой динамик или звуковой капсуль с сопротивлением не менее 16ом
После сборки приступаем к программированию робота
Для этого сначала кладем библиотеку CyberLib и Remote в папку /libraries/ и заливаем в скетчь
#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; //пищалкка
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
beep(50,100);
beep(50,1000);
beep(50,500);
beep(50,300);
beep(50,500);
beep(50,600);
beep(50,200);
beep(50,170);
beep(50,900);
beep(50,1000);
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 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 ProgPush()
{
if(D15_Read==0)//если кнопка нажата
{
beep(30,800);
beep(30,900);
beep(30,1000);
SavePush(0); //сохранить первое кодовое значение пульта
beep(50,800);
SavePush(1); //сохранить второе кодовое значение пульта
beep(50,900);
SavePush(2); //сохранить третье кодовое значение пульта
beep(50,850);
SavePush(3); //сохранить четвертое кодовое значение пульта
beep(50,950);
SavePush(4); //сохранить пятое кодовое значение пульта
beep(30,1000);
beep(30,900);
beep(30,800);
}
}
Теперь остается привязать кнопки Вашего пульта к командам робота
Для этого потребуется установить перемычку на пин (A1) и GND Arduino и нажать кнопку сброса,
после сброса прозвучит сигнал готовности.
Вы заранее должны выбрать на пульте удобные для управления роботом кнопки. Теперь после сигнала готовности, последовательно нажимайте выбранные Вами кнопки
Порядок назначения кнопок будет такой:
1-вперед
2-назад
3-влево
4-вправо
5-стоп
После того как контроллер сохранит в памяти все нажатые Вами кнопки, не забудие удалить перемычку с A0
И можете управлять своим роботом
В следующей статье опишу как использовать оптические энкодеры на этом роботе, управление по Bluetooth и подключение к нему видеокамеры
Для кого то готовое решение для игрушки и знакомства с ардуиной. И это ХОРОШО!
Например для меня.
Я люблю программировать, но не люблю пилить и сверлить. Руки у меня не из того места растут :)
Даже не представляю как можно сделать в домашних условиях диск энкодера?
Если бы не готовая платформа, я бы еще 5 лет готовился бы совершить этот подвиг и наврятли бы совершил :)
А с готовой платформой можно практически сразу приступать к программированию робота
Я наоборот люблю мастерить, а вот программировать..., ну незнаю, мне это интересно как все новое, но я непонимаю как что то абстрактное перевести в реальный мир. Наверное поэтому мне туго дается эта наука.
Всё нормально, но вот такие конструкции
лучше писать так:
#define robot_stop { D4_Low; D5_Low; D6_Low; D7_Low; }чтобы не нарваться на проблемы, которые возникнут при написании конструкции типа:
а потом искать проблему.
Хотя еще и по этой причине всегда пишу:
if( code < 0 ) { robot_stop; }Спасибо.
Я написал код на скорую руку за 1 час и не успел оптимизировать его.
Сейчас смотрю на него и кое что подправил бы. Например сохранение кодов кнопок можно выполнить в цикле for, но вот только нет возможности отредактировать сообщение в шапке темы
А вы его ниже выложите, таким новичкам как я будет очень полезно смотреть и сравнивать различные подходы к реализации решений.
#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; //пищалкка 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 for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); 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 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 ProgPush() { if(D15_Read==0)//если кнопка нажата { for(uint8_t i=0; i<5; i++) { beep(200, random(100, 1000)); SavePush(i); //сохранить кодовое значение пульта } } }приветствую участников форума. у меня возникла вот такая проблемка в место нано я иполльзую уно на ней нет вывода SPK .По этому я немагу подключить денамик и обучить пульт. Можно как то сделать свето диод для этой цели .Ещё прозьба поподробней описать порядок абучения пульта зарание спосибо запомощ
ура разобрался нодо было внимательней скетч просматреть. Проблемка только в помехах от движков команды срабатывают через рас , пробовал атключать движки вместо них ставил свето диоды , срабатывает прекрасно. Вопрос как избавиться от помех?
У меня нет проблем с помехами, работает стабильно. Если что можно питание ИК приемника отфильтровать с помощью резистора 100ом и конденсаторами керамика 0,1мкф и электролит 10мкф
Можно так же поставить конденсаторы 0,1 мкф на моторы, по 4шт на каждый
первый вариант скандёрами памог спасибо
Перепрограммировал робота для работы с оптическими энкодерами и детектором препядствий
На видео видно что робот едет синхронизируя вращение колес
Компоненты и Инструкция по сборки робота
Посмотреть Видео
Код
#include <CyberLib.h> #define encoders_init D2_In; D3_In; D2_High; D3_High #define motors_init D4_Out; D5_Out; D6_Out; D7_Out #define robot_go D4_Low; D5_High; D6_High; D7_Low #define robot_stop D4_Low; D5_Low; D6_Low; D7_Low #define robot_left D4_Low; D5_High; D6_Low; D7_Low #define robot_right D4_Low; D5_Low; D6_High; D7_Low #define robot_rotation_left D4_Low; D5_High; D6_Low; D7_High #define size_buff 5 //размер массива sensor uint16_t sensor[size_buff]; //массив для хранения замеров дальномера volatile int8_t course=0; void setup() { motors_init; //инициализация выходов моторов encoders_init; //инициализация входов Энкодеров D14_Out; D14_Low; //пин trig ультразвукового сонара D15_In; //пин echo ультразвукового сонара for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота IntOn(); //включить прерывания robot_go; //поехали!!! } void loop() {Start uint16_t dist=GetDistance(); //делаем замер if( dist < 38) Rotation(); //если дистанция меньше 38см if( dist > 37 && course==0) robot_go; End;} //*************************************************** void MotorL() // обработка внешнего прерывания левое колесо { course--; if(course > 0) { robot_left; }else{ robot_right;} } void MotorR() // обработка внешнего прерывания правое колесо { course++; if(course < 0){ robot_right; }else{ robot_left;} } //*************************************************** uint16_t GetDistance() { uint16_t dist; for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров { D14_High; delay_us(10); D14_Low; //запустить измерение dist = pulseIn(15,HIGH); //считываем длительность времени прохождения эха delay_ms((50000-dist)/1000); //задержка между посылками sensor[i]=dist; } dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см return dist; } //*************************************************** void Rotation() { IntOff(); robot_rotation_left; delay_ms(180); robot_stop; course=0; IntOn(); } //*************************************************** void IntOn() { attachInterrupt(0, MotorL, RISING); // настроить срабатывание прерывания interrupt0 pin 2 по перерпапду с низкого (Low) на высокий(HIGH) attachInterrupt(1, MotorR, RISING); // настроить срабатывание прерывания interrupt1 pin 3 по перерпапду с низкого (Low) на высокий(HIGH) } void IntOff() { detachInterrupt(0); // отключить срабатывание прерывания interrupt0 detachInterrupt(1); // отключить срабатывание прерывания interrupt1 } //*************************************************** 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); } }Запрограммировал ИК пульт вашей программой (сообщение №7), но при нажатии клавиш пульта выдаются случайные команды. В чем загвоздка?
Для начала программирования розеток, нажимаем на заранее прописанную в скетче кнопку пульта, ИЛИ нажимаем физический кнопку на Arduino, запускается режим программирования, последовательным нажатием на кнопки пульта мы программируем 8 розеток. Arduino Запоминает эти кнопки пульта. Далее мы можем управлять розетками, тем пультом котором мы программировали.
Добрый день.
Я новичок, по этому сильно не пинайте. Для начала фотография (чтобы понимание было)
Ардуино UNO и моторшилд. В программу добавил библиотеку AFMotor. ИК-приёмник переподключил на пин А0, бипер - на пин D10, т.к. сервы не используются и этот контакт не занят. Кнопка ИК программирования осталась на А1.
Теперь программа:
#include <IRremote.h> #include <CyberLib.h> #include <avr/wdt.h> #include <AFMotor.h> AF_DCMotor motorA(2); AF_DCMotor motorB(3); #define robot_go{motorA.run(FORWARD);motorB.run(FORWARD);} #define robot_back{motorA.run(BACKWARD);motorB.run(BACKWARD);} #define robot_left{motorA.run(FORWARD);motorB.run(BACKWARD);} #define robot_right{motorA.run(BACKWARD);motorB.run(FORWARD);} #define robot_stop{motorA.run(RELEASE);motorB.run(RELEASE);} IRrecv irrecv(14); //вход для ик приемника decode_results results; unsigned long ir_go, ir_back, ir_left, ir_right, ir_stop, ir_tmp; void setup() { D10_Out; //пищалкка D15_In; //вход кнопки D15_High; //включить подтяжку irrecv.enableIRIn(); // включить приемник irrecv.blink13(true); // включить мигание светодиода при приеме motorA.setSpeed(255); motorA.run(RELEASE); motorB.setSpeed(255); motorB.run(RELEASE); 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 for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); 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 beep(byte dur, word frq) { dur=(1000/frq)*dur; //расчет длительности бипа for(byte i=0; i<dur; i++) { D10_High; delay_us(frq); D10_Low; delay_us(frq); } } ////////////////////////////////////////////////////////////////////////////////////////////////// void ProgPush() { if(D15_Read==0)//если кнопка нажата { for(uint8_t i=0; i<5; i++) { beep(200, random(100, 1000)); SavePush(i); //сохранить кодовое значение пульта } } }То есть программа не изменилась, лишь изменились переменные для библиотеки AFMotor.
А теперь такая проблема. На мотор шилде две L293D. Одна управляет М1 и М2, вторая М3 и М4. Чтобы микросхемы меньше грелись, я решил раскидать моторы на М2 и М3. Но при таком раскладе работает только М3. Если в программе прописать:
AF_DCMotor motorA(3) AF_DCMotor motorB(4)
ну и соответсвенно переподключить моторы на эти контакты - то всё прекрасно работает. Если запрограммировать М1 и М2 - то не работает (при соответсвующем подключении).
Сначала подумал, что может быть не исправна L293D которая управляет М1 и М2, но при таком коде работают все моторы:
#include <AFMotor.h> AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3); AF_DCMotor motor4(4); void setup() { motor1.setSpeed(255); motor2.setSpeed(255); motor3.setSpeed(255); motor4.setSpeed(255); } void loop() { motor1.run(FORWARD); motor2.run(FORWARD); motor3.run(FORWARD); motor4.run(FORWARD); }Вопрос снимается, ответ нашёл здесь на форуме (конфликт библиотек)
[quote=carduino.ru]
два вопроса новичка!
1. подходит ли код на ардуино уно
2. в каой пин на уно подключить спикер?
по спикеру не актуально, по коду д11
но робот не пашет, хотя запускал тестовый код с монитором порта, ик датчик работает, сама платформа ездила на этих же портах с датчико расстояния, замыкаю а1 сброс, спикер пишит один раз, если разомкнуть то мелодия, тоесть в режим програмирования входит, куды капать?
судя по коду при нажатии кнопки пульта, должен гореть светодиод, но он не горит, хотя тестовой прогой прогонял, команды идут.
два вопроса новичка!
1. подходит ли код на ардуино уно
2. в каой пин на уно подключить спикер?
1-Подойдет
2-на D11, но желательно через транзистор
судя по коду при нажатии кнопки пульта, должен гореть светодиод, но он не горит, хотя тестовой прогой прогонял, команды идут.
убери из кода строки
wdt_enable (WDTO_8S);
и
wdt_reset();
Возможно что у тебя прошивка не поддерживает работу с WDT
Добрый день!
Требуется помощь форумчан. Собрал робота на ардуино уно _ мотор шилд Motor Shield V1 для Arduino. + плата расширения. Все это бутербродом собрано. На моторшилд напаял гнезда для проводов как и на ардуино уно и все собрал одним бутербродам.
Код
#include <IRremote.h> #include <CyberLib.h> #include <avr/wdt.h> #include <AFMotor.h> AF_DCMotor motorA(1); AF_DCMotor motorB(2); AF_DCMotor motorC(3); AF_DCMotor motorD(4); #define robot_go {motorA.run(FORWARD);motorB.run(FORWARD);motorC.run(FORWARD);motorD.run(FORWARD);} #define robot_back {motorA.run(BACKWARD);motorB.run(BACKWARD);motorC.run(BACKWARD);motorD.run(BACKWARD);} #define robot_left {motorA.run(FORWARD);motorB.run(BACKWARD);motorC.run(FORWARD);motorD.run(BACKWARD);} #define robot_right {motorA.run(BACKWARD);motorB.run(FORWARD);motorC.run(BACKWARD);motorD.run(FORWARD);} #define robot_stop {motorA.run(RELEASE);motorB.run(RELEASE);motorC.run(RELEASE);motorD.run(RELEASE);} IRrecv irrecv(3); //вход для ик приемника decode_results results; unsigned long ir_go, ir_back, ir_left, ir_right, ir_stop, ir_tmp; void setup() { irrecv.enableIRIn(); // включить приемник irrecv.blink13(true); // включить мигание светодиода при приеме D15_High; //включить подтяжку D10_Out; //пищалкка motorA.setSpeed(255); motorA.run(RELEASE); motorB.setSpeed(255); motorB.run(RELEASE); motorC.setSpeed(255); motorC.run(RELEASE); motorD.setSpeed(255); motorD.run(RELEASE); 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 for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); 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_right==ir_tmp) //если принятый код равен коду который в памяти то назад { robot_right; beep(100,450); } else if(ir_left==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 beep(byte dur, word frq) { dur=(1000/frq)*dur; //расчет длительности бипа for(byte i=0; i<dur; i++) { D10_High; delay_us(frq); D10_Low; delay_us(frq); } } ////////////////////////////////////////////////////////////////////////////////////////////////// void ProgPush() { if(D15_Read==0)//если кнопка нажата { for(uint8_t i=0; i<5; i++) { beep(200, random(100, 1000)); SavePush(i); //сохранить кодовое значение пульта } } }Ничем особо не отличается, но один мотор не крутится AF_DCMotor motorC(3);. В чем может быть проблема? Где моя ошибка?
Добрый день или ночи
возможноли добавить в скеч чтобы при включении пин3 и пи4 мигали а 5 пин срабатывал на удержание
плиз очень надо!
#include <IRremote.h> // это скачанная библиотека048049intRECV_PIN = 11;//вход ИК приемника050051IRrecv irrecv(RECV_PIN);052053decode_results results;054055056unsignedlongValue100 = 0xEE008FC0;// переменная для хранения кода кнопки пульта057058//Этот блог дает возможность физический прописывать коды кнопок своего пульта059// (как альтернатива программирования на лету с пульта)060// ВАЖНО !!! (1000809) это код кнопки - моего пульта - у вашего пульта будет другой код - замените на свой061062unsignedlongValue2 = 0x1000809;063unsignedlongValue3 = 0x1008889;064unsignedlongValue4 = 0x1004849;065unsignedlongValue5 = 0x100C8C9;066unsignedlongValue6 = 0x1002829;067unsignedlongValue7 = 0x100A8A9;068unsignedlongValue8 = 0x1006869;069unsignedlongValue9 = 0x100E8E9;070unsignedlongValue10 = 0x1001819;071unsignedlongValue0 = 0x1009899;072073074unsignedlongValue11 = 0x180C041;075unsignedlongValue12 = 0x180A021;076unsignedlongValue13 = 0x1801091;077unsignedlongValue14 = 0x1809011;078unsignedlongValue15 = 0x1000E0F;079unsignedlongValue16 = 0x1008E8F;080unsignedlongValue17 = 0x1004E4F;081unsignedlongValue18 = 0x100CECF;082083084085086//можно подать положительный сигнал на пин 14 (A0) для начала программирования087//(как альтернатива начала программирования на лету с пульта)//unsigned long Value100 = 0xEE008FD4;088089intbutpin = 14;090091092//Даем имена пинам093intpultpin2 = 2;094intpultpin3 = 3;095intpultpin4 = 4;096intpultpin5 = 5;097intpultpin6 = 6;098intpultpin7 = 7;099intpultpin8 = 8;100intpultpin9 = 9;101//***102103intledpin[] = {1042, 3, 4, 5, 6, 7, 8, 9};// номера задействованных пинов, количество можно уменьшить или увеличить (по желанию)105intledstate[] = {1060, 0, 0, 0, 0, 0, 0, 0};//количество задействованных пинов, количество можно уменьшить или увеличить (по желанию)107intbutrec = 0;108longprevcode[] = {1091, 1, 1, 1, 1, 1, 1, 1};//количество задействованных пинов, количество можно уменьшить или увеличить (по желанию)110longprevM = 0;111longprevM1 = 0;112longtimeEx = 0;113boolean expr =true;114115voidsetup()116117118{119for(inti=0; i <= 8; i++){// цифру 8 и все восьмёрки ниже заменяем на цифру задействованных пинов (по желанию)120pinMode(ledpin[i],OUTPUT);121}122for(inti=0; i <= 8; i++){123}124pinMode(butpin, INPUT);125digitalWrite(butpin, LOW);126127128129pinMode(2, OUTPUT);130pinMode(3, OUTPUT);131pinMode(4, OUTPUT);132pinMode(5, OUTPUT);133pinMode(6, OUTPUT);134pinMode(7, OUTPUT);135pinMode(8, OUTPUT);136pinMode(9, OUTPUT);137138139{140Serial.begin(9600);141irrecv.enableIRIn();// Start the receiver. включить приемник142}143}144145voidloop()146147148{149if(irrecv.decode(&results)) {150Serial.println(results.value, HEX);151irrecv.resume();// Receive the next value152}153154155{156if(irrecv.decode(&results)) {157Serial.println(results.value, HEX);158}159}160161162{163if(results.value == Value100)digitalWrite(butpin, HIGH);164digitalWrite(butpin, LOW);// кнопкой от пульта запускаем режим программируемые на лету165166167168169170//Управляем с заранее записанных кодов кнопок своего пульта171//unsigned long Value2 = 0xF7283C77;172173174if(results.value == Value2)digitalWrite(pultpin2, HIGH);175if(results.value == Value3)digitalWrite(pultpin3, HIGH);176if(results.value == Value4)digitalWrite(pultpin4, HIGH);177if(results.value == Value5)digitalWrite(pultpin5, HIGH);178if(results.value == Value6)digitalWrite(pultpin6, HIGH);179if(results.value == Value7)digitalWrite(pultpin7, HIGH);180if(results.value == Value8)digitalWrite(pultpin8, HIGH);181if(results.value == Value9)digitalWrite(pultpin9, HIGH);182183184if(results.value == Value10)digitalWrite(pultpin2, LOW);185if(results.value == Value0)digitalWrite(pultpin3, LOW);186if(results.value == Value11)digitalWrite(pultpin4, LOW);187if(results.value == Value12)digitalWrite(pultpin5, LOW);188if(results.value == Value13)digitalWrite(pultpin6, LOW);189if(results.value == Value14)digitalWrite(pultpin7, LOW);190if(results.value == Value15)digitalWrite(pultpin8, LOW);191if(results.value == Value16)digitalWrite(pultpin9, LOW);192193194//вКлючаем все195if(results.value == Value17)digitalWrite(pultpin9, HIGH)196,digitalWrite(pultpin2, HIGH),digitalWrite(pultpin3, HIGH)197,digitalWrite(pultpin4, HIGH),digitalWrite(pultpin5, HIGH)198,digitalWrite(pultpin6, HIGH),digitalWrite(pultpin7, HIGH)199,digitalWrite(pultpin8, HIGH),digitalWrite(pultpin9, HIGH);200201//вЫключаем все202if(results.value == Value18)digitalWrite(pultpin9, LOW)203,digitalWrite(pultpin2, LOW),digitalWrite(pultpin3, LOW)204,digitalWrite(pultpin4, LOW),digitalWrite(pultpin5, LOW)205,digitalWrite(pultpin6, LOW),digitalWrite(pultpin7, LOW)206,digitalWrite(pultpin8, LOW),digitalWrite(pultpin9, LOW);207208209210211212213214{215if(irrecv.decode(&results)){216delay(150);217for(inti=0; i<8; i++)218if(results.value == prevcode[i]){219ledstate[i] = !ledstate[i];220digitalWrite(ledpin[i], ledstate[i]);221}222223}224butrec = digitalRead(butpin);225if(butrec == HIGH){226for(inti=0; i<8; i++){227ledstate[i] = 0;228digitalWrite(ledpin[i], ledstate[i]);229}230timeEx = millis() - prevM1;231for(inti=0; i<8; i++){232expr =true;233timeEx = 0;234prevM1 = millis();235// < 5000)время ожидания сигнала с пульта, для перехода к следующему пину (в момент программирования)236while(expr ==true&& timeEx < 5000){237timeEx = millis() - prevM1;238if(millis() - prevM > 250){239prevM = millis();240intledstate1 = !ledstate1;241digitalWrite(ledpin[i], ledstate1);242}243if(irrecv.decode(&results)) {244delay(150);245prevcode[i] = results.value;246irrecv.resume();247expr = !expr;248prevM1 = millis();249250}251}252253digitalWrite(ledpin[i], LOW);254255}256}257}258}259}Здарова!парни подскажите как правильно подать тему чтобы умы сего форума помогли я новичёк и с ардуино
и написанием скеча несправляюсь!нужна помощ в написании скеча плиз!
задача вкл выкл 8и светодиодов
пин2 вкл выкл с пульта одной кнопка1 код кнопки/ FD00FF
пин3вкл мигание выкл с пульта кнопка 2/ FD807F
пин4вкл мигание выкл с пульта кнопка 3/FD40BF
пин5вкл при удержании выкл 4/ FD20DF
пин6вкл при удержании выкл 5/ FDA05F
пин7вкл выкл с кнопки6/ FD609F
пин8вкл выкл с кнопки7/ FD10EF
пин9вкл выкл с кнопки8/ FDB04F