RGB подсветка в зависимости от настроения и оборотов двигателя.
Всем добрый день. Про ардуину узнал совсем недавно. Опыта програмирования крайне мало. Зато с паяльником дружу без проблем).
И вот захотелось мне реализовать подсветку в машине на свой вкус, т.е. с лентой RGB. Первоначальный вариант был с контроллером за 100рэ с ебея. Там и цвет и яркость всё выбирается. Всякие режимы моргалки и пукалки меня не интересовали совсем.
И тут на глаза попался набор ардуины, посмотрел инфу в нете, оказалось можно куда интереснее режимы организовать. И вот после долгих раздумий и подсчетов пришел к "проекту ( если так громко можно назвать).
А точнее: 2 режима работы.
Первый по кнопке перебор цветов по сине-зелено-красным диапазонам с градациями и регулировкой яркости. И сохранением последнего состояния в память ардуины ( и последующим чтением при включении).
Второй - в зависимости от оборотов меняется цвет диодов. Так же от синего к красному через зеленый.
Для подсчета Оборотов использую контакт с приборной панели. Идет он с мозгов машины. По расчетам выходит частота 300Гц при 6000 Об\мин. и для облегчения реализации можно приравнять кол-во импульсов с секунду к величине AnalogWrite. Т.е. при изменении оборотов от 0Гц до 256 ГЦ на входе будет меняться полностью спектр RGB диода. А чтоб не тратить оставшееся место в диапазоне высших оборотов - пусть при значениях на входе выше 256Гц мугет мигать красными ( последними в спектре) диодами. Получится что-то наподобии LightShift'a. Ну и соответсвенно с регулировкой яркости.
Про неё отдельно. Как я понимаю нужно вводить переменную, на которую будет делится величина ШИМ выхода. Вполне достаточно 3-4 фиксированных положений. Потом можно и на датчик освещенности будет завести его).
Вроде вкратце описал что хочу реализовать. Для регулировки цвета, яркости и режима можно подключить обычные кнопки, либо энкодер(понравился он мне).
Сможет ли кто-то помочь в написании сего чуда? У меня уже есть готовый стенд с распаяным диодом и генератором импульсов на NE555 с частотами от 14Гц до 400Гц.
Если нужна схема с контактами, то постараюсь нарисовать. Держу ее только в голове. Да и простая она.
Заранее благодарю за любую помощь.
Код HTML:
int Gled = 9;
int Rled = 10;
int Bled = 11;
int tacho = 2;
int color = 4;
int bright = 7;
int mode =8;
void setup()
{
pinMode(Rled, OUTPUT);
pinMode(Gled, OUTPUT);
pinMode(Bled, OUTPUT);
pinMode(tacho, INPUT);
pinMode(color, INPUT);
pinMode(bright, INPUT);
pinMode(mode, INPUT);
}
Re: RGB подсветка в зависимости от настроения и оборотов двигателя.
Поскольку мои познания крайне малы, то решил просто выдирать куски кода из других проектов и переделывать на свои нужды. Но чтото не состыкуется. Ошибка при компилировании. Направит может кто в нужное русло?
Цитата:
int Gled = 9;
int Rled = 10;
int Bled = 11;
int color = 4;
int bright = 7;
int mode =8;
volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[5] = {0,0,0,0,0};
void setup()
{
pinMode(Rled, OUTPUT);
pinMode(Gled, OUTPUT);
pinMode(Bled, OUTPUT);
pinMode(color, INPUT);
pinMode(bright, INPUT);
pinMode(mode, INPUT);
attachInterrupt(0, rpm_interrupt, FALLING);
}
void loop()
{
int rpm = 0;
while(1){
analogWrite(Bled, rpm );
analogWrite(Rled, rpm + 128);
analogWrite(Gled, 255 - rpm);
delay(1000);
if(time > 0)
{
//5 Sample Moving Average To Smooth Out The Data
rpm_array[0] = rpm_array[1];
rpm_array[1] = rpm_array[2];
rpm_array[2] = rpm_array[3];
rpm_array[3] = rpm_array[4];
rpm_array[4] = 300*(100000/(time*7));
//Last 5 Average RPM Counts Eqauls....
rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] + rpm_array[3] + rpm_array[4]) / 5;
}
}
//Capture rpm
void rpm_interrupt()
{
time = (micros() - time_last);
time_last = micros();
}
getz.ino: In function 'void loop()':
getz:45: error: a function-definition is not allowed here before '{' token
getz:48: error: expected `}' at end of input
ошибка такая
Re: RGB подсветка в зависимости от настроения и оборотов двигателя.
А если вот так?
Код:
int Gled = 9;
int Rled = 10;
int Bled = 11;
int color = 4;
int bright = 7;
int mode =8;
volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[5] = {0,0,0,0,0};
void setup()
{
pinMode(Rled, OUTPUT);
pinMode(Gled, OUTPUT);
pinMode(Bled, OUTPUT);
pinMode(color, INPUT);
pinMode(bright, INPUT);
pinMode(mode, INPUT);
attachInterrupt(0, rpm_interrupt, FALLING);
}
void loop()
{
int rpm = 0;
while(1){
analogWrite(Bled, rpm );
analogWrite(Rled, rpm + 128);
analogWrite(Gled, 255 - rpm);
delay(1000);
if(time > 0)
{
//5 Sample Moving Average To Smooth Out The Data
rpm_array[0] = rpm_array[1];
rpm_array[1] = rpm_array[2];
rpm_array[2] = rpm_array[3];
rpm_array[3] = rpm_array[4];
rpm_array[4] = 300*(100000/(time*7));
//Last 5 Average RPM Counts Eqauls....
rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] + rpm_array[3] + rpm_array[4]) / 5;
}
}
}
//Capture rpm
void rpm_interrupt()
{
time = (micros() - time_last);
time_last = micros();
}
Re: RGB подсветка в зависимости от настроения и оборотов двигателя.
И точно) Спасибо. уж вроде считал-считал эти скобки. Сейчас буду экспериментировать со множителем для time, чтоб правильно выводил кол-во rpm
Re: RGB подсветка в зависимости от настроения и оборотов двигателя.
или я чтото не понимаю как идет подсчитывание кол-во импульсов, но всегда параметр rpm = 0(
Получилось) со множителями обманулся) 1000000 / time.
А как сделать, чтоб можно было режимы перебирать? Т.е. чтоб по нажатию кнопки переключить с подсчитывания импульсов на непрерывный режим?