Страница 3 из 20 ПерваяПервая 12345678913 ... ПоследняяПоследняя
Показано с 21 по 30 из 200

Тема: BMW I-Bus K-Bus

  1. #21
    Новичок
    Регистрация
    31.10.2009
    Возраст
    44
    Сообщений
    18
    Вес репутации
    181

    По умолчанию Re: BMW I-Bus K-Bus

    Это расцветка провода такая - бело-красно-желтая? На сколько я знаю провод шины белый с желтыми полосками.

  2. #22
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    389

    По умолчанию Re: BMW I-Bus K-Bus

    Цитата Сообщение от dimky Посмотреть сообщение
    Это расцветка провода такая - бело-красно-желтая? На сколько я знаю провод шины белый с желтыми полосками.
    Да, это расцветка провода I-Bus шины. белый красный желтый.
    хороший модем должен качать пиво!
    Мой проект

  3. #23
    Новичок
    Регистрация
    31.10.2009
    Возраст
    44
    Сообщений
    18
    Вес репутации
    181

    По умолчанию Re: BMW I-Bus K-Bus

    Не, у меня белый с желтыми полосками, по схемам разъемов все верно. Но блин не работает у меня нифига, плату перепроверил 10 раз, номиналы резисторов тоже... фигня какаято.

    Никто не хочет протравить и затестить мою плату? )
    Последний раз редактировалось dimky; 01.11.2009 в 19:19.

  4. #24
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    389

    По умолчанию Re: BMW I-Bus K-Bus

    Цитата Сообщение от dimky Посмотреть сообщение
    Не, у меня белый с желтыми полосками, по схемам разъемов все верно. Но блин не работает у меня нифига, плату перепроверил 10 раз, номиналы резисторов тоже... фигня какаято.

    Никто не хочет протравить и затестить мою плату? )
    Какие транзисторы использовал? выложи свою печатку.
    хороший модем должен качать пиво!
    Мой проект

  5. #25
    Новичок
    Регистрация
    31.10.2009
    Возраст
    44
    Сообщений
    18
    Вес репутации
    181

    По умолчанию Re: BMW I-Bus K-Bus

    Транзисторы 2n2222a. Я тут подумал может не работает изза диода. Я поставил 1n4007 а в схеме советуют например 1n4148, а он высокоскоростной. Печатка в приложении. Транзисторы припоял наоборот, не как на плате нарисованно. Немножко ошибся при разводке.
    Вложения Вложения
    • Тип файла: rar ibus2.rar (4.7 Кб, Просмотров: 883)
    Последний раз редактировалось dimky; 01.11.2009 в 21:05.

  6. #26
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    389

    По умолчанию Re: BMW I-Bus K-Bus

    Цитата Сообщение от dimky Посмотреть сообщение
    Транзисторы 2n2222a. Я тут подумал может не работает изза диода. Я поставил 1n4007 а в схеме советуют например 1n4148, а он высокоскоростной. Печатка в приложении. Транзисторы припоял наоборот, не как на плате нарисовано. Немножко ошибся при разводке.
    С этим диодом работать не будет нужен высокоскоростной, те номиналы что указанны в схеме. У 1n4007 из особенностей: выдерживает пульсации напряжения.
    хороший модем должен качать пиво!
    Мой проект

  7. #27
    Новичок
    Регистрация
    31.10.2009
    Возраст
    44
    Сообщений
    18
    Вес репутации
    181

    По умолчанию Re: BMW I-Bus K-Bus

    Блин, у меня в закромах нету подходящего диода... все перерыл...

  8. #28
    Модератор Аватар для XsanderS
    Регистрация
    05.05.2008
    Возраст
    41
    Сообщений
    829
    Вес репутации
    389

    По умолчанию Re: BMW I-Bus K-Bus

    Цитата Сообщение от dimky Посмотреть сообщение
    Блин, у меня в закромах нету подходящего диода... все перерыл...
    Посмотри на старых платах, он в стеклянном корпусе и на нем реально написано 1N а ниже 4148, они часто встречаются.
    хороший модем должен качать пиво!
    Мой проект

  9. #29
    Новичок
    Регистрация
    31.10.2009
    Возраст
    44
    Сообщений
    18
    Вес репутации
    181

    По умолчанию Re: BMW I-Bus K-Bus

    ) Да точно, есть. А я почемуто именно на черные глазел... Но полюбому чтото не контачит, попробую еще раз завтра днем, сегодня поздно уже...

  10. #30
    Пользователь Аватар для efimomax
    Регистрация
    31.10.2009
    Возраст
    50
    Сообщений
    24
    Вес репутации
    260

    По умолчанию Re: BMW I-Bus K-Bus

    Как и обещал код для ARDUINO читающий I-BUS шину (только команды с кнопок руля - начинающиеся с байта 50)

    Както так....

    Библиотека NewSoftSerial.h в attchments
    (положить в папку hardware\libraries)

    Успехов!

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


    Код:
    /*
    
    Steering Wheels Sequences (from NewSoftSerial arduino library)
    --------------------------------------------------------------
    DESCRIPTION		DATA				KeyID
    --------------------------------------------------------------
     + button press		50 23 3C ED 32 11 FB		1
     - button press		50 23 3C ED 32 10 1E		2
    
     > BUTTON PRESS		50 23 3C ED 3B 01 06		11
     > BUTTON HOLD		50 23 3C ED 3B 11 B3		12
     > BUTTON RELEASE	50 23 3C ED 3B 21 33		13
    
     < BUTTON PRESS		50 23 3C ED 3B 08 0F		21	
     < BUTTON HOLD		50 23 3C ED 3B 18 FB		22
     < BUTTON RELEASE	50 23 3C ED 3B 28 7B		23
    
     VOICE BUTTON PRESS	50 23 3C F9 3B 80 27		31
     VOICE BUTTON HOLD	50 23 3C F9 3B 90 BB		32
     VOICE BUTTON RELEASE	50 23 3C F9 3B A0 3B		33
    
     R/T BUTTON PRESS	50 1B 38 F9 01 9A FF		40
     
    */
    
    
    #include <NewSoftSerial.h>  // use NewSoftSerial library for serial connection to BMW I-BUS
    
    
    
    // I-BUS
    NewSoftSerial IBUS(7, 8);  //set pin for BMW I_BUS serial connection 
    int IBUSreceiveByte = 0;          // byte reading from I-BUS
    byte IBUSbyte[8] = {0,0,0,0,0,0,0,0}; // key byte sequence
    int Delay = 10; //delay in millisec
    int ButtonPressed = 0; //boolean value set 1 if key press detected
    int KeyID = 0; // key press number (for easy select case routine)
    
    //hold keys flags
    int N_HOLD_F = 0; //next track hold flag
    int P_HOLD_F = 0; //prev track hold flag 
    int V_HOLD_F = 0; // r/t key hold flag
    
    byte CHECK_DOWN[8] = {0, 0x50, 0x08, 0x43, 0xDB, 0x86, 0xEC, 0xF0}; // check press button
    byte CHECK1_DOWN[8] = {0, 0x50, 0x08, 0x43, 0xDB, 0x16, 0xCC, 0xE0}; // check press button
    
    byte PLUS_DOWN[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x32, 0x11, 0xFB}; // + press button
    byte MINUS_DOWN[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x32, 0x10, 0x1E}; // - press button
    
    byte NEXT_DOWN[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x01, 0x06}; // > press button
    byte NEXT_HOLD[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x11, 0xB3}; // > hold button
    byte NEXT_REL[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x21, 0x33}; // > release button
    
    byte PREV_DOWN[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x08, 0x0F}; // < press button
    byte PREV_HOLD[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x18, 0xFB}; // < hold button
    byte PREV_REL[8] = {0, 0x50, 0x23, 0x3C, 0xED, 0x3B, 0x28, 0x7B}; // < release button
    
    byte VOICE_DOWN[8] = {0, 0x50, 0x23, 0x3C, 0xF9, 0x3B, 0x80, 0x27}; // voice press button
    byte VOICE_HOLD[8] = {0, 0x50, 0x23, 0x3C, 0xF9, 0x3B, 0x90, 0xBB}; // voice hold button
    byte VOICE_REL[8] = {0, 0x50, 0x23, 0x3C, 0xF9, 0x3B, 0xA0, 0x3B}; // voice release button
    
    byte RT_DOWN[8] = {0, 0x50, 0x1B, 0x38, 0xF9, 0x01, 0x9A, 0xFF}; // voice release button
    
    int incomingByte = 0;      // byte reading from serial port
    
    
    
    
    void setup()
    {
      Serial.begin(9600);           // открываем порт на скорости 9600 для передачи в ПК
       
      // set the data rate for the NewSoftSerial port (I-BUS)
      IBUS.begin(9600);
    }
    
    
    void loop()
    {
      if (IBUS.available() && ButtonPressed==0){
        TryReadIBUSmsg();
      }
      
      
      if (ButtonPressed==1){
        Serial.print(millis());
        Serial.println(" ----------------------------------------------- ");
        
        switch (KeyID){
          case 100:  //Если клавиша не  опознана или кокоието ошибки в шине при чтении
            Serial.print("UNKNOWN KEY: ");
            SerialPrintKey();
            break;
            
          case 40:
            Serial.print("R/T KEY: ");
            SerialPrintKey();
            break;  
            
          case 1:
            Serial.print("VOL + key: ");
            SerialPrintKey();
            break;        
          case 2:
            Serial.print("VOL - key: ");
            SerialPrintKey();
            break; 
            
          case 11:
            //Serial.print("NEXT FLAG HOLD=0: ");
            //SerialPrintKey();
            N_HOLD_F=0;
            break; 
          case 12:
            //Serial.print("NEXT FLAG HOLD=1: ");
            //SerialPrintKey();
            N_HOLD_F=1;
            break; 
          case 13:
            if (N_HOLD_F==0){
              Serial.print("NEXT TRACK key: ");
              SerialPrintKey();
            } 
            else {
              Serial.print("NEXT FOLDER key: ");
              SerialPrintKey();
            }
            break; 
            
          case 21:
            Serial.print("PREV FLAG HOLD=0: ");
            SerialPrintKey();
            P_HOLD_F=0;
            break; 
          case 22:
            Serial.print("PREV FLAG HOLD=1: ");
            SerialPrintKey();
            P_HOLD_F=1;
            break; 
          case 23:
            if (P_HOLD_F==0){
              Serial.print("PREV TRACK key: ");
              SerialPrintKey();
            } 
            else {
              Serial.print("PREV FOLDER key: ");
              SerialPrintKey();
            }
            break;  
            
          case 31:
            //Serial.print("VOICE FLAG HOLD=0: ");
            //SerialPrintKey();
            V_HOLD_F=0;
            break; 
          case 32:
            //Serial.print("VOICE FLAG HOLD=1: ");
            //SerialPrintKey();
            V_HOLD_F=1;
            break; 
          case 33:
            if (V_HOLD_F==0){
              Serial.print("VOICE key press: ");
              SerialPrintKey();
            } 
            else {
              Serial.print("Voice key hold: ");
              SerialPrintKey();
            }
            break;  
        } 
        
        //SerialPrintKey();
        ButtonPressed = 0;
        IBUS.flush();
      }
    } 
    
    
    
    
    void TryReadIBUSmsg()
    {
          IBUSreceiveByte = IBUS.read();    //read 1-st byte Если 50 то начала посылки от рулевых кнопок
          if (IBUSreceiveByte==0x50)
          {
            IBUSbyte[1]=0x50;
            for (int i=2; i <= 7; i++){  
              //IBUSreceiveByte = IBUS.read();  
              IBUSbyte[i] = IBUS.read();    //read  2,3,4,5,6,7 bytes of data   -  читаем следующие байты
              delay(Delay);
            }
            KeyID=100; //Устанавливаем по умолчанию что клавиша не опознана
            
            // и меняем если опознана на соответствующий код
            if(memcmp(IBUSbyte, CHECK_DOWN, 8) == 0 ){KeyID=50;}
            if(memcmp(IBUSbyte, CHECK1_DOWN, 8) == 0 ){KeyID=51;}
            
            if(memcmp(IBUSbyte, PLUS_DOWN, 8) == 0 ){KeyID=1;}
            if(memcmp(IBUSbyte, MINUS_DOWN, 8) == 0 ){KeyID=2;}
            
            if(memcmp(IBUSbyte, NEXT_DOWN, 8) == 0 ){KeyID=11;}
            if(memcmp(IBUSbyte, NEXT_HOLD, 8) == 0 ){KeyID=12;}
            if(memcmp(IBUSbyte, NEXT_REL, 8) == 0 ){KeyID=13;}
            
            if(memcmp(IBUSbyte, PREV_DOWN, 8) == 0 ){KeyID=21;}
            if(memcmp(IBUSbyte, PREV_HOLD, 8) == 0 ){KeyID=22;}
            if(memcmp(IBUSbyte, PREV_REL, 8) == 0 ){KeyID=23;}
            
            if(memcmp(IBUSbyte, VOICE_DOWN, 8) == 0 ){KeyID=31;}
            if(memcmp(IBUSbyte, VOICE_HOLD, 8) == 0 ){KeyID=32;}
            if(memcmp(IBUSbyte, VOICE_REL, 8) == 0 ){KeyID=33;}
            
            if(memcmp(IBUSbyte, RT_DOWN, 8) == 0 ){KeyID=40;}
            
            ButtonPressed=1;
          }
          else
          {
            ButtonPressed=0;
          }
          IBUS.flush();
    }
    
    void SerialPrintKey()  //красивая печать в ком порт посылки из I-BUS
    {
        for (int x=1; x <= 7; x++){  
                Serial.print(IBUSbyte[x], HEX);
                Serial.print(" ");
            }
        Serial.println();
    }
    Вложения Вложения
    Последний раз редактировалось efimomax; 02.11.2009 в 02:03.

Страница 3 из 20 ПерваяПервая 12345678913 ... ПоследняяПоследняя

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

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

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

Ваши права

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