Скетч для ардуино, отправки кода открытия шлагбаума CAME

Приемники и передатчики цифровые и аналоговые

Модератор: gurvinok

sega1983
Сообщения: 10
Зарегистрирован: 19 янв 2019, 16:37

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение sega1983 » 19 янв 2019, 23:32

Или как скетч поправить?

Аватара пользователя
GhostX
Сообщения: 1135
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение GhostX » 20 янв 2019, 01:25

Hex bin dec это форматы шестнадцетиричный, бинарный(двоичный), десятичный.
0123456789ABCDEF это шестнадцетиричнное исчисление
0123456789 это десятиричное
01 это двоичное.
Число например 499 в десятиричном виде выглядит привычно
Оно же в HEX 1F3
Оно же в BIN 111110011
Serial.print(buf, HEX);// означает показать в шестнадцатиричной системе
Serial.print(buf, DEC);// увидим в десятиричной
BIN по моему не надо писать, чтоб увидеть в двоичной. Сейчас не помню точно.
Да и вопрос я пока не понял толком.
А в целом там все в бинаре передается есть сигнал или его отсутствие. Все другие форматы, это для нас(людей) чтоб от обилия нулей и единиц в глазах не рябило и легче воспринималось в коде визуально.
- как скетч поправить?
Поправить чтоб что было?!
Пишите более развернуто свои вопросы.
Хочу, чтоб принятый сигнал я увидел в (какой то там системе).

Пример этого скетча я написал тут 3 года назад. Код этот не я написал, он был взят где то с интернета и бегло взглянув на него, он ничего не отправляет, а только считывает и показывает код с брелка от шлагбаума или иного передатчика.
Для отправки нужен другой скетч. Под рукой его сейчас нету. Да и не понятно, он вообще нужен?!
Я же в последствии этот алгоритм использовал в другом проекте не связанным со шлагбаумами в принципе.
Но вопрос стоит как hex перевести в двоичный формат. Ответ: Его не нужно переводить, компилятор его сам переведет. Нужно только указать в каком он формате. 0b00000001 или 0x01 или 1, это одно и тоже "один" в бинарном шестнадцетиричном и десятичном форматах.

sega1983
Сообщения: 10
Зарегистрирован: 19 янв 2019, 16:37

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение sega1983 » 20 янв 2019, 07:59

Все верно,меня интересует вопрос который затрагивался Вами 3 года назад. Есть два скетч один на прием сигнала(например с брелка от шлагбаум) второй на передачу. Принимаем в HEX, здесь все хорошо, переводим в двоичную систему заливаем на передачу(передаем) в итоге на прием получаем совсем другой код. Помогите разобраться в чем причина(что-то нужно исправить в скетче или как сформировать код на отправку,чтобы получить на выходе принятый с брелка код?) Может быть у Вас есть адекватно работающий скетч? Очень нужно.

Аватара пользователя
GhostX
Сообщения: 1135
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение GhostX » 20 янв 2019, 09:18

Три года назад я только учился. Тогда у меня было не понимание как hex перевести в bin. А оказалось все так просто. Нет никакого специального перевода.
Пишите ваши скетчи, что используете, оба. Коды в интернете нормальные и работают. http://arduino.ru/forum/programmirovani ... vorot-came тут есть скетчи приема и передачи.
Предполагаю, что отправляете 123456, а приходит 654321. У меня была такая заковырка, но лучше напишите, что именно у вас отправляется и что приходит.
Посмотрим.

Аватара пользователя
gurvinok
Сообщения: 1545
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение gurvinok » 20 янв 2019, 09:24

Чет вы все в кучу перемешали. Доброе утро. Система исчисления это лишь способ отображения числа. При передаче данных каким либо интерфейсом, последние на аппаратном уроане, передаются единицами и нулями, а дальше аыаоди на экран в любом виде. HEX это интеловский формат записи данных в файл. Он состоит из строк записанных в шеснадцатиричном формате. В каждой строке в начале идет номнр строки, потом поле данных затем длинна данных в байтах, потом сами данные, а в конце последний байт это контрольная сумма. Могу напутать с полями так как давно к нему не прикасался. Отсюда и просьба построить четкий вопрос что куда передавать, какой физической средой и что нужно получить.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1135
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение GhostX » 20 янв 2019, 10:19

