Есть пуль управления люстрой, на микросхеме sc2260-r4. И передатчике на 315 mhz.
Люстра “видит” его хорошо с любого места комнаты. Внутри контроллера люстры , обычный приёмник XD-RF-5V. Задача передать люстре сигнал с Ардуино.
Аналогичный приёмник подключенный к Ардуино , при использовании библиотеки RCSwitch сигнал с пульта принимает. Но при передаче этих же данных с Ардуино ,через эту же библиотеку, люстра не реагирует.
Изучение кода библиотеки выявило что она делает не совсем корректные тайминги сигнала.
В библиотеку была внесена корректировка, но это не помогло.
Был написан тестовый код, для отправки данных , который должен обеспечить максимально точные тайминги.
//7672067 (24Bit) Binary: 011101010001000100000011
constexpr uint16_t T = 230;
constexpr uint16_t Tx3 = 3*T;
constexpr uint8_t t_pin = 2;
#define transmit_1 \
digitalWrite( t_pin, HIGH);\
delayMicroseconds( Tx3 ); \
digitalWrite(t_pin, LOW); \
delayMicroseconds( T ); \
#define transmit_0 \
digitalWrite( t_pin, HIGH);\
delayMicroseconds( T ); \
digitalWrite(t_pin, LOW); \
delayMicroseconds( Tx3 ); \
}
void sendFast(unsigned long code, uint8_t length , int rep) {
for (int nRepeat = 0; nRepeat < rep; ++nRepeat) {
for (int8_t i = length-1; i >= 0; --i) {
if ( code & (1L << i) ) {
transmit_1;
//transmit_1; //pt2260 -?
} else {
transmit_0;
//transmit_0; //pt2260 -?
}
}
transmit_0;
//digitalWrite(t_pin, LOW);
delayMicroseconds(28*T); /// sync
}
}
void setup() {
Serial.begin(115200);
pinMode(t_pin, OUTPUT);
Serial.println("");
Serial.println("---Started");
}
void loop() {
sendFast(7672067 , 24 ,10 );
delay(1000);
}
Люстра также не реагирует , но бывает что случайны образом, раз на 100 включений , ловит сигнал и переключается.
Даташит на эту микросхему говорит, что 0 и 1 передаётся передаются одним импульсом.
Написано что она совместима с pt2260 , но в даташите на pt2260 сказано что бит передаётся двумя импульсами (код комментирован), в любом случае , так или иначе результат одинаков.
Постоянная T = 230 бралась из данных которые сообщила библиотека RCSwitch.
Также был сделан перебор T от 0 до 1000 , люстра не среагировала ни разу. Даташит говорит, что задающая частота микросхемы приёмника должна быть от 1/4 до 1/16 частоты передатчика , то есть Т может иметь достаточно широкий диапазон.
В чём может быть дело?