у меня этих досок … есть
жена выкидывает, а я прибираю.
Вот была бы вытяжка, то можно и паяльником продырявить.
Я собираюсь всё клеевым пистолетом склеить.
Вырежу брусочки плотного пенопласта для торцов=боковин=низа.
Код для ИК крутой. Я на нем все пульты могу распознавать, из тех до которых дотянулся.
Без всяких выборов филипс/япония/китай. HEX код любой кнопки выдаёт.
Убил тогда весь день пачки микросекунд разглядывая в логах сом порта ардуины…
Отдельно должен быть на форуме где-то.
Опять же всё из-за того, что библиотеки пультов у меня не заработали
Они мало у кого с умными пикселями заработали
переменные все понятны мне
r g b =red green blue цвета
tm тайминг
dgd = digit цифра
ch =char буква
cl =color цвет
ss =scren экран
абракадабра для временных
iz bn n i1 i2
Эт самое главное
Ну лучше типа cvet, bukva, ekran, что б так сказать массы поняли.
Это сейчас. Попробуйте заглянуть в этот код через годик ))
Основная масса, как известно, в Китае.
Немножко поменьше - в Индии.
Как Вы думаете, они Вас поймут?
Не надо выпендриваться, когда есть всем понятные light, char, screen.
Я про отечественные массы… Ещё китайцев нам не хватало… к англосаксам.
…Хотя Вы правы, выглядит помесь своих и не своих слов не очень:
void setup() {
/////////////////////
epd.Init_4Gray();
//марка и печать
Dis_Cvet(2);
DrawFilledRectangle(50,34 ,350 ,266 , 1);
drawBitmap_4(80,64,marka_0,240,172);
drawBitmap_1(220,140,pechat_0,160,160,0);
Buf_Ris();
// epd.Clear();
////////////////
epd.Sleep();//отключение дисплея в сон
}
ТС!, кстати в плане монтажа - открыл для себя в этом году пористый двухсторонний скотч:
Ту же матрицу, да на стекло! Пока жена не прибила
Чему бы там не заработать то, по прерыванию пульта сразу ленту отключаешь и всё.
ЗЫ: заказ у меня был на подобную херь, тоже пульт , тоже “умные диоды”, и переменные такие же, как у lilik’а (svet, yarkost и т.д.). Только вот проблема в том, что этот lilik был немцем. Судя по коду , я бы даже сказал - ФАШИСТОМ.
Ну их нафиг такие наименования…
Попробовал его, чуть изменив. Конечно писец, а не точность. Веер случайных кодов на кнопке. Но если число нажатий для срабатывания не важно, то пойдёт
// для ИК пульта приёмник без библиотеки
#define plus 4 //
#define minus 3 //
#define IK_PIN 2 //
byte n = 0;
word keycode = 0;
unsigned long tm = 0;
unsigned long last = 0;
void setup() {
//
pinMode(IK_PIN, INPUT); // ir recv
pinMode(plus,OUTPUT);//
digitalWrite(plus,HIGH);// плюс питания ик приёмника
pinMode(minus,OUTPUT);//
digitalWrite(minus,LOW);// минус питания ик приёмника
//
attachInterrupt(0, irread, FALLING);
Serial.begin(9600);
}
void loop() {
keypressed();
delay(100);
}
/////////////////////////////////////////
void irread() {
tm = micros() - last;
last = micros();
n += 1;
if (tm > 3000) {
keycode = 0;
n = 0;
}
if (n >8) {
if (tm > 1500) {keycode += 1;}
keycode = keycode << 1;
}
}
//////////////////////////////////////////
void keypressed() {
n = 0;
if(keycode!=0){ Serial.println(keycode, HEX); keycode = 0;} // печатаем код
}
//////////////////////////////////////////////
На форуме упоминание нашёл тут:
Пробовал менять числа в стоках 30,34,35. Как бы фиолетово пульту на это
ууЪ
Так не заработает!
// для ИК пульта
byte n = 0;
word keycode = 0;
unsigned long tm = 0;
unsigned long last = 0;
void setup() {
pinMode(2, INPUT); // ir recv
attachInterrupt(0, irread, FALLING);
Serial.begin(9600);
}
void irread() { // ловим и считаем пачку импульсов
tm = micros() - last;
last = micros();
n += 1;
if (tm > 3000) {
keycode = 0;
n = 0;
}
if (n > 8) {
if (tm > 1500) keycode += 1;
keycode = keycode << 1;
}
}
void loop()
{
if (n == 32) {
n = 0;
Serial.println(keycode, HEX);
// здесь ваш код в зависимости от keycode
// if (keycode==0xFF) then light(0);
}
// !! delay нельзя использовать = тупит
}
Подправил скетч, с делеями тоже вроде чётко работает.
// для ИК пульта приёмник без библиотеки
#define plus 4 //
#define minus 3 //
#define IK_PIN 2 //
byte n = 0;
word keycode = 0;
unsigned long tm = 0;
unsigned long last = 0;
void setup() {
//
pinMode(IK_PIN, INPUT); // ir recv
pinMode(plus,OUTPUT);//
digitalWrite(plus,HIGH);// плюс питания ик приёмника
pinMode(minus,OUTPUT);//
digitalWrite(minus,LOW);// минус питания ик приёмника
//
attachInterrupt(0, irread, FALLING);
Serial.begin(9600);
}
void loop() {
keypressed();
delay(100);
}
/////////////////////////////////////////
void irread() {
tm = micros() - last;
last = micros();
n += 1;
if (tm > 3000) {
keycode = 0;
n = 0;
}
if (n >8) {
if (tm > 1500) {keycode += 1;}
keycode = keycode << 1;
}
}
//////////////////////////////////////////
void keypressed() {
if(keycode!=0&&n==32){ Serial.println(keycode, HEX); keycode = 0; n = 0;} // печатаем код
}
//////////////////////////////////////////////
Именно достижение n значения 32 дает нам знать, что keycode прочитан полностью.
Пора анализировать и принимать решение.
А keycode!=0 уже в начале приема первого бита.
Значит просто:
if(n==32)
Дело не в именах переменных. Вы абсолютно не умеете пользоваться функциями.
Вот это не функция.
Главное правило - функция это замкнутый мир, все переменные которой должны быть либо локальными, либо передаваться как аргументы.
А у вас? Четыре из пяти переменных - глобальные. Кому нафик нужна эта функция? Она же никак не упрощает программу. Почему вы не заменили ее просто ее же кодом?
Не говоря уже о том, что в библиотеке Фастлед есть встроенный метод для присваивания пикселю ленты заданного цвета. Чем он вас не устроил? Всяко лучше вашего творчества.
Из- за того что вы не умеете писать функции, у вас код многократно дублирован. Функции setPixel и fonPixel - это фактически одно и тоже. То же самое про функции tt1 tt2. Далее - у вас же есть функция color_read(), зачем ещё одна - take_color?
В целом код раза в три длинней, чем мог быть и с кучей повторов. Такой код и выглядит, как помойка, и отлаживать его трудно.
// для ИК пульта приёмник без библиотеки
#define plus 4 //
#define minus 3 //
#define IK_PIN 2 //
volatile word keycode_ = 0;// переменная хранения кода кнопки
void setup() {
//
pinMode(IK_PIN, INPUT); // ir recv
pinMode(plus,OUTPUT);//
digitalWrite(plus,HIGH);// плюс питания ик приёмника
pinMode(minus,OUTPUT);//
digitalWrite(minus,LOW);// минус питания ик приёмника
//
attachInterrupt(0, irread, FALLING);
Serial.begin(9600);
}
void loop() {
keypressed();
delay(1000);
}
/////////////////////////////////////////
void irread() {
volatile static byte n = 0;
volatile static word keycode = 0;
volatile static unsigned long tm = 0;
volatile static unsigned long last = 0;
tm = micros() - last;
last = micros();
n += 1;
if (tm > 3000) {
keycode = 0;
n = 0;
}
if (n >8&&n<=32) {
if (tm > 1500) {keycode += 1;}
keycode = keycode << 1;
}
if(n==32){keycode_ = keycode;keycode = 0; n = 0;}
}
//////////////////////////////////////////
void keypressed() {
if(keycode_!=0){
Serial.println(keycode_, HEX);// печатаем код кнопки
//код по обработке значений keycode_
keycode_ = 0;
}
}
//////////////////////////////////////////////
Ну вот я написал по интуиции, но функция в прерывании не может возвращать значение переменной, а должна!
ТС, кстати этот вариант устойчив к делеям, даже в 1000
Вот и я о том же. Функцию надо и из прерывания вызывать и из программы, чтоб значение кода кнопки прочесть.
…кстати, а как её написать без прерывания?
Ужость!
А как надо написать?
Вы о чём? Что написать?