Аналоговые входы

GOODZM
Offline
Зарегистрирован: 10.05.2019

Уважаемые жители этого форума, абсолютно недавно начал изучать вселенную программирования и мир Arduino. 

Пытаюсь разобраться с аналоговыми входами и RGB-светодиами , но ничего не выходит :(

Подскажите , пожалуйста, какие команды необходимо использовать, дабы при каждом следующем нажатии кнопки , подключенной к аналоговому входу , RGB-светодиод изменял цвет с красного на зеленый, и , само собой, с зеленого на красный. 

GOODZM
Offline
Зарегистрирован: 10.05.2019

На цифровых входах исполнить это не составило труда вообще. 

GOODZM
Offline
Зарегистрирован: 10.05.2019
const int  green=8;
const int  green1=7;
const int  red=13;
const int  red1=12;
const int  BUTTON=2;
 
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledMode = 0;
 
void setup()
{
  pinMode (green, OUTPUT);
  pinMode (green1, OUTPUT);
  pinMode (red, OUTPUT);
  pinMode (red1, OUTPUT);
  pinMode (BUTTON, INPUT);
}
 
void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    ledMode++;
  }
  lastButton = currentButton;
 
  if (ledMode == 3) ledMode = 1;
  setMode(ledMode);
}

boolean debounce(boolean last)
{
  boolean current = digitalRead(BUTTON);
  if (last != current)
  {
    delay(5);
    current = digitalRead(BUTTON);
  }
  return current;
}

void setMode(int mode)
{
  if (mode == 1)
  {
    digitalWrite(red,LOW);
    digitalWrite(red1,LOW);
    digitalWrite(green, HIGH);
    delay(1000);
    digitalWrite(green1, HIGH);
  }
  else if  (mode == 2)
   {
    digitalWrite(green,LOW);
    digitalWrite(green1,LOW);
    digitalWrite(red, HIGH);
    delay(1000);
    digitalWrite(red1,HIGH);
   }
}

 

GOODZM
Offline
Зарегистрирован: 10.05.2019

Выше, собственно, скетч для цифровых входом платы. Каким образом можно доработать под аналоговые входы ?

Причем, не указал главный момент! К одному аналоговому входу будет подключено несколько кнопок...Вот! Ключевой момент.. То есть суть заключается в том, что я к одному аналоговому входу подключаю , допустим, 2е кнопки. И одна из этих кнопок зажигает один RBG-светодиод в начале красным светом, а после повторного нажатия зеленым , и затем при следующем нажатии опять зажигает его красным.

Вторая же кнопка делает всё тоже самое, только с другим светодиодом

sadman41
Offline
Зарегистрирован: 19.10.2016

А как Вы пробовали обрабатывать кнопки на аналоговом входе? Насколько я помню - никакого rocket science в этом нет, всё изжёвано давно и даже на этом форуме несколько постов было посвящено "проблеме".

GOODZM
Offline
Зарегистрирован: 10.05.2019

Как подключать несколько кнопок к аналоговму входу я знаю. Причем есть скетч. Проблема заключается в том, что я не понимаю как мне сделать конкретные обращения к каждой кнопке. подключенной к одному аналоговому входу. 

void setup () 
  {
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  }

void loop() {
  int sensorValue = analogRead(A0);
  if (sensorValue >=100 && sensorValue <300)
  {
  digitalWrite(8,HIGH);
  digitalWrite(7,LOW);
  digitalWrite(6,LOW);
  digitalWrite(5,LOW);  
  }
  else if (sensorValue >= 300 && sensorValue < 450)
  {
  digitalWrite(8,LOW);
  digitalWrite(7,HIGH);
  digitalWrite(6,LOW);
  digitalWrite(5,LOW);  
  }
  else if (sensorValue >= 450 && sensorValue < 700)
  {
  digitalWrite(8,LOW);
  digitalWrite(7,LOW);
  digitalWrite(6,HIGH);
  digitalWrite(5,LOW);  
  }
  else if (sensorValue >= 700 && sensorValue < 1023)
  {
  digitalWrite(8,LOW);
  digitalWrite(7,LOW);
  digitalWrite(6,LOW);
  digitalWrite(5,HIGH);  
  }
  else
  {
  digitalWrite(8,LOW);
  digitalWrite(7,LOW);
  digitalWrite(6,LOW);
  digitalWrite(5,LOW); 
  }
  delay(20);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Я тоже не понимаю, что такое "конкретные обращения к каждой кнопке". Код запостили - это хорошо. Но не пояснили что он делает "не так" - это плохо. По мне так нормальный код.

svm
Онлайн
Зарегистрирован: 06.11.2016

Кнопки должны иметь индивидуальные резисторы, тогда ардуина сможет их различать. Если их просто подключить и пронумеровать, то вряд-ли ардуина поймет ваш замысел.

nik182
Offline
Зарегистрирован: 04.05.2015

Прочитай статью и посмотри скетч. Там есть всё что ты хочешь.

https://arduinomaster.ru/platy-arduino/arduino-lcd-keypad-shield/

GOODZM
Offline
Зарегистрирован: 10.05.2019

Так.  замысел такой - я подключаю несколько кнопок к аналоговому входу. Каждая же кнопка в свою очередь зажигает определенный RBG-светодиод. Причем , первое нажатие кнопки зажигает светоид красным цветом, следующее нажатие - зеленым , затем опять красный и так далее... Остальные же кнопки делают всё тоже самое, только с другими светодиодами!

И вот реализовать это на кнопках , подключенных к аналоговым входам не выходит, когда с цифровыми входами проблем нет.

GOODZM
Offline
Зарегистрирован: 10.05.2019

резисторы имеются. Эти нюансы учитывал 

GOODZM
Offline
Зарегистрирован: 10.05.2019

Благодарю, сейчас изучу

svm
Онлайн
Зарегистрирован: 06.11.2016

Вывдите значение sensorValue  в монитор.

bwn
Offline
Зарегистрирован: 25.08.2014

Найдите главное отличие кода для цифровых от кода для аналоговых. Подсказка - для чего в первом коде служить переменная ledMode, в чем ее назначение? Что выполняет ее функцию во втором коде?