Функции и кнопки
- Войдите на сайт для отправки комментариев
Пнд, 26/09/2016 - 21:05
#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); }
Ребята!!! Решил освоить функции, что бы коды выглядили компактнее, и разборчевее. Но беда в том что у меня не получается))) Пример такой: Хотел написать функцию считывания кнопки, и защиты от дребезга. А потом ее вывести. Отдельная кнопка, Отдельный светодиод. Ошибок компилятор не выдает. А загружаю в ардуино, ничего не работатет.
1. Вы считаете, что после вызова функции Button(ButtonM, BUTTON_PIN1);, переменная ButtonM поменяеет свое значение? Ничуть ни бывало. Функции никогда не изменяютс своих аргуметнов. Они могут изменить кусок памяти, на который указывает аргумент-указатель или ссылка, но сам аргумент функции не меняют никогда.
2. Второй аргумент Вашей функции имеет тип bool, т.е. может примниать значени true и false и никаких других. А передавать Вы пытаетесь номер пина. В результате Ваша функция всезда будет работать с первым пином (ну или с нулевым, если Вы его явно передадите) и никогда ни с каким другим.
3. Ну про передачу глобальных переменных через параметры я молчу - это не запрещено.
Вот моё решение этой проблеммы, а есть ещё титановый лисапед в шапке форума
Cпасибо за пояснение.
Благодарю!
титановый лисапед в шапке форума
за лисапед ответишь! :D