Запрограммировать реагирование на набор цифровых посылок.
- Войдите на сайт для отправки комментариев
Уважаемые знатоки.
Подскажите по какому пути идти в решении такого вопроса:
есть к примеру девайс, который в порт (один цифровой выход) выдает некие значения, набор 1 и 0 которые нигде не описаны. Выдается один и тот же код при разных например алармах.
это стандартная ситуация.
Так вот - ковыряться и разгадывать код нет ни желания ни времени, смысла особого нет
Подозреваю, что есть решения для Ардуино по записи и последующем "опознании" этой записи как стандартной, и присвоении определенной команды для Ардуино. Например девайс выдает 5 кодов при пяти разных алармах. Как набор из нулей и единиц этой посылки сделать запоминаемым для Ардуино? С последующим четким реагированием на каждый аларм выдаваемый тем девайсом?
Надеюсь описал свои хотелки достаточно понятно, если что задавайте уточняющие вопросы.
Создайте массив, в цикле читаете состояние ноги и записываете в массив, потом все выводите в сериал, увидите повторяющиеся последовательности нулей и едениц, а там уж решайте, что Вам с ними делать.
Реверс инженеринг. Вы случайно не сигнализации вскрывать собрались? С этим шагайте на другие форумы...
Short Circuit, нужно понимать с каким протоколом передачи вы имеете дело. Сколько бит передаётся, какая длины паузы, какая длина бита единицы/ноля, есть ли служебные биты. Нужен либо осциллограф, либо логический анализатор. Ловить то, не знаю что -это слишком долгий путь.
вы не поняли ни меня, и не понимаете как сигнализации работают.
мне нужно реагировать на принятую посылку аларма например снятого в кофе-автомат..
таких приеров кругом валом.
и реверс-инжениринг здесь как бы совсем и не нужен, нет задачи вскрывать сам код, есть задача - просто на него реагировать, запомнить что вот он был такой и сейчас повторилась эта посылка.
Short Circuit, нужно понимать с каким протоколом передачи вы имеете дело. Сколько бит передаётся, какая длины паузы, какая длина бита единицы/ноля, есть ли служебные биты. Нужен либо осциллограф, либо логический анализатор. Ловить то, не знаю что -это слишком долгий путь.
вот вот... это долгий путь, ради отлова например одного -двух-тех алармов и очень короткий - типа словить "закончился сахар". вскрывать весь протокол как бы абсолютно нелогично и трудозатратно.
кстати, посмотрите, а здесь не подобным образом решается прием команд от радиобрелка??
http://letsmakerobots.com/node/35959
Что может быть проще с одной скоростью записать сигнал, а потом с той же скоростью его выплюнуть один к одному. Не говорю про диалоги. Повторяющиеся последовательности не сложно отследить и плевать на протоколы. Логический анализатор это тоже самое, только с чёткими, видимыми временными, рамками, а не слепая запись черко определённого промежутка времени. Что тут сложного или непонятного?
Вот вот, я и говорю о сигнашках. Удачи Вам. Не хочу, чтоб какой то студент, вскрыл мою машину, с моей же помощью...
вы адекватный вообще человек? похоже не совсем. рядом масса тем о работе радиобрелков, мне нужно в итог совсем другое, и "односторонняя связь", а не как вы пишите о "двухсторонней".
мне сигнал никуда не нужно "выплевывать", мне нужно реагировать на его повторение, все.
в общем постарайтесь в этой теме не отвечать. спасибо.
обьясните, где берет тайминги для 0 и 1 импульсов именно этот скетч, не совсем пойму.
// RF module receiver code for Arduino. // The module is connected to the Arduino havin 3 pins: +5, GND and data. The data pin is connected to //digital pin 11 on the arduino. int inpin = 11; int onoff = 0; int i=0; String codein="00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; //there are about 100 zeros in the initial codein unsigned long duration; void setup() { Serial.begin(9600); Serial.println("setup"); } void loop() { for (i = 0; i < 100; i++) { duration = pulseIn(inpin, HIGH); if (duration > 1000) { codein.setCharAt(i,'1'); } else { codein.setCharAt(i,'0'); } } Serial.println(codein); //uncomment these two lines to figure out your remote codes delay(1000); // this is the second line for (i=0; i<75; i++){ if (codein.substring(i,i+25)=="0010100111000110001010000") // substitute remote codes here { Serial.println("lock!!!"); if (onoff == 1){onoff = 0;} else {onoff = 1;} // LED toggle on/off break; } if (codein.substring(i,i+25)=="0010100111000110001001000") // and here { Serial.println("unlock!!!"); break; } if (codein.substring(i,i+25)=="0010100111000110001000100") //and here { Serial.println("mute!!!"); break; } if (codein.substring(i,i+25)=="0010100111000110001000010") // you get the idea :) { Serial.println("ring!!!"); break; } if (codein.substring(i,i+25)=="0010010110111101111001000") { Serial.println("lock2!!!"); break; } if (codein.substring(i,i+25)=="0010010110111111111000100") { Serial.println("unlock2!!!"); break; } if (codein.substring(i,i+25)=="0010001001011011111111100") { Serial.println("mute2!!!"); break; } if (codein.substring(i,i+25)=="0010010010110111111111000") { Serial.println("ring2!!!"); break; } } // this toggles the 13 pin led on or off if (onoff == 1) { digitalWrite(13,HIGH); delay(1000); } else { digitalWrite(13,LOW); delay(1000);} }а как часто и по какой причине меняются выкидуемые битовые последовательности
да и как синхронизацию ловить?????
синхронизацию ловить - незнаю как. а как в скетче выше: просто определяется наличие нужной последовательности и все?
Short Circuit, -скетч выше примитивен до неприличия. Любой импульс длиннее 1ms он записывает как приём единицы, любой импульс короче -как приём ноля. При отсутствии сигнала он забивает массив нолями по одному нолю каждую секунду. При появлении сигнала посореди цикла он начнёт дописывать массив с того места, где он был . Хороший пример как не надо программировать :)
да, я понимаю, что он сильно примитивен, все верно.
запустил его у себя - работает - выдает 0000000000000000000000000000000
вопрос - как поменять время вборки 1 мс ?? или оно от скорости пульта работает?
кстати, вот что он только что выдал мне с брелка -
Short Circuit, мой вам добрый совет -забудьте про этот скетч. Купите логический анализатор, 5 баксов всего, а пользы на все 200. И сейчас и в дальнейшем пригодится. Снимите картинку импульсов -тогда разберём как её на ардуине сделать.
какой анализатор?
http://www.youtube.com/watch?v=qm2aLMX6lu8