Подключение к дисплею китайского парктроника

мне нужно подключиться к дисплею такого китайского парктроника:

Спойлер

в итоге хочу в коде получать данные, что приходят на дисплей.
как я понимаю, такая задача уже много раз была реализована разными людьми, только вот поиск по интернету выдает очень старые статьи…
никгде не могу найти схему подключения к ардуино.
она по идее очень простая - на цифровой пин МК подключается один из проводов идущих на дисплей, имеющий TTL 5 вольт и в коде для МК производится обработка данных по прерыванию и далее вывод в сериал.

в моем случае плата дисплея выглядит так:

Спойлер

справа на фото - кабель от парктроника:
черный - GND
красный - 5 вольт
белый - хз… вольтметром измерить не получается

я подключил красный к 2 пину Arduino Nano, черный к GND.
при этом дисплей НЕ отключал. то есть сейчас к кабелю подключен и дисплей и ардуино.
код взял из этой темы:

https://arduino.ru/forum/apparatnye-voprosy/rebyata-pomogite-podklyuchit-datchiki-parkovki-ot-parktronika-k-arduino?page=2#comment-65476

при подключении в Сериал Монитор ничего не пишется…

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

Никакой схемы нет. Все дисплеи разные и надо делать с нуля. И честно, купи модули парктроника для ардуино и не страдай, будет в сто раз дешевле и проще.

2 лайка

и сигнал на зуммер

1 лайк

так как понять, какой провод от кабеля на какой пин подключать?
по идее я же правильно подключил? и тот код должен работать…
может вместо красного, надо белый…

про модули интересно, но все таки мне нужно решить мою задачу - получить в коде данные от парктроника.
уже закомитился под это - там дальше надо ардуину подключать к другому девайсу, который умеет делать что нужно.

Зеленый режь. И беги

хм… вместо красного подключил белый и в сериал мониторе пошли данные…

теперь беги… за поллитрой!!! :smiley:

Очень просто. Левая микросхема - сдвиговый регистр, который, скорее всего и обслуживает дисплей. Где и какая у неё ножки написано в её даташите. Что там за вторая микросхема не видно, но если такая же, значит, они стоят каскадом скорее всего. У неё (микросхемы) две линии данных (пины 1 и 2). Вот по ним на неё всё и приходит, а она (или они, если там каскад) уже раскидывает по ногам экрана. Для анализа потребуется ещё 9-ый пин … ну, вообще, смотрите даташит и гуглите по подключению сдвиговых регистров. Хотите читать что идёт на дисплей - читайте, что приходит на сдвиговый регистр.

Не знаю по какой именно идее, т.к. не в курсе какой идеологии Вы придерживаетесь.

Не знаю, нахрена Вам это надо, но по опыту скажу - такое имеет смысл делать только, если повозиться с дисплейчиком доставляет удовольствие. Гороху придётся откушать прилично.

2 лайка

ну мне удалось подключиться.
при всех 4-х подключенных сенсорах (установлены на рейке, расстояние между ними примерно по 40 см, преграды нет, на дисплее аларма нет, рисует “два минуса” по центру - - ),
код, указанный выше выводит такое:

Спойлер
------
247 241 0 0 ------
------
201 223 0 0 ------
------
249 111 0 0 ------
------
251 63 0 0 ------
------
223 181 0 0 ------
------
253 219 0 0 ------
------
49 200 0 0 ------
------
180 127 0 0 ------
------
233 251 0 0 ------
------
195 222 0 0 ------
------
251 239 0 0 ------
------
243 251 0 0 ------
------
113 179 0 0 ------
------
159 247 0 0 ------
------
222 63 0 0 ------
------
223 251 0 0 ------
------
91 159 0 0 ------
------
143 239 0 0 ------
------
243 159 0 0 ------
------
253 239 0 0 ------

пока не разобрался, что это все значит…
по идее код пришел отсюда
и там сказано что:

1е число содержит бит-флаг-- есть препятствие и номер датчика
2е число расстояние до препятствия в сантиметрах

чтото не очень понятно, что при этом означают цифры, например 222, 223, 91, 143…
где там флаг и где там номер датчика…

возможно код не совсем корректно работает, так как я еще прочитал вот тут, что код както должен соответствовать таймингам пакетов данных, что приходят по этой шине на дисплей.
а это как раз надо както осцилом проверять, которого у меня нет, да и не умею я это определять.
как же понять, какая частота у моего экземпляра? тогда наверное можно будет использовать код из тойже темы, чуть выше, от XsanderS (116 сообщение), там вроде можно указывать частоту…

А я Вас предупреждал:

