Показано с 1 по 10 из 200

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Местный
    Регистрация
    10.07.2009
    Возраст
    51
    Сообщений
    152
    Вес репутации
    249

    По умолчанию Re: Объединенный проект для Carduino (Arduino) All-In-One.

    Chip, "методом научного тыка" удалил лишнее из скетча и оставил только: ИК-приемник, Резисторные кнопки и Энкодер с нажатием. Вроде получилось.

    #include <IRremote.h>
    byte bytes[4]={0,3}; // 0-3 байт - энкодер, рулевые кнопки, ИК приемник

    int JOYSTIK_PIN = 5 ; // вход для рулевых кнопок

    int RECV_PIN = 11; // вход ИК приемника
    int encoder0PinA = 2 ; // вывод А энкодера
    int encoder0PinB = 3 ; // вывод В энкодера
    int encoder0PinC = 4 ; // вход кнопки энкодера

    unsigned long res_dt, ir_dt, old_ir, time;
    byte temp;
    IRrecv irrecv(RECV_PIN);
    decode_results results;

    //******************************************
    void setup()
    {
    pinMode(encoder0PinA, INPUT);
    digitalWrite(encoder0PinA, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinB, INPUT);
    digitalWrite(encoder0PinB, HIGH); // подключить подтягивающий резистор энкодера
    pinMode(encoder0PinC, INPUT);
    digitalWrite(encoder0PinC, HIGH); // подключить подтягивающий резистор энкодера

    attachInterrupt(0, doEncoderA, FALLING); // настроить прерывание энкодера interrupt 0 на pin 2
    attachInterrupt(1, doEncoderB, FALLING); // настроить прерывание энкодера interrupt 0 на pin 3

    Serial.begin(115200); // настроить скорость com порт
    irrecv.enableIRIn(); // включить приемник
    }
    //****************Кнопка Энкодера****************************
    void loop()
    {
    if(digitalRead(encoder0PinC)==LOW)
    {
    bytes[0] = 0;
    bytes[1] = 8;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write(bytes,4);
    while(digitalRead(encoder0PinC)==LOW){delay(50);}
    bytes[0] = 0;
    bytes[1] = 7;
    bytes[2] = 0;
    bytes[3] = 0;
    }
    IR_resiver();
    joystik();
    }
    //****************ИК приемник********************************
    void IR_resiver()
    {
    if ((millis()-time)>1000 )
    {
    time = millis();
    results.value=0;
    }

    if (irrecv.decode(&results))
    {
    if (results.value > 0 && results.value < 0xFFFFFFFF)
    {
    ir_dt = results.value;
    bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
    bytes[1] = (ir_dt & 0xFF00) >> 8;
    bytes[2] = (ir_dt & 0xFF0000) >> 16;
    bytes[3] = (ir_dt & 0xFF000000) >> 24;
    Serial.write( bytes,4); // отправить прочитаное значение компьютеру

    if (old_ir == ir_dt){delay(100);} // пауза между короткими нажатиями
    else {delay(50);} // пауза после первого нажатия и удержания (перед повторами)
    old_ir = ir_dt;
    }
    if (results.value == 0xFFFFFFFF )
    {
    delay(5); //пауза между повторами
    Serial.write( bytes,4);
    }
    irrecv.resume();
    }
    }
    //****************Резистивные кнопки**************************
    void joystik()
    {
    res_dt = analogRead(JOYSTIK_PIN); // прочитать данные АЦП
    if( res_dt < 1023 && results.value == 0)
    {
    delay(50); // пауза для проверки дребезга
    if(res_dt == analogRead(JOYSTIK_PIN)) // если нет дребезга
    {
    bytes[0] = res_dt & 255; // преобразовать в 2-байта
    bytes[1] = (res_dt & 768) >> 8;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write( bytes,4); // отправить прочитаное значение компьютеру
    delay(250); // пауза между нажатиями
    }
    }
    }
    //*******************Поворот Энкодера (обработка прерывания)****
    void doEncoderA()
    {
    cli();
    if(digitalRead(encoder0PinB)==HIGH){bytes[1]=25;}else{bytes[1]=5;}
    bytes[0] = 0;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write( bytes,4);
    sei();
    }
    //*******************Поворот Энкодера (обработка прерывания)****
    void doEncoderB()
    {
    cli();
    if(digitalRead(encoder0PinA)==HIGH){bytes[1]=5;}else{bytes[1]=25;}
    bytes[0] = 0;
    bytes[2] = 0;
    bytes[3] = 0;
    Serial.write( bytes,4);
    sei();
    }
    Последний раз редактировалось Serg_w; 13.06.2010 в 20:19.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •