RGB Arduino EEPROM (ПОМОГИТЕ)
- Войдите на сайт для отправки комментариев
Пт, 12/01/2018 - 12:31
Всем привет! Кто чем может, пусть поможет)))Спасибо!
Сейчас постараюсь объяснить:
Хочу написать код для вкл подсветки ПП в авто на ардуино, с управление цвета по нажатию кнопки.
Суть:
При вкл габаритов загорается подсветка(плавно) при этом должна считывать последний выбранный цвет, который должен быть сохранен в 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); } }
После 38 строки EEPROM.update(0, ledMode) в сетапе ledMode = EEPROM.read(0)
Для кнопок лучше взять https://github.com/thomasfredericks/Bounce2
Для плавности: http://arduino.ru/Reference/AnalogWrite
Не вижу, где EEPROM используете, но вам нужен EEPROM.update , например: http://wikihandbk.com/wiki/Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/EEPROMUpdate
Спасибо в этом и вопрос то что я не знаю как его правильно использовать для плавного разгорания светодиода
Спасибо буду пробовать
Спасибо в этом и вопрос то что я не знаю как его правильно использовать для плавного разгорания светодиода
Там же пример есть. Большее число функции передаешь - сильнее горит. В цикле от 1 до 255 меняйте и будет плавно.
Спасибо в этом и вопрос то что я не знаю как его правильно использовать для плавного разгорания светодиода
Там же пример есть. Большее число функции передаешь - сильнее горит. В цикле от 1 до 255 меняйте и будет плавно.
НУ да теперь то я понял... буду пробовать
Спасибо в этом и вопрос то что я не знаю как его правильно использовать для плавного разгорания светодиода
Там же пример есть. Большее число функции передаешь - сильнее горит. В цикле от 1 до 255 меняйте и будет плавно.
Просто я изночально использовал:
Привет, как то по осени тоже озадачивался идеей rgb подсветки ПП. Но что то не срослось. Отложил на потом. У меня запись в ЕПРОМ оргонизована была по длинному нажатию, цвета настраивались потенциометром, скетч ниже, может чем и поможет
Только EEPROM.write замените на EEPROM.update, а то заклинит что-нибудь в алгоритме и протрете дырку в контроллере за пять сек.
Привет, как то по осени тоже озадачивался идеей rgb подсветки ПП. Но что то не срослось. Отложил на потом. У меня запись в ЕПРОМ оргонизована была по длинному нажатию, цвета настраивались потенциометром, скетч ниже, может чем и поможет
Спасибо!
Хорошо
Этого хватит? Для Сохранения. Почитал про EEPROM.update. Не совсем понял. Как правильно использовать
Да хватит. Update запишет значение в еепром только если оно отличается от того которое уже записано по тому адресу. Первый параметр это адрес в еепром, второй это значение.
Да хватит. Update запишет значение в еепром только если оно отличается от того которое уже записано по тому адресу. Первый параметр это адрес в еепром, второй это значение.
Большое спасибо!
Да хватит. Update запишет значение в еепром только если оно отличается от того которое уже записано по тому адресу. Первый параметр это адрес в еепром, второй это значение.
Привет. Есть контактыы более удобные? Хотел посоветоваться)))
Если можно я запишу потом если что отредактируешь свое сообщение чтоб не видели