Такая работа имеет смысл только если Вам просто прикольно поразгадывать эту головоломку. В любом другом случае (улучшить или починить парктроник, например) проще купить нужное устройство.

1 лайк

Колупал подобный парктроник. У него однопроводная линия данных, суть передачи была такая, начало пакета идёт длинный импульс(порядка 2000 мкс), далее идут короткие импульсы. Для парктроника с четырьмя датчиками идёт 32 коротких импульса, 100 мкс. это 0, 200 мкс. это 1. Первые 8 импульсов из пакета в 32 импульса, это данные с первого датчика парктроника и т.д.

1 лайк

А как этот дисплей в стандартном режиме работает? 2 цифры по середине что показывают? Расстояние до препятствия? 7 рисок справа и слева от цифр тоже участвуют в процессе индикации, или так для красоты? Если нет, то должны быть светодиоды по 7 с каждой стороны. Покажите ваш дисплей с другой стороны (со стороны где индикатор). Может там ещё есть микросхемы. И прочитайте и напишите название всех микросхем, что находятся на плате дисплея. Без этой информации трудно понять даже в каком режиме идет отображение информации в динамике или статике.

1 лайк

а микрухи какие? на фотке плохо видно

1 лайк

конечно есть практическая цель - подключить данный парктроник к ГУ на машине.
эта часть уже готова - просто ждет от ардуины данные в нужном формате.
както только я получу данные с партроника в коде ардуины и разберусь что они значат - задача будет решена…
горох то кушать готов, значит бы в каком направлении копать эту бобовую диету)

вот как эти импульсы измерить? осцила и лог анализатора нет у меня нет, но вроде есть какойто другой способ снять с помощью ардуины это -
вот тут,

https://shorturl.at/gvGQ7

Спойлер

(пришлось воспользоваться генератором коротких линков, так как УЖЕ почему-то редактор не разрешает вставлять линки со старого форума ардуино.ру, хотя в моем предыдущем сообщении они вставлялись нормально… глюк какойто на форуме чтоли… )

в 116 сообщении, есть код, который, судя по описанию автора:

выведет в порт точные тайменги и по ним можно будет понять где синхро импульс

у меня он выводит такие данные для всех 4 сенсоров, без преграды, но что это может означать - не понятно…

Спойлер

168
1
1
1
1
1
167
1
1
1
1
167
1
1
1
1
1
167
1
1
1
1
167
1
1
1
1
1
167
1
1
1
1
167
1
1
1
1
168
1
1
1
1
167
1
1
1
1
167
1
1
1
1
167
1
1
1
1
167
1
1
1
1
167
1
1
1
1
1
167
1
1
1
1
167
1
1
1
1
168
1
1
1
1
1
167
1
1
1
1
167
1
1
1
1
1

в коде, судя по сообщениям в том форуме, можно менять значение

  Timer1.initialize(1000);                // Интервал срабатывания таймера 1мс

но как я понимаю, для того чтобы узнать этот интервал - надо вначале посмотреть в осциллограф?

я так понимаю, в штатном режиме на этом дисплее отображдается цифра - расстояние в метрах до препятствия, а индикаторы справа-слева указывают где оно расположено, и видимо, 7 значный уровень приближения или както так…
думаю с обратной стороны платы ничего такого нет - она приклеена к этой индикаторной сборке…

название микросхемы видно только на одной - SN74HC 164
даташит на нее уже тут выкладывали

Вот нарыл код, попробуйте.

// Расшифровка данных с китайского парктроника.

#define BTNPIN 2  // Вход сигнала от линии DA парктроника на второй пин ардуино нано, для других ардуино, вывод аппаратного прерывания может быть другой.
volatile unsigned int startImpuls = 0;
volatile unsigned int lengthImpuls = 0;
byte posInPacket = 0;
byte parkA = 0;
byte parkB = 0;
byte parkC = 0;
byte parkD = 0;
unsigned int li = 0;

void setup() {



  pinMode(BTNPIN, INPUT_PULLUP);
  Serial.begin(115200);

  attachInterrupt(0, fireUp, RISING);  // Запуск прерывания при наличии сигнала HIGH
}

void loop() {
  if (lengthImpuls > 50) {
    li = lengthImpuls;
    lengthImpuls = 0;



    if (li > 1900 && li < 2100) {  // При сигнале длинной 2000мкс начало пакета
      posInPacket = 0;
      Serial.println(parkA);
      Serial.println(parkB);
      Serial.println(parkC);
      Serial.println(parkD);
      parkA = 0;
      parkB = 0;
      parkC = 0;
      parkD = 0;

    } else if (li > 90 && li < 110) {  // При сигнале длинной 100мкс соответствует - 0
      posInPacket++;
    } else if (li > 190 && li < 210) {  // При сигнале длинной 200мкс соответствует - 1
      posInPacket++;
      if (posInPacket >= 2 && posInPacket <= 9) {
        bitSet(parkA, 9 - posInPacket);
      } else if (posInPacket >= 10 && posInPacket <= 17) {
        bitSet(parkD, 17 - posInPacket);
      } else if (posInPacket >= 18 && posInPacket <= 25) {
        bitSet(parkC, 25 - posInPacket);
      } else if (posInPacket >= 24 && posInPacket <= 33) {
        bitSet(parkB, 33 - posInPacket);
      }
    }
  }
}

