Официальный сайт компании Arduino по адресу arduino.cc
Оставить только передачу кода
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 14/07/2017 - 11:24
Привет, я совсем начинающий, хотелось бы попросить помощи у опытных людей, ребят, не могли бы вы убрать часть скетча, и оставить только передачу кода, что бы только можно было вписать код, и отправлять в эфир. Буду очень при очень благодарен!
#define txPin 8 //пин передатчика #define rxPin 2 //пин приемника void setup() { pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); Serial.begin(115200); // тут поставьте свою скорость Serial.println("Came started"); // следующие 2 строчки включают перехватчик. если планируется только отправка их можно закоментить attachInterrupt(0, grab, CHANGE); // обратите внимание на первый параметр - если у вас другая ардуина, он может быть не 1, а 0! interrupts(); } volatile static long lastCode = 0; void loop() { // это раскомментить и вместо 3693 вписать свой код для шлагбаума //SendCame4(3693); //delay(5000); //return; // при получении кода выводим его в терминал if (lastCode > 0) { Serial.println(lastCode & 0xfff); lastCode = 0; } } // функция отправляет код в эфир void SendCame4(long Code) { for (int j = 0; j < 7; j++) { // посылку посылаем 4 раза подряд. // время стартового импульса digitalWrite(txPin, HIGH); delayMicroseconds(320); digitalWrite(txPin, LOW); for (int i = 12; i > 0; i--) { byte b = bitRead(Code, i - 1); // побитово перебираем и посылаем код if (b) { digitalWrite(txPin, LOW); // 1 delayMicroseconds(640); digitalWrite(txPin, HIGH); delayMicroseconds(320); } else { digitalWrite(txPin, LOW); // 0 delayMicroseconds(320); digitalWrite(txPin, HIGH); delayMicroseconds(640); } } digitalWrite(txPin, LOW); delayMicroseconds(11520); } } // ВЕСЬ КОД НИЖЕ - ПРИЕМ #define MAX_DELTA 200 // длительность импульсов может плавать в зависимости от заряда батареии - макс допуск 200 мкс boolean CheckValue(unsigned int base, unsigned int value) { return ((value == base) || ((value > base) && ((value - base) < MAX_DELTA)) || ((value < base) && ((base - value) < MAX_DELTA))); } volatile unsigned long prevtime; volatile unsigned int lolen, hilen, state; volatile static byte cameCounter = 0; // count of bits stored volatile static long cameCode = 0; // code itself void grab() { state = digitalRead(rxPin); if (state == HIGH) lolen = micros() - prevtime; else hilen = micros() - prevtime; prevtime = micros(); if (state == LOW) { // последовательность закончилась if (CheckValue(320, hilen) && CheckValue(640, lolen)) // valid 1 { cameCode = (cameCode << 1) | 1; cameCounter++; } else if (CheckValue(640, hilen) && CheckValue(320, lolen)) // valid 0 { cameCode = (cameCode << 1) | 0; cameCounter++; } else cameCounter = 0; } else if (lolen > 1000 && (cameCounter == 12 || cameCounter == 13) && ((cameCode & 0xfff) != 0xfff)) { lastCode = cameCode & 0xfff; cameCounter = 0; cameCode = 0; } }
Функция отправки кода - с 35 по 60 строку исходного кода. Как сделать только отправку - написано в строке 21. Но чтобы получился код для брелка, нужно еще вставить управление посылкой, например кнопку, этого в исходном коде нет. Пока оставил как в исходном - код отсылается каждые 5 сек, пока не выключишь программу.
Убрал лишнее, не проверял
Вот, спасибо тебе человек, побольше бы таких людей! Сейчас приеду домой, буду пробовать! Спасибо огромное!)
Ошбика вот такая вылетает:
Ну я ж написал, что не проверял код .
Попробуйте переставить loop() (строки с 15 по 22) в конец скетча.
Попробовал, все тоже(
В setup скобку закрывающую поставь для начала
Поставил, теперь ошибка такая
Ну значить не находит стандартную биб-ку, где сериал описан
Выкладывай скетч, что у тебя получилось.
Держи братишка)
Закрывающую скобку в сетапе нитуда поставили, переместите ее на строку 10
Все заработало! Приеник видит, отслась одна проблема, нужно передавать код 31b, как это сделать? Из шестнадцетеричной в двоичную пробовал, не получается, да и в обще всяко эксперементировал!
Дык ответили же в другой теме - http://arduino.ru/forum/obshchii/otkrytie-shlagbaumov-firmy-came-433-mhz#comment-295656
Дык код там статичный, стоял возле шлагбаума, перехватывал код, когда он открывался все время (раз 5) был один и тот же 31b0, на закрытие тоже все время один и тот же, мне только на открытие нужно, а как сделать это ,знаний нема(
Дык код там статичный, стоял возле шлагбаума, перехватывал код, когда он открывался все время (раз 5) был один и тот же 31b0, на закрытие тоже все время один и тот же, мне только на открытие нужно, а как сделать это ,знаний нема(
ну раз уж я вызвался тебе в няньки - смотри. Тебе надо шестнадцитиричное число 31b0 перевести в десятичное и вставить в вызов функции SendCame4 в строке 15
Только 31b0 может быть закодировано в порядке от старшего байта к младшему или наоборот, поэтому попробуй еще и код b031
0xb031 = 45105
А 31b0 попробуй сам перевести
О. что-то я забыл - ты же в вызове функции SendCame4 сразу можешь вставить число в шестнадцитиричной записи, просто добавив к числу 0x вначале - например SendCame4(0x31b0)
Попробовал, для начала вставил твой код "45105" приемник не видит.
Перевел 31b0, получил "12720" приеник тоже не видит. Хотя число которое стоит по дефолту в скетче "3693" приеиник видит как 67b0, а если в калькуляторе перевести 3693, то получаем E6D. почему так?
О каком 0x31b0 или 0xb031 вы тут рассуждаете, если передается 12 бит ?
Вставил в шестнадцетеричной, приемник тоже не видит(
Уже все перепробовали, в душе не чаю что не так.
Там не только байты, но все биты в каждом байте перевернуты от старших к младшим.
попробуй код 2253 (десятичный)
Нет, все так же тихо(
Ой, прошу прошения, моя ошибка, все работает, выражаю огромную благодраность, и жму вам руку! Спасибо что возились с таким неучем как я!
Ой, прошу прошения, моя ошибка, все работает, выражаю огромную благодраность, и жму вам руку! Спасибо что возились с таким неучем как я!
код 2253 подошел?
А теперь, в качестве благодарности :) - расскажи. чем вы коды считывали со шлагбаума, а то у меня тоже такая задача в планах
Если можно, поподробнее, как вы получили?
Ну что продолжаем :)))
мой код - 3468 !
Правильный код 2253, помого человек выше!)
Код для приемника:
Использовался передатчик и приемник с Aliexpress: https://ru.aliexpress.com/item/433Mhz-RF-Transmitter-With-Receiver-Kit-For-Arduino-ARM-MCU-Wireless/32583663732.html?spm=2114.13010608.0.0.5TkTLS
Так как всетаки вы получили 2253?
Если можно, поподробнее, как вы получили?
Я ж говорю. там не только байты стоят в другом порядке, но и биты в каждом байте идут слева направо, а не справа налево, как принято в Си
1. Берем код, записываем двоично 0b31 => 101100110001
2. Переписываем все биты в обратном порядке 101100110001 => 100011001101
3. Переводим полученное в десятичный вид 100011001101 => 2253
ЗЫ наверняка это как-то можно проще сделать, но что-то сейчас не соображу, мож старшие товарищи подскажут
ЗЫ2 - чтоб не заниматься такой трахомудией, надо код в строчках 30 и 31 (сообщение #10) переписать, чтоб он биты в правильном порядке отправлял
все верно, передатчик передает биты от старшего к младшему
а приемник кладет с младшего к старшему
всегото надо заменить
Спасибо братишка, всех благ тебе!)
И тебе спасибо, удачи во всех начинания!)
0xb031 = 45105
А 31b0
В помощь автору темы:
Доброго времени суток товарищи , я тоже чайник в этом деле, но хочется научиться.
У меня при сканировании сиглала came выдает в десятичном виде, т.е. came:1247 и came: 3173, перевожу в двоичную , вставляю в скетч запускаю, сканируя второй ардуиной выдает те же цифры, а шлагбаум не поднимает, не работает, я не знаю как с этим быть.
Получается мне надо 1247 перести в двоичную, потом перернуть и вставлять в скетч? Скетч на отправку отсюда.
http://psenyukov.ru/?p=213
Моя почта. registratoff@gmail.com
Приветствую, прошу прощения, не знаю, как личку написать.
Дружище поделись опытом, у меня есть пойманные коды в десятичном, при обратном посыле не работает.
Скинь пожалуйста скетчи рабочие, во что переводить и куда вставлять, заранее благодарю . Моя почта.
registratoff@gmail.com
сканировал вот этим, этот скетч Поддерживает: CAME, NICE, AM MOTORS
Ребята понимающие может поможете его разделить на два отдельных скетча - прием CAME, NICE, AM MOTORS и передача отдельно, а то в таком виде как то не работает полностью.
А отправлял вот этим: