Функции и кнопки

DimaGilev
Offline
Зарегистрирован: 05.03.2016
#define BUTTON_PIN1  6
#define BUTTON_PIN2  7
#define BUTTON_PIN3  8
#define LED_PIN1    9 
#define LED_PIN2    10
#define LED_PIN3   11

bool ButtonM;
bool ButtonOK;
bool ButtonP;

 boolean buttonWasUp = true;  // была ли кнопка отпущена?
 
 boolean Button(bool A,bool B){
  A = digitalRead(B);
if (buttonWasUp && A) {
    delay(10);
  A = digitalRead(B);
  return true;
 }else
  return false;
}

void setup()
{
 
  pinMode(LED_PIN1, OUTPUT);
   pinMode(LED_PIN2, OUTPUT);
    pinMode(LED_PIN3, OUTPUT);
  pinMode(BUTTON_PIN1, INPUT);
   pinMode(BUTTON_PIN2, INPUT);
    pinMode(BUTTON_PIN3, INPUT);
 
}

void loop()
{
  Button(ButtonM, BUTTON_PIN1);
  if (ButtonM)  
      digitalWrite(LED_PIN1, HIGH);
else digitalWrite(LED_PIN1, LOW);

 Button(ButtonOK, BUTTON_PIN2);
  if (ButtonOK)  
      digitalWrite(LED_PIN2, HIGH);
else digitalWrite(LED_PIN2, LOW);

 Button(ButtonP, BUTTON_PIN3);
  if (ButtonP)  
      digitalWrite(LED_PIN3, HIGH);
else digitalWrite(LED_PIN3, LOW);

}

 

DimaGilev
Offline
Зарегистрирован: 05.03.2016

DimaGilev пишет:

#define BUTTON_PIN1  6
#define BUTTON_PIN2  7
#define BUTTON_PIN3  8
#define LED_PIN1    9 
#define LED_PIN2    10
#define LED_PIN3   11

bool ButtonM;
bool ButtonOK;
bool ButtonP;

 boolean buttonWasUp = true;  // была ли кнопка отпущена?
 
 boolean Button(bool A,bool B){
  A = digitalRead(B);
if (buttonWasUp && A) {
    delay(10);
  A = digitalRead(B);
  return true;
 }else
  return false;
}

void setup()
{
 
  pinMode(LED_PIN1, OUTPUT);
   pinMode(LED_PIN2, OUTPUT);
    pinMode(LED_PIN3, OUTPUT);
  pinMode(BUTTON_PIN1, INPUT);
   pinMode(BUTTON_PIN2, INPUT);
    pinMode(BUTTON_PIN3, INPUT);
 
}

void loop()
{
  Button(ButtonM, BUTTON_PIN1);
  if (ButtonM)  
      digitalWrite(LED_PIN1, HIGH);
else digitalWrite(LED_PIN1, LOW);

 Button(ButtonOK, BUTTON_PIN2);
  if (ButtonOK)  
      digitalWrite(LED_PIN2, HIGH);
else digitalWrite(LED_PIN2, LOW);

 Button(ButtonP, BUTTON_PIN3);
  if (ButtonP)  
      digitalWrite(LED_PIN3, HIGH);
else digitalWrite(LED_PIN3, LOW);

}

 

 

Ребята!!! Решил освоить функции, что бы коды выглядили компактнее, и разборчевее. Но беда в том что у меня не получается))) Пример такой: Хотел написать функцию считывания кнопки, и защиты от дребезга. А потом ее вывести. Отдельная кнопка, Отдельный светодиод. Ошибок компилятор не выдает. А загружаю в ардуино, ничего не работатет. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Вы считаете, что после вызова функции Button(ButtonM, BUTTON_PIN1);, переменная ButtonM поменяеет свое значение? Ничуть ни бывало. Функции никогда не изменяютс своих аргуметнов. Они могут изменить кусок памяти, на который указывает аргумент-указатель или ссылка, но сам аргумент функции не меняют никогда.

2. Второй аргумент Вашей функции имеет тип bool, т.е. может примниать значени true и false и никаких других. А  передавать Вы пытаетесь номер пина. В результате Ваша функция всезда будет работать с первым пином (ну или с нулевым, если Вы его явно передадите) и никогда ни с каким другим.

3. Ну про передачу глобальных переменных через параметры я молчу - это не запрещено.

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Вот моё решение этой проблеммы, а есть ещё титановый лисапед в шапке форума

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Cпасибо за пояснение.

DimaGilev
Offline
Зарегистрирован: 05.03.2016

Благодарю!

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

yul-i-an пишет:

титановый лисапед в шапке форума

за лисапед ответишь! :D