Форум автозвука и установки музыки в автомобиль
Показано с 1 по 1 из 1

автомагнитола KENWOOD kdc-4554u управление по протоколу NEC

  1. #1
    Новичок Соискатель
    Репутация
    Репутация: 0
    Регистрация
    07.07.2020
    Город/село
    люберцы
    Сообщений
    1
    Спасибо (Раздал)
    0
    Спасибо (Получил)
    0

    автомагнитола KENWOOD kdc-4554u управление по протоколу NEC

    Добрый день, уже неделю бьюсь что бы заставить магнитолу понимать команды с джойстика. В мониторе все клавиши работают, сигнал поступает на 14 пин . уже пробовал разное написание команд для магнитолы :
    1. Protocol NEC (Kenwood modification)
    Address 0x46B9

    SRC 0x13 (без повторов)
    ATT 0x16 (без повторов)
    VolumeUp 0x14
    VolumeDn 0x15
    AUD 0x17
    Play/Pause 0x0E (без повторов)
    Up 0x0D
    Down 0x0C
    Left 0x0A
    Right 0x0B
    Phone 0x92
    2-ZONE 0x82
    DIRECT/OK 0x0F (без повторов)
    1 0x01 (без повторов)
    2 0x02 (без повторов)
    3 0x03 (без повторов)
    4 0x04 (без повторов)
    5 0x05 (без повторов)
    6 0x06 (без повторов)
    7 0x07 (без повторов)
    8 0x08 (без повторов)
    9 0x09 (без повторов)
    0 0x00 (без повторов)
    R.VOL Dn 0x81
    R.VOL Up 0x80
    2. #define SRC 0x9D62C837
    #define NEXT_TRACK 0x9D62D02F
    #define PREV_TRACK 0x9D6250AF
    #define VOL_UP 0x9D6228D7
    #define VOL_DOWN 0x9D62A857
    #define PLUS 0x9D62B04F
    #define MINUS 0x9D6230CF
    #define ATT 0x9D626897
    #define PLAY 0x9D62708F
    #define PHONE_UP 0x9D6249B6 // Только поднять
    3. Function
    Code
    Function
    Code
    Function
    Code
    0
    0xb900
    Tuner
    0xb91c
    Volume+
    0xb914
    1
    0xb901
    Tape
    0xb91d
    Volume-
    0xb915
    2
    0xb902
    CD
    0xb91e
    Source
    0xb913
    3
    0xb903
    CD-MD-CH
    0xb91f
    Mute
    0xb916
    4
    0xb904
    Track-
    0xb90a
    5
    0xb905
    Track+
    0xb90b
    6
    0xb906
    Rew
    0xb90c
    7
    0xb907
    Ff
    0xb90d
    8
    0xb908
    DNPP
    0xb95e
    9
    0xb909
    Play/Pause
    0xb90e
    а магнитола не реагирует. Пожалуйста, подскажите, может в коде ошибка?
    ////////////////////////////////////////////////////////////////
    // alpine
    #define alpinePin 14

    #define cmdPower 0x09
    #define cmdSource 0x13
    #define cmdBand 0x0D
    #define cmdVolumeDown 0x15
    #define cmdVolumeUp 0x14
    #define cmdUp 0x0D
    #define cmdDown 0x0C
    #define cmdLeft 0x0A
    #define cmdRight 0x0B
    #define cmdPlay 0x0E
    #define cmdAProc 0x06
    #define cmdMute 0x16
    #define cmdAngleUp 0x81
    #define cmdAngleDown 0x80
    #define cmdCDChange 0x03
    /////////////////////////////////////////////////////////////////
    // джойстик
    #define rows 3
    #define cols 2
    // номера кнопок в соответствии со схемой
    const byte keys[rows][cols] =
    {
    {1,4},
    {2,5},
    {6,3}
    };

    // состояния направлений енкодера
    const byte encoderdirection[3][3] = // 0 — на месте, 1 — вниз, 2 — вверх
    {
    {0, 1, 2}, // 0
    {2, 0, 1}, // 1
    {1, 2, 0} // 2
    };

    // 10 9 8 7 6 5

    // строки
    // красный ч красный
    // коричневый ч желтый 6
    // черный ч черный
    // столбцы
    // зеленый б красный
    // голубой б черный
    // желтый б желтый

    // номера пинов
    const byte rowPins[rows] = {10, 9, 8}; // строки (желтый, зеленый, голубой)
    const byte colPins[cols] = {7, 5}; // столбцы (черный, красный)
    #define encoderPin 6 // пин енкодера (коричневый)
    byte encodervalue;

    // маски для клавиш
    #define MaskMediaButton 1
    #define MaskRadioButton 2
    #define MaskVolumeUpButton 4
    #define MaskVolumeDownButton 8
    #define MaskOkButton 16
    #define MaskMuteButton 32
    #define MaskScrollDown 64
    #define MaskScrollUp 128

    unsigned long starttime;
    bool workkbd;
    /////////////////////////////////////////////////////////////////

    void setup()
    {
    Serial.begin(115200);
    int i;
    // строки — на выход
    for (i = 0; i < rows; ++i)
    {
    pinMode(rowPins[i], OUTPUT);
    }

    // столбцы — на вход
    for (i = 0; i < cols; ++i)
    {
    pinMode(colPins[i], INPUT);
    digitalWrite(colPins[i], HIGH); // включаем подтягивающий резистор
    }

    // столбец для енкодера
    pinMode(encoderPin, INPUT);
    digitalWrite(encoderPin, HIGH); // включаем подтягивающий резистор

    encodervalue = 0;

    // управление Alpine
    pinMode(alpinePin, OUTPUT);

    starttime = millis();
    workkbd = false;
    }

    // сканирование джойстика
    byte scan(void)
    {
    int i, j;
    byte code = 0;

    for (i = 0; i < rows; ++i)
    {
    digitalWrite(rowPins[i], LOW);

    // кнопки
    for (j = 0; j < cols; ++j)
    {
    if(digitalRead(colPins[j]) == false)
    {
    code |= 1 << (keys[i][j] — 1);
    }
    }

    // енкодер
    if (digitalRead(encoderPin) == false)
    {
    int oldencodervalue = encodervalue;
    encodervalue = i;

    switch (encoderdirection[oldencodervalue][encodervalue])
    {
    case 1: // вниз
    code |= 64;
    break;
    case 2: // вверх
    code |= 128;
    break;
    }
    }

    digitalWrite(rowPins[i], HIGH);
    }

    return code;
    }

    // отправка байта
    void SendByte(byte data)
    {
    for (int i = 0; i < 8; ++i)
    {
    digitalWrite(alpinePin, HIGH);
    delayMicroseconds(560);
    digitalWrite(alpinePin, LOW);

    if (data & 1)
    { // 1
    delayMicroseconds(1680);
    }
    else
    { // 0
    delayMicroseconds(560);
    }

    data >>= 1;
    }
    }

    // отправка команды
    void Send(byte command)
    {
    digitalWrite(alpinePin, HIGH);
    delayMicroseconds(9000);
    digitalWrite(alpinePin, LOW);
    delayMicroseconds(4500);

    SendByte(0xB9);
    SendByte(0x46);
    SendByte(command);
    SendByte(~command);

    digitalWrite(alpinePin, HIGH);
    delayMicroseconds(560);
    digitalWrite(alpinePin, LOW);
    }

    // цикл программы
    void loop(void)
    {
    byte code;

    code = scan();

    if (workkbd == false)
    {
    if (millis() — starttime > 3000)
    workkbd = true;

    return;
    }

    if (code & MaskMediaButton)
    {
    Send(cmdDown);
    Serial.print("niz");
    }

    if (code & MaskRadioButton)
    {
    Send(cmdUp);
    Serial.print("verx");
    }
    if (code & MaskVolumeUpButton)
    {
    Send(cmdRight);
    Serial.print("pravo");
    }
    if (code & MaskVolumeDownButton)
    {
    Send(cmdLeft);
    Serial.print("levo");
    }
    if (code & MaskOkButton)
    {
    Send(cmdPlay);
    Serial.print("play");
    }
    if (code & MaskMuteButton)
    {
    Send(cmdMute);
    Serial.print("mute");
    }
    if (code & MaskScrollDown)
    {
    Send(cmdVolumeDown);
    Serial.print("volniz");
    }
    if (code & MaskScrollUp)
    {
    Send(cmdVolumeUp);
    Serial.print("volup");
    }
    }


    Полезные темы:

  2. # 0+

    Если Вы впервые на нашем Форуме:

    1. Обратите внимание на список полезных тем в первом сообщении.
    2. Термины и наиболее популярные модели в сообщениях подсвечиваются быстрыми подсказками и ссылками на соответствующие статьи в МагВикипедии и Каталоге.
    3. Для изучения Форума не обязательно регистрироваться - практически весь профильный контент, включая файлы, картинки и видео, открыты для гостей.

    С наилучшими пожеланиями,
    Администрация Форума автозвука Магнитола


     

Социальные закладки

Социальные закладки

Ваши права

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