Помогите в совместимости библиотек irremote и tlc5940
- Войдите на сайт для отправки комментариев
Суть в чем при инициализации обоих библиотек ардуина ни на что не реагирует, проблема в использовании одного второго таймера, это и подтвердило гугление и аналогичные проблемы с использованием tone.
Использовал два вида библиотек для пульта: IRremote и судя по всему ее развитее ArduinoIRremotemaster ничего не поменялось
Вот ссылка на tlc5940 https://code.google.com/p/tlc5940arduino/
http://forum.arduino.cc/index.php?PHPSESSID=iq8derdpru672cnc065sici4m7&topic=61412.0 по этой ссылке было обсуждение этой проблемы но я так и не понял что точно нужно менять и будит ли это работать на 328/168 камне
вот мой код который
#include <IRremote.h> #include "Tlc5940.h" int l[16]; int v[16]; byte inserial[37]; boolean inserialAP = 0; int delayled = 3; long time; int t = 0; long DU; int RECV_PIN = 6; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(57600); irrecv.enableIRIn(); Tlc.init(); } void dump(decode_results *results) { int count = results->rawlen;} void loop() { if(irrecv.decode(&results)) { if(results.vue != 4294967295) {DU=results.vue;Serial.print(DU, HEX);} if(results.vue == 4294967295) {Serial.print(DU, HEX);} dump(&results); irrecv.resume(); // Receive the next vue } if(Serial.available() > 37) // если с СОМ пришло больше + символов стираем буфер {while(Serial.available()) Serial.read(); } if(Serial.available() == 37)// если буфер СОМ = 37 то пишем в массив {for(int i=0; i < 37; i++) {inserial[i] = Serial.read() - 48;} while(Serial.available()) Serial.read(); time=millis(); } if(inserial[0]==1 && inserial[1]==1 && inserial[2]==1 && inserial[3]==1) {for(int b=0; b < 16; b++) {v[b] = map(( inserial[((b*2)+4)] * 10 + inserial[((b*2)+5)]), 0, 63, 0, 4095); } } if(inserial[36]==1) {for(byte i=0; i<16; i++) {if(v[i]>l[i]){l[i]++; Tlc.set(i, l[i]);} if(v[i]<l[i]){l[i]--; Tlc.set(i, l[i]);} } } Tlc.update(); delayMicroseconds(500); if(v[0]==l[0]&&v[1]==l[1]&&v[2]==l[2]&&v[3]==l[3]&&v[4]==l[4]&&v[5]==l[5]&&v[6]==l[6]&&v[7]==l[7]&& v[8]==l[8]&&v[9]==l[9]&&v[10]==l[10]&&v[11]==l[11]&&v[12]==l[12]&&v[13]==l[13]&&v[14]==l[14]&& v[15]==l[15]&&inserial[36]==1) {inserial[36]=0; for(byte c=0; c<16; c++) {Serial.print(l[c]/64);if(c==15){inserial[0]=0;inserial[1]=0;inserial[2]=0;inserial[3]=0; Serial.println();Serial.print("TimeSet ");Serial.println(millis()-time);} } } }
В общем помогите одну из них перевести на другой таймер т.к. в програмировании только на уровне Ардуино(
http://arduino.ru/forum/programmirovanie/motor-shield-v3-podklyuchenie-tsop#comment-22223
Хм... TLC заработала, спасибо за подсказку видно плохо искал. А вот с ИК приемником судя по всему никак на одной нане т.к. посмотрел библиотеку tlc5940 она использует 9ый пин с первым таймером, и вот что увидел:
tlc5940.h:
tlc5940.cpp
ATmega_8.h
Я конечно уже смирился с тем что прийдется использовать еще адин МК для TLC и есть плюс что можно использовать на том что с ИК приемником функцию Tone для будильника, но может есть вариант что-то переделать?
Возникла подобная проблема, как я понимаю химичить таймеры ниачом, никак тут от этой проблемы не уйти. Решено методом Serial over IR (Tx через 2И-НЕ с генератором в светодиод, скорость не более 2400): http://forum.arduino.cc/index.php?topic=10555.0
Вместо стандартной логики 2И-НЕ и генерации несущей с таймера, можно использовать вход Reset у 555. Номиналы 555 - зарядный резистор (от плюса к 7 выводу) - 1k, разрядный (от 7 к 2, 6) - 10k, конденсатор 1800 пФ керамика. Как раз примерно 38 кГц генерит, плюс модулировать от ардуины удобно. Правда внешний таймер дополнительно кушает 20 мА, мож для кого-то сие важно.
Связь только half-duplex, или как-то придумывайте защиту от отражений ИК-сигнала.