Инструкции

Справочный раздел

В этом разделе Вы найдетё инструкции, справочники, и всевозможные хелпы по использованию программного обеспечения.

Разделы инструкций

В сети

Пользователей: 579
Из них просматривают:
Аналоги: 272. Галерея: 1. Даташиты: 194. Инструкции: 10. Новости: 21. Остальное: 5. Программы: 1. Производители: 1. Профиль пользователя: 8. Теги: 2. Форум: 64.
Участников: 2
Гостей: 577

Google , Яндекс , далее...
Рекорд 4345 человек онлайн установлен 21.09.2026.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
Оглавление

Функция 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);     // устанавливаем значение на светодиоде равным значению входа кнопки
}

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
 Функция digitalRead()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Интересный пример, получается такая картина: светодиод всегда светит, пока кнопка не нажата.
 Функция digitalRead()
Администратор
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 7458
не в сети
Это зависит от того,как ты подключил кнопку. Ты же к земле вывод подтягиваешь? Значит на входе --0,соотвественно, и на выходе получаешь  0, а светодиод ты тоже к  земле подтянул.
 Функция digitalRead()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Да всё верно, вывода у меня подтянут к земле. Теперь ясно как это работает. Порылся немного и есть вот такой пример, когда вывод тоже подтянут к земле и светодиод светится при нажатии кнопки:
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);
}
 Функция digitalRead()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Чтобы включенный светодиод не мерцал, так как это хорошо видно воочию и на мониторе порта куда подключена кнопка присутствует смесь нулей и единиц, то считывающий порт с кнопкой нужно подтянуть резистором 10 кОм к пину +5В. Тогда на мониторе порта, при нажатии кнопки, можно наблюдать "красивую" единицу, а светодиод будет светить красивым ровным светом.
Открыть изображение в новом окне
Код для этой схемы:
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); 
}

 Функция digitalRead()
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3927
не в сети
INPUT_PULLUP    с этой надписью и мигает?
Может к кнопке километровый провод?
 Функция digitalRead()
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Едва уловимое мерцание при ярком свечении, но не ровное. Можно заметить, если присмотреться. Провод медный одножильный 15 см.
 Функция digitalRead()
Модератор
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3927
не в сети
У микроконтроллера включается собственная подтяжка сопротивлением 50 кОм
 Проверка датчика влажности и температуры воздуха DHT11
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Проверка датчика влажности и температуры воздуха DHT11, подключаем его согласно схеме:
Открыть изображение в новом окне
Чтобы на 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");
}

Загружаем код в плату, запускаем монитор порта и наблюдаем за изменением влажности и температуры.
 Проверка работы джойстика
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Замечательный модуль-джойстик, выдаёт достаточно плавные значения для промежуточного состояния. Собираем схему, вставляем скетч, загружаем код, манипулируем джойстиком, нажимаем на его центральную кнопку и смотрим на мониторе порта как меняются значения по осям координат, а на плате отключается и включается светодиод.
Открыть изображение в новом окне
#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);
}
 Проверка четырёхзначного светодиодного дисплея TM1637
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Проверяем четырёхзначный светодиодный дисплей TM1637. Схема подключения:
Открыть изображение в новом окне
Сперва нужно загрузить специализированную библиотеку для дисплея в самой программе
Затем скаченный архив распаковать в папку 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);
}
 Выводим информацию о влажности и температуре на светодиодный дисплей
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Открыть изображение в новом окне
Открыть изображение в новом окне
Выводим информацию о влажности и температуре на светодиодный дисплей, заодно сравниваем показания на мониторе порта:
#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);
}
 Проверка сенсорного модуля KY-036 на управление встроенным светодиодом Arduino
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Открыть изображение в новом окне
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); // погасить встроенный светодиод
  
}
}
 FLProg для тех кто не знаком с языком программирования
Технический Директор
Технический Директор
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 2784
не в сети
Открыть изображение в новом окне
Для тех кто не знаком с языком программирования есть программа FLProg, где можно нарисовать блочную схему из готовых встроенных (или своих) блоков, а программа FLProg сама за вас создаст готовый скетч. Вам останется только залить его в Arduino и наслаждаться результатом. Ниже представлен скетч автоматически созданный программой FLProg для примера проверки сенсорного модуля, о котором было упомянуто в предыдущем сообщении.

Алгоритм составления из блоков такой:
  1. создаём вывод 2 и назначаем его как вход, называем его именем digitalPin
  2. создаём вывод 13 и назначаем его как встроенный светодиод и назовём его LED_BUILTIN
  3. подаём сигнал с сенсорного модуля на вход 2
  4. сигнал "логическая единица" со входа 2 сразу подаётся на RS-триггер
  5. сигнал "логический ноль" со входа 2 подаётся через таймер задержки на вход сброса RS-триггера
  6. с выхода RS-триггера сигнал подаётся на таймер который сохраняет значение выхода RS-триггера на 1 секунду
  7. сигнал с таймера продолжительностью 1 секунда подаётся на встроенный светодиод.
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));}
  }

Разное

Интересно

Для выпаивания микросхем в DIP корпусе пользуюсь проверенной технологией . Которая дает неплохие результаты , сохраняя при этом как микросхему так и дорожки печатной платы .

Похожие инструкции