на репозитории автора библиотеки лежит такой скетч для считывания семлов
#define SAMPLESIZE 500
static unsigned int timings[SAMPLESIZE];
static unsigned int pos = 0;
static unsigned long lastTime = 0;
static int receiverPin = 2;
static int interruptPin = 0;
void setup() {
interruptPin = digitalPinToInterrupt(receiverPin);
Serial.begin(9600);
attachInterrupt(interruptPin, handleInterrupt, CHANGE);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
}
void loop() {
for (int i = 5; i>0; i--) {
Serial.print(i);
Serial.print("... ");
delay(900);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
}
Serial.println();
detachInterrupt(interruptPin);
int finalstate = digitalRead(receiverPin);
char s = Serial.read();
for (unsigned int i = pos + finalstate; i< SAMPLESIZE; i++) {
Serial.print( timings[i] );
Serial.print(",");
}
for (unsigned int i = 0; i < pos; i++) {
Serial.print( timings[i] );
Serial.print(",");
}
Serial.println("");
Serial.println("Reset your Arduino to scan again...");
while(true) {}
}
void handleInterrupt() {
const long time = micros();
timings[pos] = time - lastTime;
lastTime = time;
if (++pos > SAMPLESIZE-1) {
pos = 0;
}
}
только он работает по принципу - после загрузки скетча, открываем монитор порта и жмем резет на дуне , а после того как загорится светодиод 13 пина или блинк - грузим в дуню семпл кода. смотрим че выдаст монитор порта... он нам ничего практически не даст, но теоретически можно попробовать...
сегодня допилю скетч, имитирующий код твоего пульта. уже почти готов. осталось вывернуть биты от старших к младшим. дальше думаю быстро сорентируюсь.
пока правда занят по дому. подожди до завтра.
ок..?
int send_code_pin = 10;
int send_code = 12691303; // этот код пока не правельный
void setup()
{
pinMode(send_code_pin, OUTPUT);
}
void loop ()
{
// for (int send_code = 0; send_code < 4096; send_code++) // этот цикл после того как код определен необходимо убрать
{
for (int j = 0; j <4; j++) // достаточно 4-х
{
digitalWrite(send_code_pin, HIGH); // стартовый импульс
delayMicroseconds(310);
digitalWrite(send_code_pin, LOW);
for (int i = 24; i > 0; i--)
{
boolean bit_code = bitRead(send_code, i - 1);
if (bit_code)
{
digitalWrite(send_code_pin, LOW); // единица
delayMicroseconds(620);
digitalWrite(send_code_pin, HIGH);
delayMicroseconds(310);
}
else
{
digitalWrite(send_code_pin, LOW); // ноль
delayMicroseconds(310);
digitalWrite(send_code_pin, HIGH);
delayMicroseconds(620);
}
}
digitalWrite(send_code_pin, LOW); // пилотный период
delayMicroseconds(16000);
}
}
//delay(10000); после определения кода поставить задержку
}
#define txPin 2
#define Te 320
void setup(){
pinMode(txPin, OUTPUT);
}
void loop()
{
SendCame(0b110000011010011100100111);
}
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 с
}
вот так приемник видит мой код без последнего бита (код came 24 бита а мой 25). изменение переменной #define CM_BITS24 24 на 25 результата естественно не дает. что же ему надо
получается десятичный трехзначный код но и прилетают чужие даже четырехзначные. вот теперь когда я могу управлять с пульта светодиодом встала задача запихнуть этот код в attiny13. насколько это реально? (Serial не нужен)
По поводу библиотеки в вопросах и ответах нужно читать на репозитарии, где находится сама библиотека. Только там все на буржуйском. У меня сейчас инет мобильный тупит ужасно.
правленую библиотеку скопировали в папку с библиотками для IDE
у меня она тут c:\Program Files (x86)\arduino-1.6.8\libraries\
я скачивал по вашей ссылке выше. у меня она тут c:\Users\PC\Documents\Arduino\libraries\rc_switch-2.6.2\ и правлю там же сохраняя
скорость сериала порта в мониторе поставить 9600 согласно скетча не забудь
а другой библы rc_switch там нет ?
после правки библиотеки перезапустить IDE
вот что у меня сейчас на второй ноге ардуино
это все само собой разумеющееся. я честно говоря сам худею с этого пульта
я даже специально при редактировании делал ошибку и компилятор ардуино ругался
еще раз вычесляем
40 милисекунд 24 код и где-то 15+1 тактов синхр в нуле == 40
но скважность между 1 и 0 два к одному, то есть тактов в полтора разабольше == 60
40мс/ 60 тактов == 667 мкс - время
но и тактов синхронизации в 0 в полтора больше значит 23+1
{ 667, { 23, 1 }, { 1, 2}, { 2, 1 }, true }, // protocol 1
плохо видно картинку и не поиграешся, лучше скинь файлформата программы Samples [1].logicdata
1
{ 667, { 1, 23 }, { 2, 1}, { 1, 2 },
false
},
// protocol 1
сорь, выше инверсию включил, нужно без нее
исправил с 3 раза - пора спать....
лог файл
http://my-files.ru/4ig81m
{ 330, { 49, 1 }, { 1, 2}, { 2, 1 }, false }, // protocol 1 // 48, 2 // 49, 2
{ 330, { 1, 49 }, { 2, 1}, { 1, 2 }, false }, // protocol 1 // 2, 48// 2, 49
опять 25 - тут верно, блокнот не закрыл и опять с него инверсию выдал...
к сожалению...
использую данный скетч
не выводит ничего...
я там ошибся (((
в сообщении над твоим код правильный
что бы исключить какие либо ошибки я подключил читающийся пульт таким же методом без радиоканала и вот что выдает скетч выше-
2, 48 попробуй
дай с него файл Samples [1].logicdata
http://my-files.ru/5xnwce читаемый пульт
2, 48 попробуй
тишина
{ 320, { 1, 16 }, { 1, 1 }, { 2, 1 }, false }, // protocol 1 // 16 ->17->18
{ 300, { 1, 17 }, { 1, 1 }, { 2, 1 }, false }, // protocol 1 // 17 -> 18
попробуй еще это, как раньше
на репозитории автора библиотеки лежит такой скетч для считывания семлов
только он работает по принципу - после загрузки скетча, открываем монитор порта и жмем резет на дуне , а после того как загорится светодиод 13 пина или блинк - грузим в дуню семпл кода. смотрим че выдаст монитор порта... он нам ничего практически не даст, но теоретически можно попробовать...
первые два ничего
сегодня допилю скетч, имитирующий код твоего пульта. уже почти готов. осталось вывернуть биты от старших к младшим. дальше думаю быстро сорентируюсь.
пока правда занят по дому. подожди до завтра.
ок..?
сегодня допилю скетч, имитирующий код твоего пульта. уже почти готов. осталось вывернуть биты от старших к младшим. дальше думаю быстро сорентируюсь.
пока правда занят по дому. подожди до завтра.
ок..?
вот скетч имитирующий работу моего пульта. я его давно проверял. могу сегодня еще проверить вечером
delay(16); - не корректно, нужно менять на формат
delayMicroseconds(Te* xx); где xx количество тактов
с этим кодом и выехал и заехал. все как с пульта.
не оставляю надежды считать долбаный пульт.
нашел вот такой код приемника -
и код передатчика-
Да не парся . Так и нужно. 1 высокий импульс для синхронизации. Код 24 битовый. Я застрял на даче .тут инет тупой.
наконец то. нашел вот такой код-
и вот результат
обе кнопки пульта
правильно все же вот так-
В папке C:\Users\ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\Temp\ после компиляции скетча создается hex файл для прошивки контроллера .
Только я не знаю. Подойдет ли по архитектуре...?
В папке C:\Users\ВАШЕ_ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\Temp\ после компиляции скетча создается hex файл для прошивки контроллера .
Только я не знаю. Подойдет ли по архитектуре...?
не не. так не подойдет конечно. я сейчас в соседней теме пытаюсь разобраться с прерываниями. что думаете по поводу неработы библиотеки ?
По поводу библиотеки в вопросах и ответах нужно читать на репозитарии, где находится сама библиотека. Только там все на буржуйском. У меня сейчас инет мобильный тупит ужасно.
https://github.com/sui77/rc-switch/wiki
приехал домой. если так важно - рабочий протокол для библиотеки RCSwitch
результат другие даные, потому что включена инверсия в приемнике дешифраторе
DEC 8605263 = BIN 100000110100111001001111,
то есть импулс синхр. = 50 low +2 high дальше 24 битный код
да. работает код.