Урок робототехники №5 Кнопки и входы в Ардуино

Раздел Дополнительное образование
Класс 7 класс
Тип Конспекты
Автор
Дата
Формат docx
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

6 урок Ардуино


Кнопка
В следующем скетче будет использоваться кнопка с нормально разомкнутыми контактами, без фиксации.Это значит, что пока кнопка не нажата, ток через неё не идёт, а после отпускания, кнопка возвращается в исходное положение.
В схеме, помимо кнопки используется резистор. В данном случае он не ограничивает ток, а "подтягивает" кнопку к 0в (GND). Т.е. пока кнопка не нажата на выводе Ardunio, к которому она подключена, будет низкий уровень. Резистор, используемый в схеме 10 кОм.

//определяем нажатие кнопки

int buttonPin = 7;

void setup(){

pinMode(buttonPin, INPUT);//инициализируем пин на вход

Serial.begin(9600);//инициализируем последовательный порт

}

void loop(){

if (digitalRead(buttonPin)==HIGH){//если кнопка нажата

Serial.println("pressed"); // выводим надпись "pressed"

} else {

Serial.println("unpressed");// иначе "unpressed"

}

}

В этом скетче несколько новых команд.
digitalRead(pinNumber)-эта команда принимает значение High (высокий уровень) и low (низкий уровень), того вывода, который мы проверяем. Предварительно в setup() этот вывод надо настроить на вход.
pinMode (buttonPin, INPUT); //где buttonPin это номер вывода, куда подсоединяется кнопка.
Последовательный порт позволяет отправлять Ardunio сообщения на компьютер, в то время, как сам контроллер выполняет программу. Это полезно для отладки программы, отправки сообщений на другие устройства или приложения. Чтобы включить передачу данных через последовательный порт (другое название UART или USART), надо инициализировать его в setup()
Serial.begin() имеет всего один аргумент-это скорость передачи данных между Ardunio и компьютером. скетче используется команда Serial.print() для вывода сообщения на экран в Ardunio IDE (Tools >> Serial Monitor).
If/else- конструкция позволяют контролировать ход выполнения программы, объеденив несколько проверок в одном месте.If(если) digitalRead возвращает значение HIGH, то на мониторе выводится слово "нажата". Else(иначе) на мониторе выводится слово " отжата" . Теперь можно попробовать включать и выключать светодиод по нажатию кнопки.

//button press detection with LED output

int buttonPin = 7;

int ledPin = 8;

void setup(){

pinMode(buttonPin, INPUT);//this time we will set button pin as INPUT

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop(){

if (digitalRead(buttonPin)==HIGH){

digitalWrite(ledPin,HIGH);

Serial.println("pressed");

} else {

digitalWrite(ledPin,LOW);

Serial.println("unpressed");

}

}

Аналоговый вход.
analogRead (pinNumber) analogRead позволяет считать данные с одного из аналоговых выводов Ardunio и выводит значение в диапазоне от 0 (0В) до 1023 (5В). Если напряжение на аналоговом входе будет равно 2.5В, то будет напечатано 2.5 / 5 * 1023 = 512
analogRead имеет только один аргумент- Это номер аналогового входа (А0-А5). В следующем скетче приводится код считывания напряжения с потенциометра. Для этого подключите переменный резистор, крайними выводами на пины 5V и GND, а средний вывод на вход А0.

Запустите следующий код и посмотрите в serial monitor, как меняются значения в зависимости от поворота ручки резистора.

//analog input

int potPin = A0;//к этому пину подсоединяется центральный вывод потенциометра

void setup(){

//аналоговый пин по умолчанию включен на вход, поэтому инициализация не нужна

Serial.begin(9600);

}

void loop(){

int potVal = analogRead(potPin);//potVal is a number between 0 and 1023

Serial.println(potVal);

}

Следующий скетч объединяет скетч нажатия кнопки и скетч управления яркостью светодиода. Светодиод будет включаться от кнопки, и управлять яркостью свечения будет потенциометр.

//button press detection with LED output and variable intensity

int buttonPin = 7;

int ledPin = 9;

int potPin = A0;

void setup(){

pinMode(buttonPin, INPUT);

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop(){

if (digitalRead(buttonPin)==HIGH){//if button pressed

int analogVal = analogRead(potPin);

int scaledVal = map(analogVal, 0, 1023, 0, 255);

analogWrite(ledPin, scaledVal);//turn on led with intensity set by pot

Serial.println("pressed");

} else {

digitalWrite(ledPin, LOW);//turn off if button is not pressed

Serial.println("unpressed");

}

}



© 2010-2022