ARDUINO: Урок 4 - RGB светодиод, кнопка и устранение дребезга контактов

preview_player
Показать описание
В данном уроке мы ознакомимся с управлением RGB-светодиодом кнопкой и узнаем один из методов борьбы с дребезгом контактов на ARDUINO.

Все используемые элементы из урока можно приобрести здесь:

Рекомендации по теме
Комментарии
Автор

Наконец хоть кто-то объяснил для простых людей. Лайк от меня.

rasputin
Автор

const int BLED = 13;
const int GLED = 10;
const int BUTTON = 8;
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledMode = 0;


void setup()
{
pinMode(BLED, OUTPUT);
pinMode(GLED, OUTPUT);
}
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTTON);
if (last != current)
{
delay(5);
current = digitalRead(BUTTON);
return current;
}
}

void setMode(int mode)
{
switch (mode)
{
case 1:
digitalWrite(BLED, HIGH);
digitalWrite(GLED, LOW);
break;
case 2:
digitalWrite(BLED, LOW);
digitalWrite(GLED, HIGH);
break;
case 3:
digitalWrite(BLED, HIGH);
digitalWrite(GLED, HIGH);
break;
case 0:
digitalWrite(BLED, LOW);
digitalWrite(GLED, LOW);
break;
}
}

void loop()
{
currentButton = debounce(lastButton);
if (lastButton==LOW && currentButton==HIGH)
{
ledMode++;
}
lastButton = currentButton;
if (ledMode == 4)
{
ledMode = 0;
}
setMode(ledMode);
}

ДмитрийБорцов-ьз
Автор

Сделал все как в описании, при включении платы контроллер переходит сразу к первому действию, а не к нулевому, где все выключено. Почему?

ДмитрийБорцов-ьз
Автор

Здравствуйте.

Такой вопрос, не подскажите как в место кнопки задействовать
потенциометр?

В принципе я смог заставить загораться светодиод при
достижении определенного уровня, но как заставить при этом гаснуть при другом
уровне ни как не пойму.

проштудировал С++ не нашел такой возможности, возможно плохо
или не там штудировал.

Описание в след второго значения для переменной нейтрализует
первое значение.

Получилось так:

const int W=10;
const int E=9;
const int B=6;
const int G=5;
const int R=3;
const int P=0;

void setup()
{
Serial.begin(9600); // инициализация серийного обмена данными на скорости 9600 бит в секунду для отслеживая уровня потенциометр в "Монитор порта":

pinMode (W, OUTPUT);
pinMode (E, OUTPUT);
pinMode (B, OUTPUT);
pinMode (G, OUTPUT);
pinMode (R, OUTPUT);
pinMode (P, INPUT);
}

void loop()
{
int x;
int y;
int z;
int q;
int a;

x = analogRead(P)>100;
digitalWrite(W, x);

y = analogRead(P)>200;
digitalWrite(E, y);

z = analogRead(P)>300;
digitalWrite(B, z);

q = analogRead(P)>400;
digitalWrite(G, q);

a = analogRead(P)>500;
digitalWrite(R, a);

int sensorValue = analogRead(A0); // считывает значение с аналогового пина 0:

Serial.println(sensorValue); // отображает считанное значение:

delay(1); // задержка между считываниями для стабильности работы
}

D__N
Автор

Хоть кто-то нормально объяснил. Спасибо.

vintrazor
Автор

хватит гнусавить. ничего ж не понятно. Купи себе нормальный Микрофон!

Huymamin