Форум
 

Вернуться   Форум "Фрикер Клуб" - кодграббер своими руками > Основной раздел > Песочница

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 18.05.2017, 11:22   #11
1101 Меню Пользователя
Гость клуба
 
Регистрация: 12.04.2017
Сообщений: 2
По умолчанию Re: Граббер came

Использую передатчик FS1000a и приемник RF-5V. Этот скеч у меня тоже ничего не поймал с брелка CAME TOP 432NA. Думал приемник не рабочий. Зарядил вот такой переборщик
{code}
#define txPin 8
#define Te 320
int led = B00000001;
int led2 = B1000;
void setup(){
pinMode(txPin, OUTPUT);
}

void loop()
{
// SendCame(0b100010001111);
// delay(2000);
// SendCame((B1110 * 256) + B10101010);
// delay(5000);
SendCame((led2 * 256) + led);
led = led + B1;
// delay(1000);

if (led==11111111)
{led2 = led2 + B1; }
}

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=12;i>0;i--){
SendCameBit(bitRead(Code, i-1)); // побитово перебираем и посылаем код
}
delay(16);
}
delay(500); // сделать паузу после посылки на 2 с
}

{code}

Приемник коды получает.
Но коды кнопок я получил на этом скече

{code}
#define txPin 8 //пин передатчика
#define swPin 5 //пин включения приемника
#define rxPin 2 //пин приемника

void setup()
{
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// всегда устанавливаем пин включения приемника в 0 и не трогаем его больше
pinMode(swPin, OUTPUT);
digitalWrite(swPin, LOW);

Serial.begin(115200); // тут поставьте свою скорость
Serial.println("Came started");

// следующие 2 строчки включают перехватчик. если планируется только отправка их можно закоментить
attachInterrupt(0, grab, CHANGE); // обратите внимание на первый параметр - если у вас другая ардуина, он может быть не 1, а 0! 0 для arduino uno.
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;
}
}
{code}

Так как в этом деле новичок, еще не разобрался почему так. Буду рад любой помощи.
1101 вне форума   Ответить с цитированием
Старый 18.05.2017, 11:26   #12
1101 Меню Пользователя
Гость клуба
 
Регистрация: 12.04.2017
Сообщений: 2
По умолчанию Re: Граббер came

День добрый!
У меня на скече ТС тоже ничего не заработало. Коды кнопок с брелка CAME TOP 432 не приходят в монитор порта. Хотя если генератор кодов работает, то они доходят. Коды с брелка получил вот с этим скечем
{code}
#define txPin 8 //пин передатчика
#define swPin 5 //пин включения приемника
#define rxPin 2 //пин приемника

void setup()
{
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
// всегда устанавливаем пин включения приемника в 0 и не трогаем его больше
pinMode(swPin, OUTPUT);
digitalWrite(swPin, LOW);

Serial.begin(115200); // тут поставьте свою скорость
Serial.println("Came started");

// следующие 2 строчки включают перехватчик. если планируется только отправка их можно закоментить
attachInterrupt(0, grab, CHANGE); // обратите внимание на первый параметр - если у вас другая ардуина, он может быть не 1, а 0! 0 для arduino uno.
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;
}
}
{code}
1101 вне форума   Ответить с цитированием
Старый 19.05.2017, 04:13   #13
andynvkz Меню Пользователя
Резидент клуба
 
Регистрация: 03.11.2011
Сообщений: 734
По умолчанию Re: Граббер came

решил тоже такое замутить, использую DUE c CC1101, так как с ардуино не имел дело, то параллельно изучаю его
Вложения
Тип файла: rar Arduino_CC.rar (1.4 Кб, 9 просмотров)
andynvkz вне форума   Ответить с цитированием
Старый Вчера, 14:47   #14
andynvkz Меню Пользователя
Резидент клуба
 
Регистрация: 03.11.2011
Сообщений: 734
По умолчанию Re: Граббер came

может кто на пальцах объяснить как это работает ?

state = digitalRead(cc_gd2);
if (state == HIGH)
lolen = micros() - prevtime;
else
hilen = micros() - prevtime;
prevtime = micros();

Добавлено через 1 минуту
считываем уровень с пина и если он высокий....???

Добавлено через 1 минуту
может кто поделится приемом статики, а то я не силен в Си
andynvkz вне форума   Ответить с цитированием
Старый Вчера, 16:28   #15
shooter Меню Пользователя
Вступил в клуб
 
Аватар для shooter
 
Регистрация: 05.04.2014
Сообщений: 93
По умолчанию Re: Граббер came

Здесь есть http://skproj.ru/otkryt-shlagbaum-came/
shooter вне форума   Ответить с цитированием
Старый Вчера, 16:36   #16
russo_turisto Меню Пользователя
Модератор
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,161
По умолчанию Re: Граббер came

Если уровень высокий, значит был низкий и пишем длительность низкого уровня, иначе пишем длительность высокого уровня

http://phreakerclub.com/forum/showth...82%D0%BE%D1%80
http://phreakerclub.com/forum/showth...82%D0%BE%D1%80
http://phreakerclub.com/forum/showth...82%D0%BE%D1%80
russo_turisto вне форума   Ответить с цитированием
Старый Вчера, 18:11   #17
andynvkz Меню Пользователя
Резидент клуба
 
Регистрация: 03.11.2011
Сообщений: 734
По умолчанию Re: Граббер came

Цитата:
Сообщение от russo_turisto
Если уровень высокий, значит был низкий и пишем длительность низкого уровня, иначе пишем длительность высокого уровня

http://phreakerclub.com/forum/showth...82%D0%BE%D1%80
http://phreakerclub.com/forum/showth...82%D0%BE%D1%80
http://phreakerclub.com/forum/showth...82%D0%BE%D1%80

это я понял, не понял как он счетает

Добавлено через 6 минут
hilen = micros() - prevtime;

Добавлено через 1 минуту
hilen присваевается значения micros() от которого отнимаем prevtime

Добавлено через 1 минуту
prevtime вообще пустая переменная

Добавлено через 2 минуты
в идеале бы в отладчике глянуть как этот момент работает
andynvkz вне форума   Ответить с цитированием
Старый Вчера, 19:20   #18
russo_turisto Меню Пользователя
Модератор
 
Аватар для russo_turisto
 
Регистрация: 21.08.2011
Сообщений: 1,161
По умолчанию Re: Граббер came

http://arduino.ru/Reference/Micros

PHP код:
void grab() {
state digitalRead(rxPin);
if (
state == HIGH)
lolen micros() - prevtime;
else
hilen micros() - prevtime;
prevtime micros();  //------------------------вот--------------- prevtime 
russo_turisto вне форума   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 21:31. Часовой пояс GMT +3.


vBulletin 4.1.0 Перевод: zCarot
(C) www.phreakerclub.com
Яндекс.Метрика