Примеры подключения компонентов Arduino
Светодиод
const int led = 10; // задаём номер рабочего пина для светодиода
void setup()
{
pinMode(led, OUTPUT);
}
void loop()
{
// выполняем мигание светодиодом
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Замечание: подключение светодиода к ШИМ позволяет управлять его яркостью
RGB-светодиод
// задаём номера рабочих пинов для светодиода
const int red = 9;
const int green = 10;
const int blue = 11;
void setup()
{
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
void loop()
{
// получаем фиолетовый цвет
setColor(255,0,255);
}
void setColor(int redValue, int greenValue, int blueValue) // функция установки яркости светодиодов
{
analogWrite(red, redValue);
analogWrite(green, greenValue);
analogWrite(blue, greenValue);
}
Замечания:
DC мотор
const int motor = 10; // задаём номер рабочего пина для мотора
void setup()
{
pinMode(motor, OUTPUT);
}
void loop()
{
for (int i = 0; i < 255; i = i + 1) // постепенно увеличиваем вращение
{
analogWrite(motor, i);
delay(50);
}
for (int i = 255; i > 0; i = i - 1) //постепенно уменьшаем вращение
{
analogWrite(motor, i);
delay(50);
}
}
Замечание: DC мотор можно подключать и к обычным пинам, которые не имеют ШИМ
Кнопка
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP); // подтяжка к питанию
}
void loop() {
int butt
onState= digitalRead(2); // состяние кнопки
Serial.println(buttonState);
}
Пример ниже демонстрирует пример реализации включателя с помощью кнопки:
int lastButtonState = 0;
bool buttonFlag = false; // флаг переключателя по нажатию кнопки
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
}
void loop()
{
int buttonState = digitalRead(2);
if (buttonState != lastButtonState)
{
if (buttonState == LOW)
{
buttonFlag = !buttonFlag; // переключаем флаг
}
delay(5);
}
lastButtonState = buttonState; // сохраняем считанное состояние
delay(10);
}
Замечание: в случае подтяжки к питанию через (INPUT_PULLUP) не требуется подключение внешнего резистора, однако работа кнопки инвертируется
Ультразвуковой дальномер
int trigPin = 10; // объявляем пин trig
int echoPin = 11; // объявляем пин echo
void setup()
{
Serial.begin(9600); //открытие последовательного порта для чтения/записи
pinMode(trigPin, OUTPUT);
pinMode(ecohPin, INPUT);
}
void loop()
{
long duration, distance;
digitalWrite(trigPin, LOW); // этой и 4 следующими строчками создаём импульс длиной 5 мкс
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // измеряем время, за которое на пине echoPin установится высокий сигнал
distance = duration / 29 / 2;
Serial.print(distance);
Serial.println(“ cm”);
delay(100);
}
Переменный резистор (потенциометр)
int inputPin = A0; // входной пин, на котором есть АЦП
int value = 0; // переменная для хранения значений
void setup()
{
Serial.begin(9600); //открытие последовательного порта
pinMode(A0, INPUT);
}
void loop()
{
value = analogRead(A0); // считывание значения в переменную
Serial.println(value); // вывод значения в монитор порта
}
Сервопривод
#include <Servo.h> // библиотека для работы с сервоприводами
int pos = 0; // переменная-счётчик для цикла
Servo servo; // переменная типа данных Servo (объект)
void setup()
{
servo.attach(9); // подключаем сервопривод к пину 9
}
void loop()
{
for (pos = 0; pos <= 180; pos += 1) //цикл для поворота сервопривода
{
servo.write(pos); // указываем позицию, в которую нужно повернуться
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) //цикл для обратного поворота
{
servo.write(pos); // указываем позицию, в которую нужно повернуться
delay(15);
}
}
LCD дисплей
#include <LiquidCrystal.h> // библиотека для работы c LCD дисплеем
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // инициализация, передача номеров пинов
void setup()
{
lcd.begin(16, 2); // установка кол-ва столбцов и строк на дисплее
lcd.print("hello, world!"); // вывод надписи на экран
}
void loop()
{
lcd.setCursor(0, 1); // установка курсора в первую ячейку второй строки
int value = 1024;
lcd.print(value); // вывод значения переменной на второй строке
}
Таблица ниже описывает подкючение пинов дисплея к пинам Arduino:
LCD pin | Arduino pin |
---|---|
RS | 12 |
E | 11 |
D4 | 5 |
D5 | 4 |
D6 | 3 |
D7 | 2 |
R/W | GND |
VSS | GND |
VCC | 5V |
Датчик температуры
#define TMP A5 // объявляем идентификатор TMP на пин A5
int temp = 0; // объявляем переменную для хранения температуры
int getTemp() // функция для опроса АЦП и расчёта значения температуры
{
int valueADC = analogRead(TMP);
int temp = map(valueADC, 20, 358, -40, 125);
return temp;
}
void setup() {
Serial.begin(9600); //открытие последовательного порта для чтения/записи
pinMode(TMP, INPUT);
}
void loop() {
temp = getTemp(); // записываем в переменную temp значение температуры при помощи getTemp()
Serial.println(temp); // выводим значение в монитор порта
}
Фоторезистор
int sensorRead = 0; // переменная для хранения значения
void setup()
{
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop()
{
sensorRead = analogRead(A0); // считыввание напряжения с фоторезистора
Serial.println(sensorRead); // вывод значения в монитор порта
}
Замечание: фоторезистор одной ногой подключается к питанию, второй – одновременно к пину с АЦП и через резистор к земле
Пьезодинамик (пищалка)
int p = 3; //объявляем переменную с номером пина, на который мы
void setup()
{
pinMode(p, OUTPUT); //объявляем пин как выход
}
void loop() //процедура loop
{
tone (p, 500); //включаем на 500 Гц
delay(100); //ждем 100 Мс
}
Замечание: при использовании функции tone() невозможно одновременно использовать ШИМ на пинах 3 и 11 , а также нельзя запустить одновременно две мелодии двумя командами tone() – в каждый момент времени будет исполняться только одна мелодия
Адресная светодиодная лента
#include <Adafruit_NeoPixel.h>
#define PIN 2 // номер пина, к которому подключена лента
#define NUMPIXELS 12 // число светодиодов в ленте
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN); // создание переменной (объекта) с именем pixels
void setup()
{
pixels.begin(); // инициализация работы
}
void loop()
{
for (int i=0; i < NUMPIXELS; i++) // цикл для прохода по всем светодиодам ленты
{
pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // установка красного цвета
pixels.show(); // применение цвета к светодиоду с номером i
delay(10);
}
delay(1000);
for (int i=0; i < NUMPIXELS; i++)
{
pixels.setPixelColor(i, pixels.Color(0, 0, 255)); // установка синего цвета
pixels.show(); // применение цвета к светодиоду с номером i
delay(10);
}
delay(1000);
for (int i=0; i < NUMPIXELS; i++)
{
pixels.setPixelColor(i, pixels.Color(255, 69, 0)); // установка оранжевого цвета
pixels.show(); // применение цвета к светодиоду с номером i
delay(10);
}
delay(1000);
}
Обратная связь
Так же по всем вопросам: dt_smartpark@miee.ru