Страница 6 из 6 ПерваяПервая 123456
Показано с 51 по 59 из 59

Тема: Arduino и I-BUS

  1. #51
    Пользователь
    Регистрация
    21.10.2009
    Возраст
    38
    Сообщений
    44
    Вес репутации
    186

    По умолчанию Re: Carduino и I-BUS

    Цитата Сообщение от neyro Посмотреть сообщение
    Итак, был приобретен Arduino Mega, на вскидку (10 минут тестов, в гараже холодно... ) считывание теперь происходит практически идеально, а вот как отправить данные в шину не понятно....у кого-нибудь есть рабочий код отправки даных в шину ? Если просто отправлять к примеру так:
    byte data[6] = {0x1F, 0x32, 0xAA, 0x06, 0xFF, 0x1E};

    void setup() {
    Serial1.begin(9600);
    }

    void loop() {
    for (int i=0; i <= 6; i++){
    Serial1.print(data[i]);
    }
    то данные или не уходят или похоже уходят в каком то кривом формате...
    Для связи с шиной используется схема на оптопарах + чип MAX.
    Если ты отправляешь в шину, то нужно использовать не Serial1.print(data[i]); а Serial1.write(data[i]);

  2. #52
    Пользователь
    Регистрация
    16.07.2009
    Сообщений
    27
    Вес репутации
    186

    По умолчанию Re: Carduino и I-BUS

    Попробовал сегодня через write - то же самое, данных нет...смотрю паралельно через адаптер Рольфа Реслера.
    Отправлял через Serial1.write(data);
    т.е. не побайтно как раньше, а сразу весь массив data.(разницы между побайтно и сразу все нет как я понимаю)

    delach у тебя работает передача данных в шину ? Если да то по какой схеме\какой код используешь для отправки ?
    Последний раз редактировалось neyro; 17.03.2010 в 15:26.

  3. #53
    Пользователь
    Регистрация
    21.10.2009
    Возраст
    38
    Сообщений
    44
    Вес репутации
    186

    По умолчанию Re: Carduino и I-BUS

    Сразу весь массив послать не получается, нужно побайтно причем с небольшой задержкой.

    Функция для передачи:
    PHP код:
    byte CH_RM_StatusResponse[6] = {0x180x040xFF0x020x000xE1};

    void WriteIBUSmsg(byte DATA_to_Write[], int ByteCount) {
      for (
    int i=0i<ByteCounti++) {
        
    Serial.write(DATA_to_Write[i]);
        
    delay(2);
      }

    Вызов функции:
    PHP код:
    WriteIBUSmsg(CH_RM_StatusResponse6); 
    С задержкой в 1мс тоже работает но кол-во ошибок заметно возрастает.

  4. #54
    Новичок
    Регистрация
    26.12.2013
    Сообщений
    5
    Вес репутации
    128

    По умолчанию Re: Carduino и I-BUS

    [QUOTE=neyro;54347]Адаптер реслера рабочий, у меня программа написанна на c++ И полностью эмулирует сд-ченжер. Это я к тому, что уж точно не в нем и разницы между мелексисом\адаптерами на транзисторах\оптопарах нет.

    п.с. Вам не все равно кто и какие цели приследуют ? Если кто-то сможет заработать на этом деньги-это его право и его успех...какая разница то остальным ? Если уж что-то писать на форуме то писать по существу, а не фигней страдать.
    п.п.с. насчет благотворительности-готов предложить денежное вознаграждение тому(только Москва- встречаемся(подъеду куда надо), Вы демонстрируете, что схема работает с arduino nano duo, я отдаю деньги..все просто) кто поможет заставить работать ардуино с шиной Ibus, если уж дело в этом.[/QUOT

    Извините, а можно по подробнее про эмулятор чейнжера. Или ссылочку..
    Последний раз редактировалось Chip; 08.03.2017 в 03:52.

  5. #55
    Новичок
    Регистрация
    18.01.2014
    Сообщений
    5
    Вес репутации
    128

    По умолчанию Re: Carduino и I-BUS

    доброго времяни всем, тоже озадачился проблемой K-bus, хочу читать и отправлять, пытаюсь с мастерить чтото типа CAN модуля для сигнализации....

    использую микросхему 9243a данные какието читаю но сравнить несчем...

    еще ктонибудь может объяснить нубу как вообще формируеться пакет данных тут...
    побайтно
    1 ID устройства которое "говорит"
    2 длинна
    3 ID "слушателя"...
    4далее сама команда
    5 контрольная сумма (как она вычисляеться? и из чего? )

    хочу разобраться как читать шину правильно где начало сообщения и его конец, как я понимаю они могут быть разной длинны тк можно и на дисплей одометра чето вывести... типа hELLO WORLD

    использую arduino nano new soft serial и SI9243AEY http://pdf1.alldatasheet.com/datashe...SI9243AEY.html

    я вообще новичек не ругайте сильно...
    Последний раз редактировалось xaxexa; 26.03.2014 в 19:39.

  6. #56
    Новичок
    Регистрация
    18.01.2014
    Сообщений
    5
    Вес репутации
    128

    По умолчанию Re: Carduino и I-BUS

    блин чето я с мыслями немогу собраться как реализовать поиск сообщения в шине если допустим по какойто причине я начал принимать сообщение не с начала

    вот например идут данные сообщение выделено слешами
    0x68, 0x32, 0x10, 0x1E, //0x50, 0x04, 0x68, 0x3B, 0x01, 0x06,// 0x50, 0x04, 0x68, 0x3B, 0x11, 0x16

    мне надо первые 4 байта проигнорить потом читать....

  7. #57
    Новичок
    Регистрация
    18.01.2014
    Сообщений
    5
    Вес репутации
    128

    По умолчанию Re: Carduino и I-BUS

    в общим вот че у меня получилось, читает пакеты без отказно, если пакет принят не сначала игнорит его... если пакет более 20 байт тоже игнорит его, скетч для ардуино мега... тк через софтсериал неработает чето нифига....

    Код:
    byte IGNITIONON[5] = {0x80, 0x04, 0xBF, 0x11, 0x02}; ключ - зажигание
    byte IGNITIONOFF[5] = {0x80, 0x04, 0xBF, 0x11, 0x00}; ключ - выключено
    byte ARMED[5] =       {0x00, 0x04, 0xBF, 0x72, 0x12};     // КЛЮЧ - ЗАКРЫТЬ
    byte DISARMED[5] =    {0x00, 0x04, 0xBF, 0x72, 0x22};     // КЛЮЧ ОТКРЫТЬ
    byte DOORS[4] =       {0x00, 0x05, 0xBF, 0x7A};           // ДВЕРИ
    byte RUCHNIKUP[10] =   {0x80, 0x09, 0xBF, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04};    //РУЧНИК ПОДНЯТ
    byte RUCHNIKDOWN[10] = {0x80, 0x09, 0xBF, 0x13, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04};  //РУЧНИК ОТПУЩЕН
    
    void setup()                     
    { 
      pinMode(2, OUTPUT); //зажигание +
      digitalWrite(2, LOW);
      pinMode(3, OUTPUT); //двери -
      digitalWrite(3, HIGH);
      pinMode(4, OUTPUT); //ручник -
      digitalWrite(4, HIGH);
      pinMode(5, OUTPUT); //событие +/-
      digitalWrite(5, HIGH);
      pinMode(6, OUTPUT); //тормоз +
      digitalWrite(6, LOW);
      pinMode(7, OUTPUT); //багажник -
      digitalWrite(7, HIGH); 
      pinMode(8, OUTPUT); //капот -
      digitalWrite(8, HIGH);
      pinMode(9, OUTPUT); //поставлен на охрану
      digitalWrite(9, HIGH);
      pinMode(10, OUTPUT); //снят с охраны
      digitalWrite(10, HIGH);
      
      Serial.begin(9600);               // открываем порт для передачи в ПК  
      Serial1.begin(9600);                 // настройка порта IBUS 
    } 
    
    void loop() 
    { 
      
      
      ReadIBUSmsg();
    } 
    
    boolean ReadIBUSmsg()
    { 
      boolean recive=0;
      byte IBUSbyte[20];
      int len = 0;
    
      while(Serial1.available() > 0 && recive == 0 )
      { 
        //byte IBUSbyte[20];
        IBUSbyte[0] = Serial1.read(); //читаем первый бит
        while (recive == 0)
        {
          if(Serial1.available() > 0)
          {
            IBUSbyte[1] = Serial1.read(); //читаем длинну сообщения
            recive = 1;       
          }
    
          delay(10);
        }
    
        recive == 0;
        len = IBUSbyte[1]+1;
        int i=2;
        if(len==0||len>0x10)
        {
          i=2;
          while(Serial1.available() > 0)
          {
            IBUSbyte[i] = Serial1.read(); //читаем длинну сообщения
            i++;   
          }
          break;
        }
        i=2;
        while(i<=len)//читам сообщение
        {
          if(Serial1.available() > 0)
          {
            IBUSbyte[i] = Serial1.read(); 
            i++;
            delay(10);
          }
        }
    
        if (IBUSbyte[len] == CalcXOR(IBUSbyte))// проверяем контрольную сумму
        {
          Serial.print("MESSAGE GOOD ");
          for(int i=0; i <= len; i++)
          {
            Serial.print("0x");
            Serial.print(IBUSbyte[i],HEX);
            Serial.print(", ");
          }
          Serial.println(" ");
         
         //digitalWrite(2,LOW);
         //delay(10);
         recive=1;
        }
        else 
        {
          //digitalWrite(4,LOW);
          //delay(10);
          Serial.print("check summ wrong");
          Serial.println("");
          recive=0;
        }
    
    
    
      }
      if(recive == 1)
      {
        len=len-1;
        if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(2,HIGH);} //зажигание
        if(memcmp(IBUSbyte, IGNITIONOFF, len) == 0 ){digitalWrite(2,LOW);} //зажигание выключено
        if(memcmp(IBUSbyte, DOORS, 4) == 0 )                               //двери
          {
            if(IBUSbyte[4]==0x20 || IBUSbyte[4]==0x60){digitalWrite(3,LOW);}
            if(IBUSbyte[4] > 0x20 && IBUSbyte[4] < 0x30){digitalWrite(3,HIGH);}
            if(IBUSbyte[4] > 0x60 && IBUSbyte[4] < 0x70){digitalWrite(3,HIGH);}
          }
            
        if(memcmp(IBUSbyte, RUCHNIKUP, len) == 0 ){digitalWrite(4,LOW);} //ручник поднят
        if(memcmp(IBUSbyte, RUCHNIKDOWN, len) == 0 ){digitalWrite(4,HIGH);} //ручник отпущен
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(5,LOW);} //событие
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(5,HIGH);} //событие
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(6,HIGH);} //тормоз Нажат
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(6,LOW);} //тормоз отупщен
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(7,LOW);} //багажник открыт
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(7,HIGH);} //багажник
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(8,LOW);} //капот открыт
        //if(memcmp(IBUSbyte, IGNITIONON, len) == 0 ){digitalWrite(8,HIGH);} //капот
        if(memcmp(IBUSbyte, ARMED, len) == 0 ){digitalWrite(9,LOW);delay(300);digitalWrite(9,HIGH);} //на охране
        if(memcmp(IBUSbyte, DISARMED, len) == 0 ){digitalWrite(10,LOW);delay(300);digitalWrite(10,HIGH);} //снят с охраны
      }
    }
    
    
    
    byte CalcXOR(byte checksumm[20]) 
    { 
      byte checksum = 0; 
      for(int i = 0; i <= checksumm[1]; i++) 
      { 
        checksum ^= checksumm[i]; 
      }
      return checksum; 
    }


    пасиба огромное Xander'у за основу брал его скетч


    там где идет сравнение массивов то что закоментированно это я не нашел сообщение в дальнейшем если получиться исправлю


    суть штуки это чтото типа кан модуль для автосигнализации...

  8. #58
    Новичок
    Регистрация
    01.02.2017
    Возраст
    33
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Re: Carduino и I-BUS

    привет всем, у меня есть маленькая проблема с мультифункциональным руля.у меня BMW E36 стоит CD43 Bussines Radio которая поддерживает
    I-bus 7 пин.также у меня стоит руль от E39

    Сохранить в Альбом


    я севодня перерыл весь интернет но не смог найти как прочитать информации с этого руля для конвертации информации в магнитафон.
    нашел маленький скетч как читать вовсе с таких девайсов
    <<<<<<<<<<<<<<<<<<<<<<<
    #include <wire.h>
    #include <softwareserial.h>

    SoftwareSerial mySerial(18, 19); // 7 is Rx, 8 is Tx
    byte IBUSbyte[40];
    const int CS_LWAKE = 4;

    void setup()
    {
    Serial.begin(9600, SERIAL_8E1);
    mySerial.begin(115200);
    mySerial.println("--IBUS read test--");

    pinMode (CS_LWAKE, OUTPUT); // initialize pin.
    digitalWrite (CS_LWAKE, HIGH); // write pin high.

    }

    void loop() {

    readIBUS();
    }

    void readIBUS() {
    if (Serial.available()>0){
    byte INbyte = Serial.read();
    mySerial.print(INbyte, HEX);

    }
    }
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    но инвормация не идиот

    я подключать пин ут руля в RX18 иза того што у меня ардуино мега.
    кто делал такое или кто знает что делать помогите .прошу прощение за правописание это Google Translate.

  9. #59
    Новичок
    Регистрация
    15.02.2017
    Возраст
    34
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Re: Carduino и I-BUS

    доброго времени суток, ребятки.

    На просторах сети были найдены тут ниже приведенный код:

    PHP код:
    #include <OLED_I2C.h>
    OLED  oled(SDASCL8);
    extern uint8_t SmallFont[];

    int IBUSreceiveByte 0;
    byte IBUSbyte[7] = {0,0,0,0,0,0,0};
    int ButtonPressed 0;
    int KeyID 0;
    byte MINUS_DOWN[7] = {00x500x040x680x320x100x1E}; // - BUTTON PRESS
    byte PLUS_DOWN[7] = {00x500x040x680x320x110x1F};  // + BUTTON PRESS
    byte PREV_DOWN1[7] = {00x500x040x680x3B0x080x0F}; // < BUTTON PRESS 1
    byte PREV_DOWN2[7] = {00x500x040xC80x3B0x080xAF}; // < BUTTON PRESS 2
    byte NEXT_DOWN1[7] = {00x500x040x680x3B0x010x06}; // > BUTTON PRESS 1
    byte NEXT_DOWN2[7] = {00x500x040xC80x3B0x010xA6}; // > BUTTON PRESS 2
    byte VOICE_DOWN[7] = {00x500x040xC80x3B0x800x27}; // VOICE BUTTON PRESS
    byte RT_DOWN1[7] = {00x500x040xFF0x3B0x000x90};   // R/T BUTTON PRESS 1
    byte RT_DOWN2[7] = {00x500x040xFF0x3B0x400xD0};   // R/T BUTTON PRESS 2

    void setup() { 

      
    Serial1.begin(9600);
      
    oled.begin();
      
    oled.setFont(SmallFont);
      
    oled.print("BMW NEXUS 7"CENTER0);
      
    oled.print("Key:"LEFT20);
      
    oled.print("In   Load Hall 5v"LEFT45);
      
    oled.print("OFF  OFF  OFF  OFF"LEFT55);
      
    oled.update();
      
    pinMode(4OUTPUT);
      
    pinMode(5OUTPUT);
      
    pinMode(6INPUT);
      
    pinMode(7OUTPUT);
      
    digitalWrite(4LOW);
      
    digitalWrite(5LOW);
      
    digitalWrite(6LOW);
      
    digitalWrite(7LOW);
      
    Keyboard.begin();
      
    Media.begin();
      
    //Remote.begin();
      //System.begin();


    void loop() { 

      
    // вход
      
    if (digitalRead(6) == LOW) {

        
    PrintState("ON "0);
        
    digitalWrite(5HIGH); // выход нагрузки
        
    PrintState("ON "30);
        
    digitalWrite(7HIGH); // hall датчик
        
    PrintState("ON "60);
        
    digitalWrite(4HIGH); // выход 5 вольт
        
    PrintState("ON "90);

      } else {

        
    PrintState("OFF"0);   
        
    digitalWrite(5LOW); // выход нагрузки
        
    PrintState("OFF"30);
        
    digitalWrite(7LOW); // hall датчик
        
    PrintState("OFF"60);
        
    digitalWrite(4LOW); // выход 5 вольт
        
    PrintState("OFF"90);
      }

      
    // кнопки руля
      
    if (Serial1.available() && ButtonPressed == 0) {  
        
    TryReadIBUSmsg();
      }

      
    // нажата кнопка
      
    if (ButtonPressed == 1) {
        switch (
    KeyID) {
          case 
    100:  // если клавиша не  опознана или есть ошибки в шине при чтении
            
    Media.releaseAll();
            
    Keyboard.releaseAll();
            
    PrintKey("UNKNOWN key");
            
    PrintCode(); 
          break;
          case 
    1
            
    Media.write(MEDIA_VOLUME_UP);
            
    PrintKey("VOL + key");
            
    PrintCode(); 
          break;    
          case 
    2:
            
    Media.write(MEDIA_VOLUME_DOWN);
            
    PrintKey("VOL - key");
            
    PrintCode(); 
          break;
          case 
    11:
            
    Media.write(MEDIA_NEXT);
            
    PrintKey("NEXT TRACK key");
            
    PrintCode();  
          break;
          case 
    21:
            
    Media.write(MEDIA_PREVIOUS);
            
    PrintKey("PREV TRACK key");
            
    PrintCode(); 
          break;
          case 
    31:
            
    Media.write(MEDIA_PLAY_PAUSE);
            
    PrintKey("VOICE key");
            
    PrintCode(); 
          break;
          case 
    41:
            
    //Media.write(MEDIA_BROWSER_BACK);
            
    Keyboard.press(KEY_LEFT_ALT);
            
    Keyboard.press(KEY_TAB);
            
    Keyboard.release(KEY_TAB);
            
    Keyboard.press(KEY_TAB);
            
    Keyboard.release(KEY_TAB);
            
    PrintKey("R/T key");
            
    PrintCode(); 
          break;
        } 
        
    ButtonPressed 0;
        
    Serial1.flush();
      }
      
    delay(10);
    }

    // чтение I-Bus шины
    void TryReadIBUSmsg() {

      
    IBUSreceiveByte Serial1.read();
      if (
    IBUSreceiveByte==0x50) { 
        
    IBUSbyte[1]=0x50;   
        for (
    int i=2i<=6i++) {   
          
    IBUSbyte[i] = Serial1.read();
          
    delay(10); 
        }
        
    KeyID=100;
        if(
    memcmp(IBUSbytePLUS_DOWN7) == 0)  { KeyID=1; } 
        if(
    memcmp(IBUSbyteMINUS_DOWN7) == 0) { KeyID=2; } 
        if(
    memcmp(IBUSbyteNEXT_DOWN17) == 0) { KeyID=11; }
        if(
    memcmp(IBUSbyteNEXT_DOWN27) == 0) { KeyID=11; } 
        if(
    memcmp(IBUSbytePREV_DOWN17) == 0) { KeyID=21; }
        if(
    memcmp(IBUSbytePREV_DOWN27) == 0) { KeyID=21; }  
        if(
    memcmp(IBUSbyteVOICE_DOWN7) == 0) { KeyID=31; } 
        if(
    memcmp(IBUSbyteRT_DOWN17) == )  { KeyID=41; }
        if(
    memcmp(IBUSbyteRT_DOWN27) == )  { KeyID=41; }
        
    ButtonPressed=1
      } else { 
        
    ButtonPressed=0
      }
      
    Serial1.flush(); 
    }

    // печатаем код из I-Bus
    void PrintCode() {
      
    int x=0;
      for (
    int i=1i<=6i++) {
        
    oled.print(String(IBUSbyte[i],HEX), x30);
        
    x+=20;
      }
      
    oled.update();
    }

    void PrintKey(String text) {
      
    oled.print(text3020);
      
    oled.update();
    }

    void PrintState(String textint x) {
      
    oled.print(textx55);
      
    oled.update();

    И тут на вашем форуме этот код:
    PHP код:
    #define CHECK_MS 5 
    #define DOUBLE_MS 400 
    #define HOLD_MS 1200 

    #define NO_B 839 //nothing pressed 
    #define MODE_B 662 // MODE 
    #define NXTU_B 509 // NEXT UP 
    #define NXTD_B 380 // NEXT DOWN 
    #define MUTE_B 273 // MUTE 
    #define VOLU_B 180 // VOLUME UP 
    #define VOLD_B 105 // VOLUME DOWN 

    #define alpPin 7 

    boolean volUp[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,11,1,0,1,1,0,1,11,1,0,1,0,1,1,01,1,0,1,0,1,0,1}; 
    boolean volDn[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,1,0,1,1,0,11,1,1,1,0,1,1,01,1,0,1,0,1,0,1}; 
    boolean mute[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,11,0,1,0,1,1,0,11,1,1,0,1,1,1,01,1,0,1,0,1,0,1}; 
    boolean pstUp[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,11,0,1,0,1,0,1,11,1,1,0,1,1,1,10,1,0,1,0,1,0,1}; 
    boolean pstDn[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,0,1,0,1,0,11,1,1,1,1,1,1,10,1,0,1,0,1,0,1}; 
    boolean source[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,11,0,1,1,0,1,1,11,1,0,1,1,0,1,10,1,0,1,0,1,0,1}; 
    boolean trkUp[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,11,0,1,1,1,0,1,11,1,0,1,1,0,1,01,1,0,1,0,1,0,1}; 
    boolean trkDn[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,0,1,1,1,0,11,1,1,1,1,0,1,01,1,0,1,0,1,0,1}; 
    boolean power[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,1,1,0,1,1,11,1,1,0,1,0,1,10,1,0,1,0,1,0,1}; 
    boolean entPlay[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,0,1,0,1,1,11,1,1,1,1,1,0,10,1,0,1,0,1,0,1}; 
    boolean bandProg[48] = {1,1,0,1,0,1,1,11,1,0,1,1,0,1,11,0,1,0,1,0,1,10,1,1,0,1,0,1,11,1,1,1,0,1,1,10,1,0,1,0,1,0,1}; 

    boolean spFlag 0
    boolean dpFlag 0
    boolean hpFlag 0

    int button 0;  
    int spbutton 0
    /* 
    0-none 
    1-mode 
    2-track + 
    3-track - 
    4-mute 
    5-vol+ 
    6-vol- 
    */ 

    void setup() { 
    Serial.begin(9600); 
    pinMode(7OUTPUT); 



    void loop() { 
    static 
    unsigned long oldTime 0
    int switchStatus 0
    if (
    millis() >= oldTime CHECK_MS) { 
    oldTime millis(); 
    switchStatus CheckSwitch(); 

    if (
    switchStatus == 0) { 
    //no button press 

    } else if (switchStatus == 1) { 
    // single press 
    switch (spbutton) { 
    case 
    0// no butto, why are wh here 
    break; 
    case 
    1// mode 
    modeSend(); 
    break; 
    case 
    2// next up 
    trkUpSend(); 
    break; 
    case 
    3// next down 
    trkDnSend(); 
    break; 
    case 
    4// mute 
    muteSend(); 
    break; 
    case 
    5// vol up 
    volUpSend(); 
    break; 
    case 
    6// vol down 
    volDnSend(); 
    break; 
    }  
    } else if (
    switchStatus == 2) { 
    //double press 
    switch (spbutton) { 
    case 
    0// no butto, why are wh here 
    break; 
    case 
    1// mode 
    sourceSend(); 
    break; 
    case 
    2// next up 
    trkUpSend(); 
    break; 
    case 
    3// next down 
    trkDnSend(); 
    break; 
    case 
    4// mute 
    muteSend(); 
    break; 
    case 
    5// vol up 
    volUpSend(); 
    break; 
    case 
    6// vol down 
    volDnSend(); 
    break; 
    }  
    } else if (
    switchStatus == 3) { 
    //hold 
    switch (spbutton) { 
    case 
    0// no butto, why are wh here 
    break; 
    case 
    1// mode 
    modeSend(); 
    break; 
    case 
    2// next up 
    trkUpSend(); 
    break; 
    case 
    3// next down 
    trkDnSend(); 
    break; 
    case 
    4// mute 
    muteSend(); 
    break; 
    case 
    5// vol up 
    volUpSend(); 
    break; 
    case 
    6// vol down 
    volDnSend(); 
    break; 
    }  
    }  




    // Service routine called by a timer interrupt 
    int CheckSwitch() { 
    static 
    uint16_t State 0// Current debounce status 
    static int curTime 0

    State=(State<<1) | !RawKeyPressed() | 0xe000
    if (!
    spFlag) { 
    if (
    hpFlag) { 
    if (
    State == 0xe000) { 
    return 
    3
    } else { 
    hpFlag 0


    if (
    State==0xf000) { 
    spFlag 1
    hpFlag 1
    dpFlag 1
    curTime 0
    spbutton button
    return 
    0

    }  
    if (
    hpFlag && State != 0xe000) { 
    hpFlag 0

    if (
    spFlag && hpFlag && curTime HOLD_MS/CHECK_MS) { 
    spFlag 0
    dpFlag 0
    return 
    3
    } else if (
    spFlag && dpFlag && State == 0xf000 && curTime DOUBLE_MS) { 
    spFlag 0
    hpFlag 0
    dpFlag 0
    return 
    2
    } else if (
    spFlag && !hpFlag && curTime DOUBLE_MS) { 
    spFlag 0
    hpFlag 0
    dpFlag 0
    return 
    1
    } else { 
    curTime curTime CHECK_MS
    return 
    0



    boolean RawKeyPressed() { 
    int anaPin 0
    anaPin analogRead(0); 
    if (
    anaPin NO_B 20) { 
    button 0
    return 
    0
    } else if (
    anaPin MODE_B 20 && anaPin MODE_B 20 ) { 
    button 1
    return 
    1
    } else if (
    anaPin NXTU_B 20 && anaPin NXTU_B 20 ) { 
    button 2
    return 
    1
    } else if (
    anaPin NXTD_B 20 && anaPin NXTD_B 20 ) { 
    button 3
    return 
    1
    } else if (
    anaPin MUTE_B 20 && anaPin MUTE_B 20 ) { 
    button 4
    return 
    1
    } else if (
    anaPin VOLU_B 20 && anaPin VOLU_B 20 ) { 
    button 5
    return 
    1
    } else if (
    anaPin VOLD_B 20 ) { 
    button 6
    return 
    1
    } else { 
    button 0
    return 
    0



    //-----------SOURCE------------------ 
    void sourceSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (source[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  



    //---------MODE----------------------------------------------- 
    void modeSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (entPlay[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  



    //---------NEXT UP----------------------------------------------- 
    void trkUpSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (trkUp[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  


    //---------NEXT DOWN---------------------------------------------- 
    void trkDnSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (trkDn[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  



    //---------MUTE--------------------------------------------------- 
    void muteSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (mute[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  


    //---------VOL UP----------------------------------------------- 
    void volUpSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (volUp[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  



    //---------VOL DOWN----------------------------------------------- 
    void volDnSend() { 
    //first send 8ms high 
    digitalWrite(alpPinHIGH); 
    delay(8); 
    // send 4.5ms low 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(4500); 

    for (
    int i 0<= 47i++) { 
    //send bit for 0.5ms 
    if (volDn[i] == ) { 
    digitalWrite(alpPinHIGH); 
    } else { 
    digitalWrite(alpPinLOW); 
    }  
    delayMicroseconds(500); 
    // wait 0.5ms 
    digitalWrite(alpPinLOW); 
    delayMicroseconds(500); 

    // send 41ms low 
    digitalWrite(alpPinLOW); 
    delay(41);  

    Пытаюсь разобраться, читаю вторые сутки инфу по сабжу, но пока пробелов в понимании процесса слишком много.

    Суть самого вопроса какова, хочу читать с I-BUS кнопки, как в первом примере, и управлять alpine магнитолой как во втором. Но так как в коде достаточно других функций разобраться с разбегу пока никак не выходит.

Страница 6 из 6 ПерваяПервая 123456

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

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

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

Ваши права

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