Перейти к содержанию

Одна Кнопка и RGB led. Изменить цвет при нажатии.


Рекомендуемые сообщения

Всем привет! Такой вот замысел: 

Кнопка: ELEWIND-16-%D0%BC%D0%BC-%D1%81-%D0%BF%D0

Хочу втулить в неё RGB-светодиод.

Задача: При каждом нажатии менять цвет кнопки/led. Ноги светодиода введены в пины D3, D4D5.

D2 - Введен реле relay_module_photo.jpg

 D1 - свето датчик 427932709_244.jpg

Цель: Включать свет релюшкой. Красный - выключено, Зеленый - реле включено напрямую от 220,  Синий - реле включено напрямую от 220 но через датчик света.

Помогите пожалуйста со скетчем.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Со скетчем не скажу. Вот на нубском Си:

Button= вход_кнопки_которая_подаёт_землю;
	while(1)
	{
	delay_ms(10);
	oldButton= Button;
	Button= вход_кнопки_которая_подаёт_землю;
	if(oldButton && !Button) 
	{
	if(++mode > 2) mode= 0;
	switch(mode)
	{
	case 0: D3= 1; D4= 0; D5= 0; break;
	case 1: D3= 0; D4= 1; D5= 0; break;
	case 2: D3= 0; D4= 0; D5= 1; break;
	default: mode= 0; D3= 0; D4= 0; D5= 0; break;
	}
	}

Насчёт D1 и D2 не понял.

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Чисто по-НУБовски наляпал вот такой скетч, который таки переключает цвета циклически:

//Автор http://easy-robots.ru/urok-2. Маємо RGB світлодіод, де:
int red = 1; // Червоний світлодіод засвітиться при запуску!
int green = 0; // Зелений
int blue = 0; // Синій
void setup() {
  pinMode(3, OUTPUT); // Синій
  pinMode(4, OUTPUT); // Зелений
  pinMode(5, OUTPUT); // Червоний
  pinMode(6, INPUT); // Кнопка
  pinMode(7, INPUT); // Датчик світла
}
void loop() {
  if (digitalRead(6) == 0 && red == 1 && green == 0 && blue == 0) //Засвічуємо почергово. Червоний
  {
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(5, HIGH); //Зажигаем светодиод
    red = 1; // Червоний світлодіод засвітиться при запуску!
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, LOW); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 0 && red == 1 && blue == 0) //Засвічуємо почергово. Зелений
  {
    digitalWrite(5, LOW); //Гасим светодиод
    red = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем, когда отпустят кнопку
      delay(50);
    digitalWrite(4, HIGH); //Зажигаем светодиод
    green = 1; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, LOW); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 1 && red == 0 && blue == 0) //Засвічуємо почергово. Синій                                                                                                                  && blue ==0) //Если с кнопки есть сигнал И светодиод выключен
  {
    digitalWrite(5, LOW); //Зажигаем светодиод
    red = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, HIGH); //Зажигаем светодиод
      blue = 1; // Записываем новое состояние
      while (digitalRead(6)) // Ждем когда отпустят кнопку
        delay(50);
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 0 && red == 0 && blue == 1) //Засвічуємо почергово. Знову Червоний, інакше не буде циклу.                                                                                    && blue ==0) //Если с кнопки есть сигнал И светодиод выключен
  {
    digitalWrite(5, LOW); //Зажигаем светодиод
    red = 1; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, HIGH); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
}

Но..... Для синего индикатора, который нужно, чтобы мигал, если светодатчик еще не подал сигнал на 7-й цифровой пин, а если подал, то чтобы индикатор светился, я так же наляпал  код, который не хочет работать в таком виде:

//Автор http://easy-robots.ru/urok-2. Маємо RGB світлодіод, де:
int red = 1; // Червоний світлодіод засвітиться при запуску!
int green = 0; // Зелений
int blue = 0; // Синій
void setup() {
  pinMode(3, OUTPUT); // Синій
  pinMode(4, OUTPUT); // Зелений
  pinMode(5, OUTPUT); // Червоний
  pinMode(6, INPUT); // Кнопка
  pinMode(7, INPUT); // Датчик світла
}
void loop() {
  if (digitalRead(6) == 0 && red == 1 && green == 0 && blue == 0) //Засвічуємо почергово. Червоний
  {
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(5, HIGH); //Зажигаем светодиод
    red = 1; // Червоний світлодіод засвітиться при запуску!
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, LOW); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 0 && red == 1 && blue == 0) //Засвічуємо почергово. Зелений
  {
    digitalWrite(5, LOW); //Гасим светодиод
    red = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем, когда отпустят кнопку
      delay(50);
    digitalWrite(4, HIGH); //Зажигаем светодиод
    green = 1; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, LOW); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 1 && red == 0 && blue == 0) //Засвічуємо почергово. Синій                                                                                                                  && blue ==0) //Если с кнопки есть сигнал И светодиод выключен
  {
    digitalWrite(5, LOW); //Зажигаем светодиод
    red = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    if (digitalRead(7) == 1)// Если на 7 пин идет сигнал со светодатчика, то светим синим
    {
      digitalWrite(3, HIGH); //Зажигаем светодиод
      blue = 1; // Записываем новое состояние
      while (digitalRead(6)) // Ждем когда отпустят кнопку
        delay(50);
    } else {// Если на 7 пин НЕ идет сигнал со светодатчика, то мигаем синим
      void setup()
      {
        pinMode(3, OUTPUT); // Используем Pin11 для вывода
      }
      void loop()
      {
        digitalWrite(3, LOW); // Включаем синий свет
        delay(500); // Устанавливаем паузу для эффекта
        digitalWrite(3, HIGH); // Включаем синий свет
        delay(500); // Устанавливаем паузу для эффекта
      }
    }
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
  if (digitalRead(6) == 1 && green == 0 && red == 0 && blue == 1) //Засвічуємо почергово. Знову Червоний, інакше не буде циклу.                                                                                    && blue ==0) //Если с кнопки есть сигнал И светодиод выключен
  {
    digitalWrite(5, LOW); //Зажигаем светодиод
    red = 1; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(3, HIGH); //Зажигаем светодиод
    blue = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
    digitalWrite(4, LOW); //Зажигаем светодиод
    green = 0; // Записываем новое состояние
    while (digitalRead(6)) // Ждем когда отпустят кнопку
      delay(50);
  }
}

Ошибка: 

Цитата

Arduino: 1.6.13 (Windows 7), Плата:"Arduino Leonardo"

N:\Я\Arduino\LED\_1key_cycle_rgb_led_2\_1key_cycle_rgb_led_2.ino: In function 'void loop()':

_1key_cycle_rgb_led_2:57: error: a function-definition is not allowed here before '{' token

       {

       ^

_1key_cycle_rgb_led_2:61: error: a function-definition is not allowed here before '{' token

       {

       ^

exit status 1
a function-definition is not allowed here before '{' token


 

Ссылка на комментарий
Поделиться на другие сайты

Для начала ты объявил red,green blue, но не объявлены кнопка и датчик света. Затем у всего этого хозяйства в сетапе не назначены начальные состояния ног. Delay не используй есть замена. И последнее While здесь тоже не к месту. Построй на if для начала всё.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...