История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Топ:
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
Мы передаем в digitalWrite не конкретное значение HIGH или LOW, а просто булеву переменную ledEnabled. В зависимости от того, какое значение было для нее вычислено, светодиод будет зажигаться или гаситься.
Задания для самостоятельного решения
Измените код так, чтобы светодиод переключался только после отпускания кнопки.
Листинг:
1. #define BUTTON_PIN 3
2. #define LED_PIN 13
3. boolean buttonWasUp = true;
4. boolean ledEnabled = false;
5. void setup()
6. {
7. pinMode(LED_PIN, OUTPUT);
8. pinMode(BUTTON_PIN, INPUT_PULLUP);
9. }
10. void loop()
11. {
12. boolean buttonIsUp = digitalRead(BUTTON_PIN);
13. if (!buttonWasUp && buttonIsUp) {
14. delay(10);
15. buttonIsUp = digitalRead(BUTTON_PIN);
16. if (buttonIsUp)
17. {
18. ledEnabled =!ledEnabled;
19. digitalWrite(LED_PIN, ledEnabled);
20. }
21. }
22. buttonWasUp = buttonIsUp;
23. }
Добавьте в схему еще одну кнопку и доработайте код, чтобы светодиод зажигался только при нажатии обеих кнопок.
Листинг:
1. #define BUTTON_PIN 3
2. #define BUTTON_PIN2 4
3. #define LED_PIN 13
4. boolean buttonWasUp = true;
5. boolean buttonWasUp2 = true;
6. boolean ledEnabled = false;
7. void setup()
8. {
9. pinMode(LED_PIN, OUTPUT);
10. pinMode(BUTTON_PIN, INPUT_PULLUP);
11. pinMode(BUTTON_PIN2, INPUT_PULLUP);
12. }
13. void loop()
14. {
15. boolean buttonIsUp = digitalRead(BUTTON_PIN);
16. boolean buttonIsUp2 = digitalRead(BUTTON_PIN2);
17. if (buttonWasUp &&!buttonIsUp) {
18. if (buttonWasUp2 &&!buttonIsUp2)
19. delay(10);
20. buttonIsUp = digitalRead(BUTTON_PIN);
21. buttonIsUp2 = digitalRead(BUTTON_PIN2);
22. if (!buttonIsUp &&!buttonIsUp2)
23. {
24. ledEnabled =!ledEnabled;
25. digitalWrite(LED_PIN, ledEnabled);
26. }
27. }
28. buttonWasUp = buttonIsUp;
29. buttonWasUp2 = buttonIsUp2;
30. }
Эксперимент 11. Светильник с кнопочным управлением
В этом эксперименте мы добавляем порцию яркости светодиоду одной кнопкой и убавляем другой.
Принципиальная схема


Код
1. #define PLUS_BUTTON_PIN 2
2. #define MINUS_BUTTON_PIN 3
3. #define LED_PIN 9
4. int brightness = 100;
5. boolean plusUp = true;
6. boolean minusUp = true;
7. void setup()
8. {
9. pinMode(LED_PIN, OUTPUT);
10. pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP);
11. pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP);
12. }
13. void loop()
14. {
15. analogWrite(LED_PIN, brightness);
16. plusUp = handleClick(PLUS_BUTTON_PIN, plusUp, +35);
17. minusUp = handleClick(MINUS_BUTTON_PIN, minusUp, -35);
18. }
19. boolean handleClick(int buttonPin, boolean wasUp, int delta)
20. {
21. boolean isUp = digitalRead(buttonPin);
22. if (wasUp &&!isUp) {
23. delay(10);
24. isUp = digitalRead(buttonPin);
25. if (!isUp)
26. brightness = constrain(brightness + delta, 0, 255);
27. }
28. return isUp;
29. }
Вопросы для проверки себя
1.Что необходимо для определения собственной функции?
Чтобы определить собственную функцию, нам нужно:
· Объявить, какой тип данных она будет возвращать. В нашем случае это boolean. Если функция только выполняет какие-то действия и не возвращает никакого значения, используйте ключевое слово void
· Назначить функции имя — идентификатор. Здесь действуют те же правила, что при именовании переменных и констант. Называть функции принято в том же стиле какПеременные.
· В круглых скобках перечислить передаваемые в функцию параметры, указав тип каждого. Это является объявлением переменных, видимых внутри вновь создаваемой функции, и только внутри нее. Например, если в данном эксперименте мы попробуем обратиться к wasUp или isUp из loop() получим от компилятора сообщение об ошибке. Точно так же, переменные, объявленные в loop, другим функциям не видны, но их значения можно передать в качестве параметров.
· Между парой фигурных скобой написать код, выполняемый функцией
· Если функция должна вернуть какое-то значение, с помощью ключевого слова return указать, какое значение возвращать. Это значение должно быть того типа, который мы объявили.
|
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!