RGB кнопки

Сделал себе модуль. Не знаю зачем, но радужно.


Навесной монтаж заодно вспомнил, глаза уже не те, руки тоже.

Думаю новичкам хорошая тренировка в пайке, 3 Д печати и программировании.

Спойлер
/////////////////////////////////////
// примеры для ws2812b
//Arduino UNO

#include "Adafruit_NeoPixel.h"
#define kn    5  //вывод кнопки
#define line_ 26 //число пикселей в ленте
uint8_t dataPin = 6;// вывод для подключения
Adafruit_NeoPixel strip = Adafruit_NeoPixel(line_,dataPin , NEO_GRB + NEO_KHZ800);// Создаем переменную strip для управления нашей лентой.
byte M=40;//
byte cv[6];//
byte massiv_ws2812b_[6][4]={   {11,10,15,14},//массив-переходник  
                               {9,8,17,16},
                               {7,6,19,18},
                               {5,4,21,20},
                               {3,2,23,22},
                               {1,0,25,24},
  };//
///RGB
void setup() {
strip.begin();
}
void loop() {
knopki();
delay(20); 
}
///////////////////////////////////////
void knopki(){// функция отработки нажатия кнопок 
 //  
 int val=analogRead(A0);//чтение кнопочной станции
 int VAL=0;//
if(val<20){VAL=1;}
if(val>20&&val<110){VAL=2;}
if(val>300&&val<400){VAL=3;}
if(val>450&&val<550){VAL=4;}
if(val>650&&val<810){VAL=5;} 
if(val>810&&val<900){VAL=6;} 
//
if(VAL!=0){
cv[VAL-1]++;if(cv[VAL-1]>7){cv[VAL-1]=1;}
for ( int i = 0; i < 4; i++) {
strip.setPixelColor(massiv_ws2812b_[VAL-1][i], (cv[VAL-1]%2)*M, ((cv[VAL-1]/2)%2)*M, ((cv[VAL-1]/4)%2)*M);  
}
strip.show();    
delay(200);   
}
}
///////////////////////////////////////

Из применений пока видится только:

  1. Кодовый цветовой замок
  2. Декодер цветовой маркировки резисторов
  3. Игра - повтори цветовую комбинацию
3 лайка

Шестицветная радуга нонче не в почёте. И чёй-то резистор одной кнопке не доложили.

Я вообще в радуге больше 5 не видел.
Резистор не поставил чтоб цеплять можно было и к цифровому выводу (три кнопки срабатывают как одна).

1 лайк

И в лягушке можно увидеть :neutral_face: А схема и номиналы бы не помешали.

Обдумать начертание нужно и добавлю.

А встроенные сенсорные кнопки ESP32 нет желания попробовать?

1 лайк

Осталось вместо 25-и светодиодов нестандартной ленты использовать 6шт обычных 50х50 с шагом 60шт на метр.

Они громоздки для таких кнопок и конструкция будет совсем другая. У этой ленты все шансы стать стандартной :slight_smile:


высота 5мм, шаг 1см (100 штук на метр), пайка контактов с одной стороны. В отличии от 2,7 мм надёжнее.

Нет. Пробовал раньше. Они здорово работают сами по себе и не работают с лентой.

Раскройте сокральный смысл, почему в одном случае uint8_t, а в другом byte?

Изначально писал как в справочнике форума, потом тут узнал, что есть uint8_t как более древний (так, не так?). В итоге беря фрагменты кода в том числе и от себя, ничего не меняю. Получается и так и эдак.

1 лайк

uint8_t более православен, и в стандартных библиотеках Си именно этот вариант. К тому же он нагляден и однозначен на платформах любой архитектуры и разрядности(про всякие word и double word исписано мильон тем)

3 лайка

После лекции Петровича, выяснилось, что пины следует объявлять как

constexpr uint8_t pin = 13;

если я ничего не путаю.

Зачем - как раз понятно.

Непонятна конструкция кнопки.

Мембранная клава и светодиод :slightly_smiling_face:

Ещё как вариант светодиодная матрица и резистивный сенсорный экран сверху.

Тогда эффект таракана не получится.
VID_20250703_072052

То есть ход кнопки обеспечивается исключительно за счет упругости тонкой пластины?

Тогда почему не сразу экран вместо светодиодной матрицы?
Сразу появляется возможность оперативного изменения не только цвета, но и надписи на “кнопке”.

Матрица ярче, у экрана мало светодиодов подсветки. Ну и заманчиво управлять пикселем каждым, касанием прозрачной поверхности над ним. Но в целом таких проектов не видел. Видимо сенсорный экран по выводам плохо паяется :slight_smile:
Где то, не помню где, товарищ на бумаге в клетку нарисовал карандашом кнопки, а сверху сенсор разместил.