Доброе утро Алексей.)) В кучу все смешалось от не понимания поставленного вопроса.
Hex и интеловский формат с контрольными суммами тут не к чему. Там скетч простенький, тупо долбит в эфир набор, зарание известный, нулей и единиц. приемник принимает, и знает что должно придти, сошлось - команда на открытие. Чуть измененный набор нулей и единиц делает закрытие.(а то и вовсе один и тот же код, подзабыл уже. Типа если закрыто было, то открыть, если открыто было, закрыть.) Все.
Никаких контрольных сумм номеров строк и прочего тут нет. Единственная защита от ошибок, это долбит в эфир 4 раза код. Если хотя бы один код верным пришел, сразу команда открывать/закрывать. Коды пришедшие с ошибкой игнорируются. Алгаритм работы написан по ссылке в моем сообщении с кодом приема.

Аватара пользователя
gurvinok
Сообщения: 1545
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение gurvinok » 20 янв 2019, 21:13

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

sega1983
Сообщения: 10
Зарегистрирован: 19 янв 2019, 16:37

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение sega1983 » 20 янв 2019, 22:00

Как через этот скетч:


#define txPin 8
#define Te 320

void setup(){
pinMode(txPin, OUTPUT);
}

void loop()
{
SendCame(0b111111011110111100110110); //код от моего шлагбаума шиворот навыворот. в HEX это BFF76C
}

void SendCameBit(byte b)
{
delayMicroseconds(Te);
if (!b) digitalWrite(txPin,HIGH);
delayMicroseconds(Te);
digitalWrite(txPin,HIGH);
delayMicroseconds(Te);
digitalWrite(txPin,LOW);
}

void SendCame(long Code)
{
for (int j=0;j<5;j++) // посылку посылаем как и брелок - 4 раза подряд.
{
digitalWrite(txPin,HIGH);
delayMicroseconds(Te);
digitalWrite(txPin,LOW);// посылаем стартовый импульс

for (byte i=24;i>0;i--){
SendCameBit(bitRead(Code, i-1)); // побитово перебираем и посылаем код
}
delay(16); // сделать паузу после кода внутри пакета.
}
delay(2000); // сделать паузу после посылки на 2 с
}

передать код : 5F8B75
если строку: SendCame(0b111111011110111100110110); заменить на SendCame(0b10111111000101101110101);,то придет совсем другой код.

Аватара пользователя
gurvinok
Сообщения: 1545
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение gurvinok » 20 янв 2019, 23:40

Нарисуй пожалуйста схему включения модулей. Я попробую собрать все это на столе и проверю скетчи.
Если долго мучиться, может быть получится.

Аватара пользователя
GhostX
Сообщения: 1135
Зарегистрирован: 07 дек 2015, 14:40
Откуда: Рязань

Re: Скетч для ардуино, отправки кода открытия шлагбаума CAME

Сообщение GhostX » 21 янв 2019, 00:57

Вы не написали что приходит. Предполагаю, что приходит шиворот на выворот. Больше там не в чем спотыкаться.
Если да, то вот тут проблема ваша сидит:
for (byte i=24;i>0;i--){
SendCameBit(bitRead(Code, i-1)); // побитово перебираем и посылаем код с старшего бита.
Пробуем перевернуть:
for (byte i=0;i<24;i++){
SendCameBit(bitRead(Code, i+1)); // побитово перебираем и посылаем код с младшего бита.

Отправляем - 0b10111111000101101110101
Получаем - 0b10101110110100011111101
Потому что эта отправка идет или с младшего бита или со старшего (с права на лево и с лева на права)
Написал это в слепую, может и ошибся. Надо обязательно проверить, под рукой не на чем проверить. Надо собирать макет.
Если не заработает, напишите обязательно, что именно приходит.
Соберу макет и попробую повторить.

Ответить