// Функция обработки прерывания на подъем
void fireUp() {
  detachInterrupt(0);
  startImpuls = micros();
  attachInterrupt(0, fireDown, FALLING);
}

// Функция обработки прерывания на падение
void fireDown() {
  detachInterrupt(0);
  lengthImpuls = micros() - startImpuls;
  startImpuls = 0;
  attachInterrupt(0, fireUp, RISING);
}

1 лайк

спасибо!
я уже видел похожий код вот тут - https://www.drive2.ru/b/531394795411603819/
если сравнить их - видно, что они похожи…

и чтото этот код ничего не показывает в терминале… совсем ничего…

возможно потому, что в вашей версии в главном цикле есть вот это условие:

  if (lengthImpuls > 50) {
...

upd: хотя нет, дело в чем-то другом…

тот другой код дает такой вывод:

Спойлер

18072
100
204
204
204
200
200
204
200
212
200
200
204
204
200
200
200
204
204
200
200
208
204
204
200
192
204
204
200
200
200
204
204
200
1880
100
200
200
204
204
200
200
196
204
204
200
200
200
204
204
204
200
200
204
200
204
200
200
204
204
200
200
200
204
204
200
200
204
1880
100
200
200
204
204
200
200
196
212
204
200
200
204
204
204
200
200
204
204
200
204
204
204
200
196
200
204
204
200
200
200
204
204
1880
104
204
200
204
200
204
204
196
200
200
204
204
200
200
204
204
204
200
200
200
208
204
200
200
204
204
200
200
200
204
204
204
204
1880
100
200
200
212
200
200
200
204
204
200
200
204
204
200
200
204
204
204
200
196
204
204
200
200
204
204
204
200
200
204
204
200
208
1880
100
200
200
204
204
200
200
200
212
200
200
200
204
204
200
200
204
204
200
200
204
204
200
200
200
212
200
200
204
204
200
200
200
1880
100
200
200
204
204
200
200
200
212
204
200
200
204
204
200
200
200
204
204
200
204
200
204
204
196
200
204
204
204
200
200
204
204
1880
104
204
200
204
204
204
204
196
208
204
204
200
200
200
204
204
200
200
204
204
208
200
200
204
196
200
200
200
204
204
200
200
204
1880
100
200
204
204
200
200
200
200
212
200
200
200
204
204
200
200
200
204
204
200
204
204
204
204
196
200
204
204
200
200
204
204
200
1880
100
200
204
204
200
200
200
200
212
200
200
204
204
200
200
200
204
204
200
200
208
204
204
200
192
204
204
200
200
204
204
200
200
1880
100
204
204
204
200
200
204
200
208
200
204
204
204
200
200
204
204
200
200
204
204
204
200
200
200
204
200
200
200
204
204
200
200
1880
100
200
200
204
204
200
200
200
208
200
200
200
204
204
200
200
204
204
204
200
204
204
204
200
196
200
204
204
200
200
200
204
204
1876
104
204
200
204
204
204
204
196
200
204
204
200
200
200
204
204
200
200
204
200
208
200
200
204
196
204
200
200
204
204
200
200
204
1880
100
204
196
204
200
200
204
204
200
200
204
204
200
200
200
208
204
200
200
196
204
200
200
200
204
204
200
200
204
204
200
200
208
1880
104
204
200
204
204
204
200
196
208
204
204
200
200
204
204
200
200
200
204
200
204
200
204
204
196
200
200
204
204
200
200
200
204

upd2: агааа - в том, другом коде есть вот это:

     Serial.println (li, DEC);    // Отправляем в порт для тестового просмотра

Этор вывод размера (длины?) текущего импульса, что был считан на пине D2.
я правильно понял?

Тогда начните с покупки этих устройств.
Глупо пытаться научиться готовить борщ, не имея кастрюли.

1 лайк

Один и тот же человек)))

Правильно. Видно, что начало пакета идёт импульс 1880 мкс, поменяете в скетче значения 30 строка и посмотрите, что будет

1 лайк

Левая - 74HC164, я уже выше писал ТС, что с нею делать.