- Библиотеки
- Операторы
- Sketch
- Управляющие операторы
- Синтаксис
- Арифметические операторы
- Операторы сравнения
- Логические операторы
- Указатели доступа
- Битовые операторы
- Составные операторы
- Данные
- Типы данных
- Преобразование типов данных
- Область видимости переменных и квалификаторы
- Утилиты
- Функции
- Цифровой ввод/вывод
- Функция digitalRead()
- Аналоговый вход/выход
- Расширенный ввод/вывод
- Время
- Математические функции
- Тригонометрические функции
- Символы
- Случайные числа
- Биты и байты
- Внешние Прерывания
- Прерывания
- Функции передачи данных
- Функции
Функция digitalRead()
Функция считывает значение с заданного входа - 1 или 0.
Пример
int ledPin = 13; // Светодиод подключенный к вход/выходу 13
int inPin = 7; // кнопка на входе 7
int val = 0; // переменная для хранения значения
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливает режим работы - выход для 13го вход/выхода (pin)
pinMode(inPin, INPUT); // устанавливает режим работы - вход для 7го вход/выхода (pin)
}
void loop()
{
val = digitalRead(inPin); // считываем значение с входа
digitalWrite(ledPin, val); // устанавливаем значение на светодиоде равным значению входа кнопки
}
int ledPin = 13;
int inPin = 7;
int val = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT_PULLUP);
}
void loop()
{
val = !digitalRead(inPin);
digitalWrite(ledPin, val);
}
Код для этой схемы:
int ledPin = 12;
int inPin = 5;
int val = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop()
{
Serial.println(val);
val = !digitalRead(inPin);
digitalWrite(ledPin, val);
}
Может к кнопке километровый провод?
Чтобы на Arduino заработал датчик DTH11, сперва нужно установить для него библиотеку, скачав
Затем распаковать архив в папку библиотек для Arduino:
Запускаем программу и вставляем скетч:
#include "DHT.h"// подключаем библиотеку для датчика
DHT dht(2, DHT11); // сообщаем на каком порту будет датчик
void setup() {
dht.begin();// запускаем датчик DHT11
Serial.begin(9600);// подключаем монитор порта
Serial.println("DHT TEST");// пишем один раз
}
void loop() {
// считываем температуру (t) и влажность (h) каждые 250 мс
float h = dht.readHumidity();
float t = dht.readTemperature();
// выводим температуру (t) и влажность (h) на монитор порта
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
Загружаем код в плату, запускаем монитор порта и наблюдаем за изменением влажности и температуры.
#define pinX A2 // ось X джойстика
#define pinY A1 // ось Y джойстика
#define swPin 2 // кнопка джойстика
#define ledPin 13 // светодиод на Pin 13
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(pinX, INPUT);
pinMode(pinY, INPUT);
pinMode(swPin, INPUT);
digitalWrite(swPin, HIGH);
}
void loop() {
boolean ledState = digitalRead(swPin); // считываем состояние кнопки
digitalWrite(ledPin, ledState); // вкл./выкл. светодиод
int X = analogRead(pinX); // считываем значение оси Х
int Y = analogRead(pinY); // считываем значение оси Y
Serial.print(X); // выводим в Serial Monitor
Serial.print("t"); // табуляция
Serial.println(Y);
}
Сперва нужно загрузить специализированную библиотеку для дисплея в самой программе
Затем скаченный архив распаковать в папку libraries
Приведенный ниже код выводит на дисплей символы, буквы и знаки, вкл/выкл. часовой разделитель, проверяет режимы яркости. После проверки выдаст надпись dOnE.
#include
#include
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 2000
const uint8_t SEG_DONE[] = {
SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d
SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O
SEG_C | SEG_E | SEG_G, // n
SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E
};
TM1637Display display(CLK, DIO);
void setup()
{
}
void loop()
{
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
display.setBrightness(0x0f);
// All segments on
display.setSegments(data);
delay(TEST_DELAY);
// Selectively set different digits
data[0] = display.encodeDigit(0);
data[1] = display.encodeDigit(1);
data[2] = display.encodeDigit(2);
data[3] = display.encodeDigit(3);
display.setSegments(data);
delay(TEST_DELAY);
/*
for(k = 3; k >= 0; k--) {
display.setSegments(data, 1, k);
delay(TEST_DELAY);
}
*/
display.clear();
display.setSegments(data+2, 2, 2);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+2, 2, 1);
delay(TEST_DELAY);
display.clear();
display.setSegments(data+1, 3, 1);
delay(TEST_DELAY);
// Show decimal numbers with/without leading zeros
display.showNumberDec(0, false); // Expect: ___0
delay(TEST_DELAY);
display.showNumberDec(0, true); // Expect: 0000
delay(TEST_DELAY);
display.showNumberDec(1, false); // Expect: ___1
delay(TEST_DELAY);
display.showNumberDec(1, true); // Expect: 0001
delay(TEST_DELAY);
display.showNumberDec(301, false); // Expect: _301
delay(TEST_DELAY);
display.showNumberDec(301, true); // Expect: 0301
delay(TEST_DELAY);
display.clear();
display.showNumberDec(14, false, 2, 1); // Expect: _14_
delay(TEST_DELAY);
display.clear();
display.showNumberDec(4, true, 2, 2); // Expect: 04__
delay(TEST_DELAY);
display.showNumberDec(-1, false); // Expect: __-1
delay(TEST_DELAY);
display.showNumberDec(-12); // Expect: _-12
delay(TEST_DELAY);
display.showNumberDec(-999); // Expect: -999
delay(TEST_DELAY);
display.clear();
display.showNumberDec(-5, false, 3, 0); // Expect: _-5_
delay(TEST_DELAY);
display.showNumberHexEx(0xf1af); // Expect: f1Af
delay(TEST_DELAY);
display.showNumberHexEx(0x2c); // Expect: __2C
delay(TEST_DELAY);
display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1
delay(TEST_DELAY);
display.clear();
display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__
delay(TEST_DELAY);
// Run through all the dots
for(k=0; k <= 4; k++) {
display.showNumberDecEx(0, (0x80 >> k), true);
delay(TEST_DELAY);
}
// Brightness Test
for(k = 0; k < 4; k++)
data[k] = 0xff;
for(k = 0; k < 7; k++) {
display.setBrightness(k);
display.setSegments(data);
delay(TEST_DELAY);
}
// On/Off test
for(k = 0; k < 4; k++) {
display.setBrightness(7, false); // Turn off
display.setSegments(data);
delay(TEST_DELAY);
display.setBrightness(7, true); // Turn on
display.setSegments(data);
delay(TEST_DELAY);
}
// Done!
display.setSegments(SEG_DONE);
while(1);
}
Выводим информацию о влажности и температуре на светодиодный дисплей, заодно сравниваем показания на мониторе порта:
#include "DHT.h"
// подключаем библиотеку для датчика температуры и влажности DHT11
DHT dht(2, DHT11);
// сообщаем на каком порту (на 2-ом) будет датчик температуры и влажности DHT11
#include "TM1637.h"
// подключаем библиотеку для дисплея TM1637
//0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 это подсказка, код для букв дисплея
//0~9,A,b,C,d,E,F - буквы дисплея, а выше строка это их кодовое число
#define dht_pin 2 // подключаем пин 2 для датчика температуры и влажности DHT11
#define CLK 3// подключаем пин 3, контакт CLK для дисплея TM1637
#define DIO 2// подключаем пин 2, контакт DIO для дисплея TM1637
TM1637 tm1637(CLK, DIO);// сообщаем на каких портах будет дисплей TM1637
void setup()
{
dht.begin();// запускаем датчик DHT11
Serial.begin(9600);// подключаем монитор порта
Serial.println("DHT TEST");// пишем один раз
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);// устанавливаем яркость дисплея TM1637
//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7 0-7;
// - подсказка для яркости дисплея TM1637
delay(1500);// Пауза 1,5 секунды
}
void loop()
{
float h = dht.readHumidity(); // считываем влажность (h) каждые 250 мс
float t = dht.readTemperature(); // считываем температуру (t) каждые 250 мс
// выводим температуру (t) и влажность (h) на монитор порта
Serial.print("Humidity: "); // выводим надпись "Humidity: "
Serial.print(h); // выводим значение влажности после слова "Humidity: "
Serial.print(" % "); // выводим знак "%" после значения влажности, например "Humidity: 30 %"
Serial.print("Temperature: "); // выводим надпись "Temperature: "
Serial.print(t); // выводим значение влажности после слова "Temperature: "
Serial.println(" °C"); // выводим знак " °C" после значения влажности,
// например "Temperature: 24 °C"
dht.read(dht_pin);// считываем значение датчика температуры и влажности DHT11
//с пина куда он был подключен
int temp = t;// присваиваем переменной temp (температура) значение t
int humidity = h;// присваиваем переменной humidity (влажность) значение h
int digitoneT = temp / 10; // присваиваем переменной digitoneT значение
//переменной temp поделённой на 10
int digittwoT = temp % 10; // присваиваем переменной digittwoT остаток от деления
//двух чисел, например 25/10=2.5, то остаток равен 5
int digitoneH = humidity / 10; // присваиваем переменной digitoneH значение
//переменной humidity поделённой на 10
int digittwoH = humidity % 10; // присваиваем переменной digittwoH остаток от деления
//двух чисел, например 34/10=3.4, то остаток равен 4
tm1637.display(1, digitoneT); // выводим на дисплей TM1637 значение темепературы в целых десятках
tm1637.display(2, digittwoT); // выводим на дисплей TM1637 значение темепературы в целых единицах
tm1637.display(3, 12); // выводим на дисплей TM1637 знак Цельсий,
//то есть "С" (12) после значения температуры
delay (5000); // Пауза
tm1637.display(1, digitoneH); // выводим на дисплей TM1637 значение влажности в целых десятках
tm1637.display(2, digittwoH); // выводим на дисплей TM1637 значение влажности в целых единицах
tm1637.display(3, 15); // выводим на дисплей TM1637 другой знак,
//например "F" (15) после значения влажности
delay (5000); // Пауза
}
Ещё один вариант, но с выводом на дисплей знака градуса и влажности (туман - три полоски). Схема немного другая.
#include <Arduino.h>
#include <TM1637Display.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#define CLK 2
#define DIO 3
#define TEST_DELAY 5000
const uint8_t SEG_TEMP[] = {
!SEG_D | !SEG_E | !SEG_F | !SEG_G,
!SEG_A | !SEG_B | !SEG_F | !SEG_G,
!SEG_A | !SEG_B | !SEG_F | !SEG_G,
SEG_A | SEG_B | SEG_F | SEG_G, // знак градуса
};
const uint8_t SEG_VLAJ[] = {
!SEG_A | !SEG_D | !SEG_G,
!SEG_A | !SEG_D | !SEG_G,
!SEG_A | !SEG_D | !SEG_G,
SEG_A | SEG_D | SEG_G, // знак влажности
};
TM1637Display display(CLK, DIO);
void setup()
{
dht.begin();
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
int k;
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };
display.setBrightness(0x0f);
display.setSegments(SEG_TEMP);
display.showNumberDec(t, true, 2, 1);
delay(TEST_DELAY);
display.setSegments(SEG_VLAJ);
display.showNumberDec(h, false, 2, 1);
delay(TEST_DELAY);
}
int digitalPin = 2; // назначаем цифровой вывод "2"
int val = 0; // присваиваем переменной "val" нулевое значение
void setup()
{
pinMode(LED_BUILTIN, OUTPUT); // задействовать, но не включать встроенный светодиод
}
void loop()
{
val = digitalRead(digitalPin); // "val" считывает значение с вывода "2"
if (val == 1) // если val равно логической единице, то:
{
digitalWrite(LED_BUILTIN, HIGH); // включить встроенный светодиод
delay(1000); // задержать свечение светодиода на одну секунду
}
else // иначе (или val равно логическому нулю):
{
digitalWrite(LED_BUILTIN, LOW); // погасить встроенный светодиод
}
}
Для тех кто не знаком с языком программирования есть программа
Алгоритм составления из блоков такой:
bool _tim2I = 0;
bool _tim2O = 0;
unsigned long _tim2P = 0UL;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _trgr1 = 0;
void setup()
{
pinMode(2, INPUT);
pinMode(13, OUTPUT);
}
void loop()
{
//Плата:1
if( (digitalRead (2))) {_tim2O = 1; _tim2I = 1;
}
else { if(_tim2I)
{_tim2I = 0; _tim2P = millis();
}
else { if (_tim2O) {if ( _isTimer(_tim2P, 1000)) _tim2O = 0;}}}
if(_tim2O) _trgr1 = 0;
if( (digitalRead (2))) _trgr1 = 1;
if(_trgr1) {_tim1O = 1; _tim1I = 1;
}
else { if(_tim1I) {_tim1I = 0; _tim1P = millis();
}
else { if (_tim1O) {if ( _isTimer(_tim1P, 1000)) _tim1O = 0;}}}
digitalWrite(13, _tim1O);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime)
{return (currentTime>=(startTime + period));
}
else {return (currentTime >=(4294967295-startTime+period));}
}