помогите с скетчем

Тема в разделе "Проводная и беспроводная связь", создана пользователем ga2bi, 3 июл 2014.

  1. ga2bi

    ga2bi Нерд

    есть в наличии чудо анженерной системы
    фото в миниатюрах

    управляется через ик пульт ездит вперёд и назад

    скетч
    #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 градусов)



    и подскажите как одновременно подключить серву и ик диод((приёмник)или(несколько ик диодов))
     

    Вложения:

    • 1 (1).jpg
      1 (1).jpg
      Размер файла:
      378,4 КБ
      Просмотров:
      870
    • 1 (2).jpg
      1 (2).jpg
      Размер файла:
      358,5 КБ
      Просмотров:
      704
    • 1 (3).jpg
      1 (3).jpg
      Размер файла:
      468,1 КБ
      Просмотров:
      728
    • 1 (4).jpg
      1 (4).jpg
      Размер файла:
      397,2 КБ
      Просмотров:
      721
    • 1 (5).jpg
      1 (5).jpg
      Размер файла:
      451,5 КБ
      Просмотров:
      876
    • 1 (6).jpg
      1 (6).jpg
      Размер файла:
      502,7 КБ
      Просмотров:
      556
    • 1 (7).jpg
      1 (7).jpg
      Размер файла:
      548,5 КБ
      Просмотров:
      513
    Последнее редактирование: 4 июл 2014
  2. acos

    acos Официальный гик Администратор

    Вам надо узнать значения, которое передают ваши стрелочки, и добавить новые условие с этими значениями)
     
  3. atompost

    atompost Гик

    Не совсем понятно зачем несколько ИК приемников ???:rolleyes:


    Вот в этой статье я описывал как узнать коды кнопок ИК пульта :)
     
  4. ga2bi

    ga2bi Нерд

    хочу за питать всё от одного аккумулятора, а 5в пин на ардуине только 1, а мне надо включить 3 ик приёмника (на морду, зад, и крышу) чтоб сигнал ловился нормально со всех сторон, и + ещё серву за питать для поворота 1й оси.

    как узнать значение кнопок я уже узнал
     
  5. Morales

    Morales Нерд

    Попробовал написать скетч. Сервы правда ни разу не крутил, сделал на основе урока:)

    Код (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(); // Получаем следующее значение
      }
    }