Ви не увійшли.
Сторінки 1
я не профи, но сделал бы так.
для начало использовал библиотеку EEPROM2.h , я на ней контроль для терариума делал все хорошо работает.
дальше бы для каждого "состояния" или "цвета" я бы сделал свою функцию которую бы при надобности вызывал.
а плавное разгорание через ШИМ и for
for (int i=0; i <= 255; i++){ analogWrite(PWMpin, i); delay(10); }
Спасибо!
Всем привет! Кто чем может, пусть поможет)))Спасибо!
Сейчас постараюсь объяснить:
Хочу написать код для вкл подсветки ПП в авто на ардуино, с управление цвета по нажатию кнопки.
Суть:
При вкл габаритов загорается подсветка(плавно) при этом должна считывать последний выбранный цвет, который должен быть сохранен в EEPROM. И разгораться плавно!
Код привел ниже:
Пока дошел до стадии вкл и выбора цвета по нажатию кнопки, но не могу разобраться как сохр в память последний выбранный цвет и при вкл как написать правильно код что б плано разгорался! Заранее спасибо, и если что то не правильно объяснил прошу прощения.
Код:
#include <EEPROM.h>
#define LEDRED 9 //9 ПОРТ КРАСНЫЙ
#define LEDGREEN 10 //10 ПОРТ ЗЕЛЕНЫЙ
#define LEDBLUE 11 //11 ПОРТ СИНИЙ
#define LEDARROW 6 // 6 ПОРТ СТРЕЛКИ
#define switchPin 7 //РЕГУЛИРОВКА ЯРКОСТИ ПОДСВЕТКИ
#define switchPin2 4 //СМЕНА ЦВЕТА ПОДСВЕТКИ
#define EN 2 // ПОРТ ОПРЕДЕЛЕНИЕ ВКЛ\ВЫКЛ ГАБАРИТОВ
int ledMode = 0;
int i;
boolean lastswitchPin2 = LOW;
boolean currentswitchPin2 = LOW;
void setup()
{
pinMode (LEDRED, OUTPUT);
pinMode (LEDGREEN, OUTPUT);
pinMode (LEDBLUE, OUTPUT);
pinMode (switchPin, INPUT);
pinMode (switchPin2, INPUT);
pinMode (EN, INPUT);
analogWrite (LEDARROW, HIGH);
if (digitalRead (EN) == HIGH) // ЕСЛИ ВКЛ ГАБАРИТЫ
{
???????
}
}
void loop()
{
currentswitchPin2 = debounce(lastswitchPin2); //считываем состояние кнопки с применением "антидребезга"
if (lastswitchPin2 == LOW && currentswitchPin2 == HIGH) //если кнопка была нажата
{
ledMode++; //инкрементируем значение переменной
}
lastswitchPin2 = currentswitchPin2; //сохраняем текущее состояние кнопки в предыдущее
if (ledMode == 8) ledMode = 0; //если прошли по циклу все режимы свечения светодиода, делаем сброс до 0
setMode(ledMode); //изменить режим светодиода
}
boolean debounce(boolean last)
{
boolean current = digitalRead(switchPin2); //считываем состояние кнопки
if (last != current) //если есть изменения
{
delay(5); //ждем 5мс
current = digitalRead(switchPin2); //считываем состояние кнопки
}
return current; //возвращаем, считанное состояние кнопки
}
/*
* Выбор режима работы светодиода
* Передача номера режима и его установка
* Функция ничего не возвращает
*/
void setMode(int mode)
{
//Красный
if (mode == 1)
{
digitalWrite(LEDRED, HIGH);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDBLUE, LOW);
}
//Зеленый
else if (mode == 2)
{
digitalWrite(LEDRED, LOW);
digitalWrite(LEDGREEN, HIGH);
digitalWrite(LEDBLUE, LOW);
}
//Синий
else if (mode == 3)
{
digitalWrite(LEDRED, LOW);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDBLUE, HIGH);
}
//Пурпурный(Красный + Синий)
else if (mode == 4)
{
analogWrite(LEDRED, 127);
analogWrite(LEDGREEN, 0);
analogWrite(LEDBLUE, 127);
}
//Бирюзовый(Синий + Зеленый)
else if (mode == 5)
{
analogWrite(LEDRED, 0);
analogWrite(LEDGREEN, 127);
analogWrite(LEDBLUE, 127);
}
//Оранжевый(Зеленый + Красный)
else if (mode == 6)
{
analogWrite(LEDRED, 127);
analogWrite(LEDGREEN, 127);
analogWrite(LEDBLUE, 0);
}
//Белый(Красный + Зеленый + Синий)
else if (mode == 7)
{
analogWrite(LEDRED, 85);
analogWrite(LEDGREEN, 85);
analogWrite(LEDBLUE, 85);
}
//Выключен
else
{
digitalWrite(LEDRED, LOW);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDBLUE, LOW);
}
}
Сторінки 1