Arduino:Примеры/WhileLoop: различия между версиями
Myagkij (обсуждение | вклад) Нет описания правки |
Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
= Цикл While <ref>[http://www.arduino.cc/en/Tutorial/WhileLoop Arduino - While Loop]</ref>= | |||
Иногда требуется, чтобы вся программа остановилась и выполняла одно единственное действие, и сделать это можно при помощи цикла while(). Этот пример демонстрирует, как использовать его для калибровки значений, считанных с аналогового датчика. | Иногда требуется, чтобы вся программа остановилась и выполняла одно единственное действие, и сделать это можно при помощи цикла while(). Этот пример демонстрирует, как использовать его для калибровки значений, считанных с аналогового датчика. | ||
Строка 32: | Строка 32: | ||
== Код == | == Код == | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Условные конструкции – оператор While | Условные конструкции – оператор While | ||
Строка 121: | Строка 121: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
= См.также= | |||
# while() | # while() | ||
Строка 135: | Строка 135: | ||
# Array | # Array | ||
=Внешние ссылки= | |||
<references /> | <references /> | ||
{{Навигационная таблица/ | {{Навигационная таблица/Портал/Arduino}} | ||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:35, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Цикл While [1]
Иногда требуется, чтобы вся программа остановилась и выполняла одно единственное действие, и сделать это можно при помощи цикла while(). Этот пример демонстрирует, как использовать его для калибровки значений, считанных с аналогового датчика.
В главном цикле цикла (см. скетч ниже) программа считывает значения фоторезистора, подключенного к 0-ому аналоговому контакту, а затем использует их для изменения яркости светодиода, подключенного к 9-ому цифровому контакту. Но в то же время, пока будет нажата кнопка, подключенная ко 2-ому цифровому контакту, в программе будет работать функция calibrate(). Ее задача – отслеживать самые высокие и низкие значения, которые считываются от аналогового датчика. Но стоит отпустить кнопку, как программа снова запустит свой главный цикл.
При помощи этого метода можно обновить минимальные и максимальные значения данных от фоторезистора (это может потребоваться, например, при изменении условий освещения).
Необходимое оборудование
- Плата Arduino;
- Одна кнопка;
- Фоторезистор (или другой аналоговый датчик);
- Два резистора на 10 кОм;
- Один резистор на 220 Ом;
- Макетная плата Breadboard;
Цепь
Подключите аналоговый датчик (например, потенциометр или светочувствительный датчик) к 0-ому входному аналоговому контакту, а также к 5-вольтовому напряжению и, через 10000-омовый резистор, к «земле». Кнопку подключите ко 2-ому цифровому контакту и, опять же, к 5-вольтовому и (через 10000-омовый резистор) заземляющему контактам. Светодиод подключите к «земле» и (через 220-омовый резистор) к 9-ому цифровому контакту.
Схема
Код
/*
Условные конструкции – оператор While
Этот пример демонстрирует использование оператора while().
Пока нажата кнопка, в программе будет работать только функция калибровки.
На основе данных от датчика, считанных за это время, будут определены новый максимум и минимум.
Это вариация примера «Калибровка».
Цепь:
* фоторезистор подключен к 0-ому аналоговому и 5-вольтовому контактам
* 10000-омовый резистор подключен к «земле» и 0-ому аналоговому контакту
* светодиод через 220-омовый резистор подключен к 9-ому цифровому контакту, а также к «земле»
* кнопка подключена ко 2-ому цифровому и 5-вольтовому контактам
* 10000-омовый резистор подключен ко 2-ому цифровому контакту и «земле»
Создан 17 января 2009,
модифицирован 30 августа 2011 Томом Иго (Tom Igoe).
Этот пример не защищен авторским правом.
http://arduino.cc/en/Tutorial/WhileLoop
*/
// это константы, т.е. значения, которые не изменятся:
const int sensorPin = A0; // контакт, к которому подключен датчик
const int ledPin = 9; // контакт, к которому подключен светодиод
const int indicatorLedPin = 13; // контакт, к которому подключен встроенный светодиод
const int buttonPin = 2; // контакт, к которому подключена кнопка
// это переменные, т.е. значения, которые изменятся:
int sensorMin = 1023; // минимальное значение от датчика
int sensorMax = 0; // максимальное значение от датчика
int sensorValue = 0; // значение, считанное от датчика
void setup() {
// задаем контакты светодиодов как выходные,
// а контакт кнопки – как входной
pinMode(indicatorLedPin, OUTPUT);
pinMode (ledPin, OUTPUT);
pinMode (buttonPin, INPUT);
}
void loop() {
// пока нажата кнопка, берем данные для калибровки:
while (digitalRead(buttonPin) == HIGH) {
calibrate();
}
// даем сигнал о начале калибровочного периода:
digitalWrite(indicatorLedPin, LOW);
// считываем данные от датчика:
sensorValue = analogRead(sensorPin);
// применяем калибровку к считанным данным:
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
// задаем лимит, если во время калибровки данные от датчика
// вышли за пределы нужного диапазона:
sensorValue = constrain(sensorValue, 0, 255);
// меняем яркость светодиода на основе откалиброванных значений:
analogWrite(ledPin, sensorValue);
}
void calibrate() {
// включаем светодиод, оповещая о том, что калибровка завершена:
digitalWrite(indicatorLedPin, HIGH);
// считываем данные от датчика:
sensorValue = analogRead(sensorPin);
// записываем максимальное значение:
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// записываем минимальное значение:
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
См.также
- while()
- digitalRead()
- digitalWrite()
- analogRead()
- analogWrite()
- map()
- constrain()
- if()
- For Loop
- Switch Case
- Array
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino