Чтение и запись сигналов в Arduino

Для управления роботами научимся писать команды.
На плате есть цифровые порты(идут обычно в линии слева, и аналоговые справа). Аналоговые пины можно испльзовать как цифровые.

analogRead только на аналоговых пинах может считывать от 0 до 1023, применяют для считывания показаний датчиков.
analogWrite работает только на PWM-цифровых(пульсирующих) пинах, записывает от 0 до 255 (на цифровых портах, помеченных на плате тильдой~). В случае моторов, свечения светодиодов применяют.

PWM — Pulse Width Modulation (широтно-импульсная модуляция)

Обратите внимание, что записав analogWrite’ом число 127, вы получите сигнал-импульс в 5 вольт, который будет занимать половину одного периода сигнала. И считать digitalRead’ом 1-у у Вас получится с вероятностью 50/50.
digitalRead — считать из пина 0 или 1, digitalWrite — записать в пин 0 или 1.

Пример, сердцебиение: Самый простейший робот — это сведиод, который мигает в такт сердцу человека, горит 300 миллисекунд каждую секунду. У человека, к примеру, 60 ударов в минуту. Для удобства разработчиков, с 13-м пином на Arduino-плате связан светодиод, который загорается когда в пин подаётся сигнал 1(HIGH).

int pulse=300;

void setup() {
pinMode(13,1);//ставим 13-й пин на вывод
}

void loop() {

digitalWrite(13,1);// тоже самое, что digitalWrite(13,HIGH);
delay(300);//ждём 300 миллисекунд
digitalWrite(13,0);//тоже самое, что digitalWrite(13,LOW);
delay(1000-pulse);
}

Пример, светодиод горит по нажатию на кнопку:

В данном примере, по нажатию на кнопку, загорается встроенный в плату светодиод. Почитайте пожалуйста статью о режиме пина INPUT_PULLUP.

Новичкам: 5-й пин проводком соединяем с кнопкой, и ещё кнопку соединяем с землёй.

int switch_state;

void setup() {
pinMode(5,INPUT_PULLUP);
pinMode(13, OUTPUT);
}

void loop() {

switch_state=digitalRead(5);
if(switch_state)
digitalWrite(13,0);
else
digitalWrite(13,1);
}

Пример, узнаём температуру и влажность помещения:
А теперь прочитаем температуру и влажность с помощью датчика-модуля DHT11
левый его пин сигнальный(S) его соединяем с нулевым аналоговым пином(A0), средний пин соединяем с питанием, правый пин вставляем в землю

В этом примере используется серийный порт коммуникации, он реализован в Ардуино с помощью класса Serial. Скорость передачи данных по этому соединению задаю 9600. Функция print из класса Serial записывает данные, и их можно посмотреть через Serial-монитор. Запустили скетч(синоним мини-программа) на выполнение, дождались статуса Done uploading, а потом открываем Serial-монитор горячими клавишами Shift+Ctrl+M и видим показания датчика-модуля.


#include "dht.h"//подключаем библиотеку управления dht11
dht THSensor;//создаём объект THSensor класса dht

void setup(){
Serial.begin(9600);
}

void loop(){
THSensor.read11(A0);//заполняем объект показаниями датчика
Serial.print("humidity — ");
Serial.print(THSensor.humidity);//записываем в серийный порт содержимое свойства humidity объекта THSensor
Serial.print("%, ");
Serial.print("temperature — ");
Serial.print(THSensor.temperature);
Serial.println("C");
delay(6000);
}


Пример, разноцветный светодиод:

Этот скетч каждые 5 секунд окрашивает rgb-светодиод в случайный цвет.
Светодиод у меня имеет 4 пина, левый — красный канал, далее земля, потом зёлёный и самый правый синий. Цветовые каналы подключал через резисторы в 220 Ом.

Для новичков: 5-й пин соединяю с красным каналом(левым пином светодиода), 6 — с зелёным, 3 — синим.

int r_pin= 5;
int g_pin = 6;
int b_pin = 3;
int r,g,b;
void setup() {
pinMode(r_pin, OUTPUT);
pinMode(g_pin, OUTPUT);
pinMode(b_pin, OUTPUT);
randomSeed(analogRead(0));//запускаем генератор случайности
}
void loop() {
r=random(0, 255);//получаем случайное число от 0 до 255
analogWrite(r_pin,r);
g=random(0, 255);
analogWrite(g_pin,g);
b=random(0, 255);
analogWrite(b_pin,b);
delay(5000);
}