#1 Re: Програмування Arduino » RGB Arduino EEPROM (ПОМОГИТЕ) » 2018-01-13 18:04:11

Selen пише:

я не профи, но сделал бы так.

для начало использовал библиотеку EEPROM2.h , я на ней контроль для терариума делал все хорошо работает.

дальше бы для каждого "состояния" или "цвета" я бы сделал свою функцию которую бы при надобности вызывал.

а плавное разгорание через ШИМ и for

   for (int i=0; i <= 255; i++){
      analogWrite(PWMpin, i);
      delay(10);
   }

Спасибо!

#2 Програмування Arduino » RGB Arduino EEPROM (ПОМОГИТЕ) » 2018-01-12 10:55:53

Fiba
відповідей: 5

Всем привет! Кто чем может, пусть поможет)))Спасибо!
Сейчас постараюсь объяснить:
Хочу написать код для вкл подсветки ПП в авто на ардуино, с управление цвета по нажатию кнопки.
Суть:
При вкл габаритов загорается подсветка(плавно) при этом должна считывать последний выбранный цвет, который должен быть сохранен в 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);
  }
}

Підвал форуму