есть в наличии чудо анженерной системы фото в миниатюрах управляется через ик пульт ездит вперёд и назад скетч #include <IRremote.h> // это скачанная библиотека int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; //eventTime, для паузы, вместо delay,будем использовать функцию millis. unsigned long eventTime=0; //индикация таймера int timer = 12; int IN1 = 6; int IN2 = 5; int EN1 = 7; int EN2 = 4; void setup(){ irrecv.enableIRIn(); // включить приемник pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(EN1, OUTPUT); pinMode(EN2, OUTPUT); pinMode(timer, OUTPUT); } void loop() { if (digitalRead(RECV_PIN) == LOW) eventTime=millis(),digitalWrite(timer, HIGH); if(millis()-eventTime>100) digitalWrite(timer, LOW) ,digitalWrite(IN1, LOW),digitalWrite(IN2, LOW) ,digitalWrite(EN1, LOW),digitalWrite(EN2, LOW); if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 1641467951) // Если кодировка совпадает с кодом кнопки 2 { // Едем вперед digitalWrite(EN1, HIGH); digitalWrite(EN2, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); } if (results.value == 1641457751) { // Едем назад digitalWrite(EN1, LOW); digitalWrite(EN2, LOW); digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); } irrecv.resume(); // Получаем следующее значение } } задача как в этот скетч добавить поворот сервой (серва от 0 до 180) через кнопки пульта влево,вправо, а если нет не каких команд серва держит (90 градусов) и подскажите как одновременно подключить серву и ик диод((приёмник)или(несколько ик диодов))
Вам надо узнать значения, которое передают ваши стрелочки, и добавить новые условие с этими значениями)
Не совсем понятно зачем несколько ИК приемников ??? Вот в этой статье я описывал как узнать коды кнопок ИК пульта
хочу за питать всё от одного аккумулятора, а 5в пин на ардуине только 1, а мне надо включить 3 ик приёмника (на морду, зад, и крышу) чтоб сигнал ловился нормально со всех сторон, и + ещё серву за питать для поворота 1й оси. как узнать значение кнопок я уже узнал
Попробовал написать скетч. Сервы правда ни разу не крутил, сделал на основе урока Код (Text): #include <IRremote.h> #include <Servo.h> Servo myservo; // create servo object to control a servo int RECV_PIN = 11; //вход ИК приемника IRrecv irrecv(RECV_PIN); decode_results results; int IN1 = 6, IN2 = 5, EN1 = 7, EN2 = 4; // запоминаем положение кнопок текущее и предыдущее boolean stateUp = false, stateUpLast = false; boolean stateDown = false, stateDownLast = false; boolean stateLeft = false, stateLeftLast = false; boolean stateRight = false, stateRightLast = false; void setup() { irrecv.enableIRIn(); // включить приемник myservo.attach(9); // подключаем серво на пин 9 myservo.write(90); // поставим серву в ццентральное положение pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(EN1, OUTPUT); pinMode(EN2, OUTPUT); } void loop() { stateUpLast = stateUp; stateDownLast = stateDown; stateLeftLast = stateLeft; stateRightLast = stateRight; if (irrecv.decode(&results)) { if (results.value == 1641467951) { //если нажата кнопка вперед stateUp = true; stateDown = false; } else if (results.value == 1641457751) { //если нажата кнопка назад stateDown = true; stateUp = false; } else { stateUp = false; stateDown = false; } ////////////////////////////////////////////////////// if (results.value == 1641421031) { // едем налево stateLeft = true; stateRight = false; } else if (results.value == 1641427151) { //едем направо stateRight = true; stateLeft = false; } else { stateRight = false; stateLeft = false; } //////////едем вперед//////////////////////////////////// if (stateUp == true) { //если нажата кнопка вперед if (stateUpLast == true && stateUp == true) { //если была уже нажата то ничего не меняем } if (stateUpLast == false && stateUp == true) { //если была отжата то меняем) и дальше аналогично digitalWrite(EN1, HIGH); digitalWrite(EN2, HIGH); digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); } } /////////едем назад/////////////////////////////////////// if (stateDown == true) { if (stateDownLast == true && stateDown == true) { } if (stateDownLast == false && stateDown == true) { digitalWrite(EN1, LOW); digitalWrite(EN2, LOW); digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); } } ////////////стоим на месте///////////////////////////////// if (stateUp == false && stateDown == false) { if (stateUpLast == true || stateDownLast == true) { digitalWrite(EN1, LOW); digitalWrite(EN2, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); } } ///////////поворачиваем серву влево///////////////////////// if (stateLeft == true) { if (stateLeftLast == true && stateLeft == true) { } if (stateLeftLast == false && stateLeft == true) { myservo.write(45); } } //////////пооврачиваем серву вправо//////////////////////// if (stateRight == true) { if (stateRightLast == true && stateRight == true) { } if (stateRightLast == false && stateRight == true) { myservo.write(135); } } /////////поворачиваем серву в центральное положение//////// if (stateLeft == false && stateRight == false) { if (stateLeftLast == true || stateRightLast == true) { myservo.write(90); } } irrecv.resume(); // Получаем следующее значение } }