![]() |
![]() |
#11 |
Член клуба
Регистрация: 12.10.2017
Сообщений: 173
|
![]()
вот тебе нормальный приём
#define RX 2 #define swPin 5 Keeloq k(0xhigh,0xlow); <-- MAN volatile byte level=255; volatile unsigned long last, len; byte p_level, fbutt, decbutt; unsigned long p_len, p_len_prev, hdec, hop; boolean dec_valid = false; struct { byte state; unsigned long TE; byte pre_count, data[8], dat_bit; } keeloq; void setbit(byte *data, byte n) { data[n/8]|=1<<(n%8); } byte florsstate = 0; byte i = 0; // count of bits stored byte nicereceive[52]; #define KL_MIN_PRE_COUNT 4 #define KL_MAX_TE 500 #define KL_MIN_TE 300 #define KL_MAX_BITS 64 void process_keeloq() { switch(keeloq.state) { case 0: if(p_level) break; keeloq.state=1; keeloq.pre_count=0; break; case 1: //pre+hdr if(p_len>=KL_MIN_TE && p_len<=KL_MAX_TE) keeloq.pre_count++; else if(!p_level && p_len>=KL_MIN_TE*10 && p_len<=KL_MAX_TE*10 && keeloq.pre_count>=KL_MIN_PRE_COUNT) { keeloq.TE=p_len/10; keeloq.state=2; keeloq.dat_bit=0; keeloq.data[0]=0x00; keeloq.data[1]=0x00; keeloq.data[2]=0x00; keeloq.data[3]=0x00; keeloq.data[4]=0x00; keeloq.data[5]=0x00; keeloq.data[6]=0x00; keeloq.data[7]=0x00; dec_valid = false; } else { keeloq.state=0; break; } break; case 2: //dat if(!p_level) break; if(p_len<keeloq.TE/2 || p_len>keeloq.TE*3) { keeloq.state=0; break; } if(p_len<=keeloq.TE+keeloq.TE/2) setbit(keeloq.data, keeloq.dat_bit); if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=100; break; } } void dump_hex(byte *buf, byte bits) { byte a; if (dec_valid) Serial.print("KEELOQ_DECRYPT: "); else Serial.print("KEELOQ: "); for(a=0; a<(bits+7)/8; a++) { if(buf[a]<=0x0f) Serial.print('0'); Serial.print(buf[a], HEX); Serial.print(" "); } Serial.println(""); } void rx_int() { if(level!=255) return; len=micros()-last; last=micros(); if(digitalRead(RX)==HIGH) level=0; else level=1; } void setup() { pinMode(swPin, OUTPUT); digitalWrite(swPin, HIGH); attachInterrupt(0, rx_int, CHANGE); Serial.begin(115200); while(!Serial); Serial.println("LOGGER START"); Serial.println(""); interrupts(); } byte a; void loop() { if(level!=255) { noInterrupts(); p_level=level; p_len=len; len=0; level=255; interrupts(); process_keeloq(); p_len_prev=p_len; } if(keeloq.state==100) { hop =keeloq.data[3]; hop<<=8; hop+=keeloq.data[2]; hop<<=8; hop+=keeloq.data[1]; hop<<=8; hop+=keeloq.data[0]; hdec = k.decrypt(hop); keeloq.data[3]=hdec; hdec>>=8; keeloq.data[2]=hdec; hdec>>=8; keeloq.data[1]=hdec; hdec>>=8; keeloq.data[0]=hdec; decbutt=keeloq.data[0]; decbutt>>=4; fbutt=keeloq.data[7]; fbutt>>=4; if((fbutt == decbutt) && (keeloq.data[1] == keeloq.data[4])) dec_valid = true; dump_hex(keeloq.data, 64); keeloq.state=0; } } Добавлено через 2 минуты а это отправка пакета #define TX 8 #include <Keeloq.h> Keeloq k(0xhigh,low); <-- MAN byte CODE[8]; byte TCODE[8]; byte Buffer_Fix[4] = {0x0E, 0x00, 0x07, 0x20}; byte S1, S2 ; unsigned long henc, hop ; void setup() { Serial.begin(115200); Serial.println("KEELOQ SEND:"); pinMode(TX, OUTPUT); CODE[0]=0; CODE[1]=0; CODE[2]=0; CODE[3]=0; CODE[4]=0; CODE[5]=0; CODE[6]=0; CODE[7]=0; hop=0; henc=0; S1 = 0x0; S2 = 0x0; } void loop() { hop = Buffer_Fix[3] ; hop<<=8; hop+= Buffer_Fix[0] ; hop<<=8; hop+= S1 ; hop<<=8; hop+= S2 ; if (S2 == 255) {S2 = 0;S1++;} else S2++; Serial.print (hop ,HEX); Serial.println(""); henc = k.encrypt(hop); Serial.print (henc ,HEX); Serial.println(""); CODE[0]=henc; henc>>=8; CODE[1]=henc; henc>>=8; CODE[2]=henc; henc>>=8; CODE[3]=henc; CODE[4] = Buffer_Fix[0]; CODE[5] = Buffer_Fix[1]; CODE[6] = Buffer_Fix[2]; CODE[7] = Buffer_Fix[3]; for (int i=0; i<6; i++) { SendKeeloq(CODE); } Serial.print(">>> "); dump_hex(CODE, 64); Serial.println(""); CODE[0]=0; CODE[1]=0; CODE[2]=0; CODE[3]=0; CODE[4]=0; CODE[5]=0; CODE[6]=0; CODE[7]=0; hop=0; henc=0; delay(5000); } void SendMeander(unsigned int meanderLen) { digitalWrite(TX, HIGH); delayMicroseconds(meanderLen); digitalWrite(TX, LOW); delayMicroseconds(meanderLen); } // Keeloq ---------------------------------------------- void SendKeeloqPreambula() { for (byte i=0; i<11; i++) SendMeander(400); } void SendKeeloq(unsigned char *TCODE) { signed char a; SendKeeloqPreambula(); digitalWrite(TX, HIGH); delayMicroseconds(400); digitalWrite(TX, LOW); delayMicroseconds(10*400); for(a=0; a<66; a++) { digitalWrite(TX, HIGH); delayMicroseconds(400); if(TCODE[a/8]&(1<<(a%8))) digitalWrite(TX, LOW); delayMicroseconds(400); digitalWrite(TX, LOW); delayMicroseconds(400); } delay(16); } void dump_hex(byte *buf, byte bits) { byte a; for(a=0; a<(bits+7)/8; a++) { if(buf[a]<=0x0f) Serial.print('0'); Serial.print(buf[a], HEX); } Serial.println(""); } //--------------------------------------------------------- |
![]() |
![]() |
![]() |
#12 |
Вступил в клуб
Регистрация: 13.02.2020
Сообщений: 10
|
![]()
Здравствуйте, уважаемые форумчане! Благодарю за ваши ответы. У меня не получается считать код от шлагбаума. Товарищ heat, спасибо за Ваш код, но у меня брелок от шлагбаума не записывается с вашей программой. У меня есть приемник и передатчик, купленные с Алиэкспресс. Приемник и передатчик обмениваются между собой посылками, код проходит. Но приемник не хочет принимать код от брелка.
Вместе с Ардуино использую вот такие радиомодули: ![]() В программу приемника добавлен мной код, чтобы при принятии сигнала была вибрация. Также есть запоминание в EEPROM память принимаемого слова. Также есть вывод на дисплей принимаемого слова. #define RX 2 //подключен радиоприемник #include <PCD8544.h> //библиотека для LCD дисплея #include <avr/eeprom.h> #include <Keeloq.h> static PCD8544 lcd; static unsigned long counter=1, t=1, s=1; int j=0, z=0; volatile static long code1 = 0; byte t0,t1,t2,t3,t4,t5,t6,t7; const int motor_pin = 8; //вибромоторчик long interval = 500; // интервал между включение/выключение вибромотора (0,5 секунд) long previousMillis = 0; Keeloq k('0xhigh','0xlow'); //<-- MAN volatile byte level=255; volatile unsigned long last, len; byte p_level, fbutt, decbutt; unsigned long p_len, p_len_prev, hdec, hop; boolean dec_valid = false; struct { byte state; unsigned long TE; byte pre_count, data[8], dat_bit; } keeloq; void setbit(byte *data, byte n) { data[n/8]|=1<<(n%8); } byte florsstate = 0; byte i = 0; // count of bits stored byte nicereceive[52]; #define KL_MIN_PRE_COUNT 4 #define KL_MAX_TE 500 #define KL_MIN_TE 300 #define KL_MAX_BITS 64 void process_keeloq() { switch(keeloq.state) { case 0: if(p_level) break; keeloq.state=1; keeloq.pre_count=0; break; case 1: //pre+hdr if(p_len>=KL_MIN_TE && p_len<=KL_MAX_TE) keeloq.pre_count++; else if(!p_level && p_len>=KL_MIN_TE*10 && p_len<=KL_MAX_TE*10 && keeloq.pre_count>=KL_MIN_PRE_COUNT) { keeloq.TE=p_len/10; keeloq.state=2; keeloq.dat_bit=0; keeloq.data[0]=0x00; keeloq.data[1]=0x00; keeloq.data[2]=0x00; keeloq.data[3]=0x00; keeloq.data[4]=0x00; keeloq.data[5]=0x00; keeloq.data[6]=0x00; keeloq.data[7]=0x00; dec_valid = false; } else { keeloq.state=0; break; } break; case 2: //dat if(!p_level) break; if(p_len<keeloq.TE/2 || p_len>keeloq.TE*3) { keeloq.state=0; break; } if(p_len<=keeloq.TE+keeloq.TE/2) setbit(keeloq.data, keeloq.dat_bit); if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=100; break; } } void dump_hex(byte *buf, byte bits) { byte a; if (dec_valid) Serial.print("KEELOQ_DECRYPT: "); else Serial.print("KEELOQ: "); for(a=0; a<(bits+7)/8; a++) { if(buf[a]<=0x0f) Serial.print('0'); Serial.print(buf[a], HEX); Serial.print(" "); } Serial.println(""); } void rx_int() { if(level!=255) return; len=micros()-last; last=micros(); if(digitalRead(RX)==HIGH) level=0; else level=1; } void setup() { attachInterrupt(0, rx_int, CHANGE); pinMode(motor_pin, OUTPUT); Serial.begin(9600); while(!Serial); Serial.println("Кто молодец? Я молодец!"); Serial.println(""); interrupts(); lcd.begin(84,48); lcd.setCursor(0,0); lcd.print(" Reciever "); lcd.print(" is ready! "); //Вывод в монитор порта содержимого EEPROM-памяти while (j<=1016) { Serial.print(t); Serial.print(") "); Serial.print(eeprom_read_byte(j+3), HEX); Serial.print(eeprom_read_byte(j+2), HEX); Serial.print(eeprom_read_byte(j+1), HEX); Serial.print(eeprom_read_byte(j), HEX); Serial.print(" "); Serial.print(eeprom_read_byte(j+7), HEX); Serial.print(eeprom_read_byte(j+6), HEX); Serial.print(eeprom_read_byte(j+5), HEX); Serial.println(eeprom_read_byte(j+4), HEX); j=j+8; t++; } } byte a; void loop() { unsigned long currentMillis = millis(); if (s==2) { digitalWrite(motor_pin, HIGH); s=1; previousMillis=millis(); } if(currentMillis - previousMillis > interval) { digitalWrite(motor_pin, LOW); } if(level!=255) { noInterrupts(); p_level=level; p_len=len; len=0; level=255; interrupts(); process_keeloq(); p_len_prev=p_len; } if(keeloq.state==100) { hop =keeloq.data[3]; hop<<=8; hop+=keeloq.data[2]; hop<<=8; hop+=keeloq.data[1]; hop<<=8; hop+=keeloq.data[0]; hdec = k.decrypt(hop); keeloq.data[3]=hdec; hdec>>=8; keeloq.data[2]=hdec; hdec>>=8; keeloq.data[1]=hdec; hdec>>=8; keeloq.data[0]=hdec; decbutt=keeloq.data[0]; decbutt>>=4; fbutt=keeloq.data[7]; fbutt>>=4; if((fbutt == decbutt) && (keeloq.data[1] == keeloq.data[4])) dec_valid = true; dump_hex(keeloq.data, 64); keeloq.state=0; //Вывод на дисплей lcd.setCursor(0, 2); lcd.print(counter); t0=keeloq.data[0]; t1=keeloq.data[1]; t2=keeloq.data[2]; t3=keeloq.data[3]; t4=keeloq.data[4]; t5=keeloq.data[5]; t6=keeloq.data[6]; t7=keeloq.data[7]; lcd.setCursor(0, 3); lcd.print(t0, HEX); lcd.setCursor(14, 3); lcd.print(t1, HEX); lcd.setCursor(28, 3); lcd.print(t2, HEX); lcd.setCursor(42, 3); lcd.print(t3, HEX); lcd.setCursor(0, 4); lcd.print(t4, HEX); lcd.setCursor(14, 4); lcd.print(t5, HEX); lcd.setCursor(28, 4); lcd.print(t6, HEX); lcd.setCursor(42, 4); lcd.print(t7, HEX); //запись перехваченного ключа в EEPROM eeprom_write_byte(z, t3); eeprom_write_byte(z+1, t2); eeprom_write_byte(z+2, t1); eeprom_write_byte(z+3, t0); eeprom_write_byte(z+4, t7); eeprom_write_byte(z+5, t6); eeprom_write_byte(z+6, t5); eeprom_write_byte(z+7, t4); z=z+8; counter++; s=2; } } Добавлено через 4 минуты Вот так все выглядит. Код на дисплее на фото левый (не обращайте внимания на это). ![]() |
![]() |
![]() |
![]() |
#13 |
Член клуба
Регистрация: 12.10.2017
Сообщений: 173
|
![]()
1. большинство этих дешевых приемников безобразного качества.
2. самый нормальный прием на cc1101 . при правильных настройках в городе метров 300 без проблем 3. возьми нормальный дисплей oled который по i2c подключается - маленькие чернобелые на али продаются клоны адафрут . те что на фото я просто выкинул . 4. громоздкие конструкции в боевом режиме не особо . Добавлено через 2 минуты не пиши пакеты в еепром постоянно сдохнет проц . там не так много циклов . |
![]() |
![]() |
![]() |
#14 |
Вступил в клуб
Регистрация: 13.02.2020
Сообщений: 10
|
![]()
heat, подскажите пожалуйста. Я правильно понимаю Вас, что из моей конструкции можно будет просто выкинуть радиоприемник с Алиэкспресс и воткнуть приемник cc1101? Ничего менять в электрической схеме не нужно или в программе?
|
![]() |
![]() |
![]() |
#15 | |||||||||||||||||||||||
Член клуба
Регистрация: 12.10.2017
Сообщений: 173
|
![]()
не правильно . cc1101 серьезный инструмент ему нужен конфиг и подключается он по spi шине . качать smart rf studio изучать как вливается конфиг и смотреть примеры . у сс1101 есть команды управления . инициализация , сброс , приём , передача , обновление конфига . читать про все это . просто так cc1101 не уставновить ну вот например приём на cc1101 Код:
#include <SPI.h> #define CC_CS 10 #define CC_RX 2 //GDO2 #define CC_TX 3 //GDO0 #define SRES 0x30 #define SCAL 0x33 #define SRX 0x34 #define STX 0x35 #define SIDLE 0x36 #define SPWD 0x39 #define IOCFG2 0x00 #define IOCFG1 0x01 #define IOCFG0 0x02 #define FIFOTHR 0x03 #define SYNC1 0x04 #define SYNC0 0x05 #define PKTLEN 0x06 #define PKTCTRL1 0x07 #define PKTCTRL0 0x08 #define ADDR 0x09 #define CHANNR 0x0A #define FSCTRL1 0x0B #define FSCTRL0 0x0C #define FREQ2 0x0D #define FREQ1 0x0E #define FREQ0 0x0F #define MDMCFG4 0x10 #define MDMCFG3 0x11 #define MDMCFG2 0x12 #define MDMCFG1 0x13 #define MDMCFG0 0x14 #define DEVIATN 0x15 #define MCSM2 0x16 #define MCSM1 0x17 #define MCSM0 0x18 #define FOCCFG 0x19 #define BSCFG 0x1A #define AGCTRL2 0x1B #define AGCTRL1 0x1C #define AGCTRL0 0x1D #define WOREVT1 0x1E #define WOREVT0 0x1F #define WORCTRL 0x20 #define FREND1 0x21 #define FREND0 0x22 #define FSCAL3 0x23 #define FSCAL2 0x24 #define FSCAL1 0x25 #define FSCAL0 0x26 #define RCCTRL1 0x27 #define RCCTRL0 0x28 #define FSTEST 0x29 #define PTEST 0x2A #define AGCTEST 0x2B #define TEST2 0x2C #define TEST1 0x2D #define TEST0 0x2E #define PATABLE 0x3E const byte cc_config[] PROGMEM= { IOCFG0, 0b00000000, IOCFG2, 0b00001101, FIFOTHR, 0b01000111, PKTCTRL0,0b00110010, FSCTRL1, 0x06, FSCTRL0, 0x00, FREQ2, 0x10, FREQ1, 0xB0, FREQ0, 0x71, MDMCFG4, 0x16, MDMCFG3, 0xe4, MDMCFG2, 0b00110000, MDMCFG1, 0x22, MDMCFG0, 0xF8, MCSM2, 0x07, MCSM1, 0x30, MCSM0, 0x18, AGCTRL2, 0b00000100, AGCTRL1, 0x00, AGCTRL0, 0b00010000, FREND1, 0xB6, FREND0, 0b00010001, FSCAL3, 0xE9, FSCAL2, 0x2A, FSCAL1, 0x00, FSCAL0, 0x1F, TEST2, 0x81, TEST1, 0x35, TEST0, 0x09, PATABLE, 0x00, PATABLE, 0xc0, PATABLE, 0x00, PATABLE, 0x00, PATABLE, 0x00, PATABLE, 0x00, PATABLE, 0x00, PATABLE, 0x00 }; volatile byte level=255; volatile unsigned long last, len; byte p_level; unsigned long p_len, p_len_prev; struct { byte state; unsigned long TE; byte pre_count, data[8], dat_bit; } keeloq; struct { byte state; byte pre_count, data[8], dat_bit; } starline; void cc1101_strobe(byte s) { digitalWrite(CC_CS, LOW); delay(1); SPI.transfer(s); digitalWrite(CC_CS, HIGH); } void cc1101_init() { byte a; cc1101_strobe(SRES); delay(10); digitalWrite(CC_CS, LOW); for(a=0; a<sizeof(cc_config); a++) SPI.transfer(pgm_read_byte(cc_config+a)); digitalWrite(CC_CS, HIGH); } void rtx_rx() { cc1101_strobe(SIDLE); cc1101_strobe(SRX); } void rtx_tx() { cc1101_strobe(SIDLE); cc1101_strobe(STX); } void setbit(byte *data, byte n) { data[n/8]|=1<<(n%8); } #define KL_MIN_PRE_COUNT 4 #define KL_MAX_TE 500 #define KL_MIN_TE 300 #define KL_MAX_BITS 64 void process_keeloq() { switch(keeloq.state) { case 0: if(p_level) break; keeloq.state=1; keeloq.pre_count=0; break; case 1: //pre+hdr if(p_len>=KL_MIN_TE && p_len<=KL_MAX_TE) keeloq.pre_count++; else if(!p_level && p_len>=KL_MIN_TE*10 && p_len<=KL_MAX_TE*10 && keeloq.pre_count>=KL_MIN_PRE_COUNT) { keeloq.TE=p_len/10; keeloq.state=2; keeloq.dat_bit=0; keeloq.data[0]=0x00; keeloq.data[1]=0x00; keeloq.data[2]=0x00; keeloq.data[3]=0x00; keeloq.data[4]=0x00; keeloq.data[5]=0x00; keeloq.data[6]=0x00; keeloq.data[7]=0x00; } else { keeloq.state=0; break; } break; case 2: //dat if(!p_level) break; if(p_len<keeloq.TE/2 || p_len>keeloq.TE*3) { keeloq.state=0; break; } if(p_len<=keeloq.TE+keeloq.TE/2) setbit(keeloq.data, keeloq.dat_bit); if(++keeloq.dat_bit==KL_MAX_BITS) keeloq.state=100; break; } } #define SL_MIN_PRE_COUNT 4 #define SL_MAX_PRE 1200 #define SL_MIN_PRE 800 #define SL_MAX_ZERO 350 #define SL_MIN_ZERO 100 #define SL_MAX_ONE 700 #define SL_MIN_ONE 400 #define SL_MIN_BITS 16 #define SL_MAX_BITS 64 void process_starline() { byte b; switch(starline.state) { case 0: if(p_level) break; starline.state=1; starline.pre_count=0; break; case 1: //pre if(p_len>=SL_MIN_PRE && p_len<=SL_MAX_PRE) starline.pre_count++; else if(p_len<SL_MIN_PRE && starline.pre_count>=SL_MIN_PRE_COUNT) { starline.state=2; starline.dat_bit=0; starline.data[0]=0x00; starline.data[1]=0x00; starline.data[2]=0x00; starline.data[3]=0x00; starline.data[4]=0x00; starline.data[5]=0x00; starline.data[6]=0x00; starline.data[7]=0x00; } else { starline.state=0; break; } break; case 2: //dat if(p_level) break; if(p_len_prev>=SL_MIN_ONE && p_len_prev<=SL_MAX_ONE/* && p_len>=SL_MIN_ONE && p_len<=SL_MAX_ONE*/) b=1; else if(p_len_prev>=SL_MIN_ZERO && p_len_prev<=SL_MAX_ZERO/* && p_len>=SL_MIN_ZERO && p_len<=SL_MAX_ZERO*/) b=0; else { if(starline.dat_bit>=SL_MIN_BITS) starline.state=100; else starline.state=0; break; } if(b) setbit(starline.data, starline.dat_bit); if(++starline.dat_bit==SL_MAX_BITS) starline.state=100; break; } } void dump_hex(byte *buf, byte bits) { byte a; for(a=0; a<(bits+7)/8; a++) { if(buf[a]<=0x0f) Serial.print('0'); Serial.print(buf[a], HEX); Serial.print(" "); } Serial.println(""); } void rx_int() { if(level!=255) return; len=micros()-last; last=micros(); if(digitalRead(CC_RX)==HIGH) level=0; else level=1; } void setup() { pinMode(CC_RX, INPUT); pinMode(CC_CS, OUTPUT); digitalWrite(CC_CS, HIGH); attachInterrupt(0, rx_int, CHANGE); Serial.begin(115200); while(!Serial); Serial.println("MEGA OVERFUCK ARDUINO LOGGER BY HUY FOR NARKOMANS"); Serial.println(""); SPI.begin(); cc1101_init(); rtx_rx(); interrupts(); } void loop() { if(level!=255) { p_level=level; p_len=len; len=0; level=255; process_keeloq(); process_starline(); p_len_prev=p_len; } if(keeloq.state==100) { Serial.print("KEELOQ: "); dump_hex(keeloq.data, 64); keeloq.state=0; } if(starline.state==100) { Serial.print("STARLINE["); Serial.print(starline.dat_bit); Serial.print("]: "); dump_hex(starline.data, starline.dat_bit); starline.state=0; } } Последний раз редактировалось DIVER_SANT; 27.02.2020 в 08:19. |
|||||||||||||||||||||||
![]() |
![]() |
![]() |
#16 |
Вступил в клуб
Регистрация: 13.02.2020
Сообщений: 10
|
![]()
heat, шлагбаумы Doorhan бывают же на 868 МГц ? Я думаю, может мой шлагбаум на этой частоте работает? Тогда закажу по интернету сразу модули cc1101 на 433 МГц и на 868 МГц сразу, чтобы время не терять.
|
![]() |
![]() |
![]() |
#17 |
Гость клуба
Регистрация: 18.11.2019
Сообщений: 4
|
![]()
Не все Китайские приемники хреновые. Из разных опробованных мной, худший результат показали SYN480R и WL101-341. Лучшим оказался RXD8. Когда ему ещё по входу цепляешь ПАВ, вообще супер.
|
![]() |
![]() |
![]() |
#18 |
Член клуба
Регистрация: 12.10.2017
Сообщений: 173
|
![]()
1 . нет , не бывают
2. CC1101 универсальный мультичастотный приёмник - передатчик умеющий даже логически обрабатывать сигнал в цифру в некоторых режимах . в примере строб трансмит строб приём есть . загрузка конфига на частоту 433 . в конфиге примерно так - строб инициализация , загрузка конфига. строб прием . конфигурация 433 частота настроить ноги на прозрачный приём - т .е. что принимаем то отправляем на ноги . без логического анализа . читай ветку cc1101 . это не просто приёмник передатчик с выводами + - data Последний раз редактировалось heat; 26.02.2020 в 20:03. |
![]() |
![]() |
![]() |
#19 | |||||||||||||||||||
Гость клуба
Регистрация: 12.02.2020
Сообщений: 6
|
![]()
О, я думал тема уже умерла на совсем
![]() Я на этом форуме многое нашел, даже кусок мануфака рабочего от DoorHan, остальное домыслил, минут 15 ушло на core i5. В коде я его убрал, вроде как моветон. Выкладываю полностью рабочий код для приема и передачи подобных DoorHan систем с шифрованием и дешифрованием (). Для работы нужен приемник, передатчик и ардуинка, ну и естесна мануфак.
Добавлено через 10 минут И да, писатель я еще тот, но работает хорошо. Перед тем ка выложить проверил. Мануфактурник в коде должен быть как то так, начало и конец 0x84хххххххххххх23 Просто на форуме он както в обратную сторону был. |
|||||||||||||||||||
![]() |
![]() |
![]() |
#20 | |||||||||||||||||||||||
Член клуба
Регистрация: 08.09.2011
Сообщений: 340
|
![]()
6 байт из 8 подобрал перебором на i5 за 15 мин? |
|||||||||||||||||||||||
![]() |
![]() |