Управление цветом светодиода RGB с помощью одной кнопки

Я работаю в TinkerCAD и хочу спроектировать и смоделировать схему, в которой есть следующие компоненты. 1. 1 RGB-светодиод 2. 1 кнопка 3. 3 фоторезистора. 4. 1 плата Ардуино. Так что свет должен быть выключен на старте. Когда кнопка нажата в первый раз, светодиод должен загореться красным цветом, а затем яркость красного цвета должна контролироваться одним из трех используемых фоторезисторов. кнопка нажата, светодиод должен загореться зеленым, и зеленый цвет на этот раз должен контролироваться другим фоторезистором.. когда кнопка нажата в третий раз, светодиод должен изменить цвет на синий, а третий фоторезистор должен иметь возможность управлять яркостью синего цвета. И этот цикл должен продолжаться при нажатии кнопки Push.

Я не знаю, как прикреплять коды и картинки, поэтому прилагаю ссылку на мою схему в tinkercad, там вы найдете схему и код..

пожалуйста, скажите мне, что не так.

Вот ссылка для этого.

, 👍-3

Обсуждение

А какая конкретно у вас проблема? Пожалуйста, покажите код, который вы уже написали, и опишите, что вы ожидали от кода и что он делает на самом деле., @chrisl

Я хочу подключить к своей схеме одну кнопку, поэтому, когда я нажимаю ее один раз, светодиод RGB должен загораться красным, при втором нажатии он должен становиться зеленым, а при третьем нажатии он должен меняться на синий. Я также хочу подключить 3 фоторезистора, чтобы они могли контролировать яркость света, на который они назначены., @Mahima Pareek

Попробуйте один за другим ... сначала проверьте, как работает кнопка (включая устранение дребезга), затем как работает светодиод RGB, затем как работает фоторезистор ... Как только вы узнаете каждый компонент по отдельности, объедините их в одну схему / скетч. ., @Michel Keijzers

Вам нужно указать, что вы хотите, чтобы произошло. Что-то вроде этого: «Программа запускается, и светодиод находится в состоянии ___. Пользователь нажимает кнопку один раз, и светодиод меняется на ___. Пользователь нажимает кнопку второй раз, и светодиод меняется на ___. Пользователь нажимает кнопку кнопку a 3-й раз, и светодиод изменится на ___. Пользователь нажимает кнопку 4-й раз, и светодиод изменится на ___. (и т. д.) При нажатии кнопки ___ светодиод вернется в исходное состояние ___.", @Duncan C

Кто-то разместил код, который менял цвет светодиода при каждом нажатии кнопки, а затем вы продолжаете говорить: «Я хочу, чтобы красный цвет был отчетливым и появлялся только при нажатии кнопки, то же самое для других цветов». откуда мы должны это знать, если ты нам не скажешь?!?, @Duncan C

Как у вас подключена кнопка? Подключен ли он к +5В через подтягивающий резистор? Он подключен к земле и использует режим INPUT_PULLUP или подтягивающий резистор? (Ему нужна одна из этих вещей, иначе он будет «плавать» и давать полуслучайные показания.), @Duncan C

Пожалуйста, отредактируйте свой вопрос, чтобы указать как четкие цели, так и описание того, как они связаны. И вы хотите отображать только красный, зеленый и синий с полной яркостью? Вы хотите какие-либо комбинированные цвета, такие как желтый, голубой или фиолетовый? Вам нужны оттенки, в которых некоторые цвета имеют разную яркость?, @Duncan C

Отредактируйте свой вопрос, чтобы включить информацию, которую вы добавили в свои комментарии. Также объясните, как подключена ваша кнопка и какие контакты подключены к каждому цветовому каналу вашего светодиода., @Duncan C


1 ответ


1

Вот вам пример конечного автомата.

int state;

void setup() {
  pinMode(4, INPUT);    // выключатель
  pinMode(5, OUTPUT);   // выходной светодиод красный
  pinMode(6, OUTPUT);   // выходной светодиод зеленый
  pinMode(7, OUTPUT);   // выходной светодиод желтый
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);  
  state = 0;
}

void loop() {
  if (digitalRead(4) == HIGH)  {
    switch (state) {
      case 0:
        digitalWrite(5, HIGH);
        digitalWrite(6, LOW);
        digitalWrite(7, LOW);
        break;
      case 1:
        digitalWrite(5, LOW);
        digitalWrite(6, HIGH);
        digitalWrite(7, LOW);
        break;       
      case 2:
        digitalWrite(5, LOW);
        digitalWrite(6, LOW);
        digitalWrite(7, HIGH);
        break;
    }
    state = state + 1;
    if (state > 2) {
      state = 0;
    } 
  }
}
,

Этот код не имеет дебаунса. Это даст вам случайный цвет после каждого нажатия кнопки., @Filip Franik

код, который вы написали, например, не работает. Я хочу, чтобы красный цвет был отчетливым и появлялся только при нажатии кнопки, то же самое для других цветов., @Mahima Pareek

«Код не работает» совершенно бесполезно. Что он делает, и почему это не отвечает вашим потребностям? Мы должны сделать предположения относительно того, как у вас настроен ваш проект. Если бы OP использовал разные контакты для кнопки или светодиодных каналов, это не сработало бы. Если у вас есть кнопка, подключенная с использованием подтягивающего резистора или режима INPUT_PULLUP, тогда пример кода не будет работать., @Duncan C