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

В сети

Пользователей: 171
Из них просматривают:
Аналоги: 56. Даташиты: 66. Инструкции: 4. Новости: 16. Остальное: 8. Партнёры: 1. Профиль пользователя: 1. Торрент: 2. Форум: 16. Чат: 1.
Участников: 3
Гостей: 168

an , Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

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

Оглавление

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

Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити
Kosmonavt
Отправлено: 16.02.2019 22:01  Обновлено: 16.02.2019 22:06
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Функция digitalRead()
Интересный пример, получается такая картина: светодиод всегда светит, пока кнопка не нажата.
MACTEP
Отправлено: 16.02.2019 23:49  Обновлено: 16.02.2019 23:49
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6866
 Функция digitalRead()
Это зависит от того,как ты подключил кнопку. Ты же к земле вывод подтягиваешь? Значит на входе --0,соотвественно, и на выходе получаешь  0, а светодиод ты тоже к  земле подтянул.
Kosmonavt
Отправлено: 17.02.2019 0:04  Обновлено: 17.02.2019 0:07
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Функция digitalRead()
Да всё верно, вывода у меня подтянут к земле. Теперь ясно как это работает. Порылся немного и есть вот такой пример, когда вывод тоже подтянут к земле и светодиод светится при нажатии кнопки:
int ledPin 13;
int inPin 7;
int val 0;
 
void setup()
{
  
pinMode(ledPinOUTPUT);
  
pinMode(inPinINPUT_PULLUP);
}
 
void loop()
{
  
val = !digitalRead(inPin);
  
digitalWrite(ledPinval);
}
Kosmonavt
Отправлено: 18.02.2019 1:34  Обновлено: 18.02.2019 1:43
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Функция digitalRead()
Чтобы включенный светодиод не мерцал, так как это хорошо видно воочию и на мониторе порта куда подключена кнопка присутствует смесь нулей и единиц, то считывающий порт с кнопкой нужно подтянуть резистором 10 кОм к пину +5В. Тогда на мониторе порта, при нажатии кнопки, можно наблюдать "красивую" единицу, а светодиод будет светить красивым ровным светом.
Открыть изображение в новом окне
Код для этой схемы:
int ledPin 12
int inPin 5
int val 0
  
void setup() 

  
pinMode(ledPinOUTPUT);
  
pinMode(inPinINPUT_PULLUP);
  
Serial.begin(9600);

  
void loop() 
{
  
Serial.println(val);
  
val = !digitalRead(inPin); 
  
digitalWrite(ledPinval); 
}

evildesign
Отправлено: 20.02.2019 20:30  Обновлено: 20.02.2019 20:30
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3773
 Функция digitalRead()
INPUT_PULLUP    с этой надписью и мигает?
Может к кнопке километровый провод?
Kosmonavt
Отправлено: 22.02.2019 3:21  Обновлено: 22.02.2019 3:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Функция digitalRead()
Едва уловимое мерцание при ярком свечении, но не ровное. Можно заметить, если присмотреться. Провод медный одножильный 15 см.
evildesign
Отправлено: 22.02.2019 7:28  Обновлено: 22.02.2019 7:28
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3773
 Функция digitalRead()
У микроконтроллера включается собственная подтяжка сопротивлением 50 кОм
Kosmonavt
Отправлено: 26.02.2019 4:19  Обновлено: 04.03.2019 21:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Проверка датчика влажности и температуры воздуха DHT11
Проверка датчика влажности и температуры воздуха DHT11, подключаем его согласно схеме:
Открыть изображение в новом окне
Чтобы на Arduino заработал датчик DTH11, сперва нужно установить для него библиотеку, скачав здесь:
Открыть изображение в новом окне
Затем распаковать архив в папку библиотек для Arduino:
Открыть изображение в новом окне
Запускаем программу и вставляем скетч:
#include "DHT.h"// подключаем библиотеку для датчика
DHT dht(2DHT11); // сообщаем на каком порту будет датчик

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");
}

Загружаем код в плату, запускаем монитор порта и наблюдаем за изменением влажности и температуры.
Kosmonavt
Отправлено: 26.02.2019 18:31  Обновлено: 04.03.2019 21:22
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Проверка работы джойстика
Замечательный модуль-джойстик, выдаёт достаточно плавные значения для промежуточного состояния. Собираем схему, вставляем скетч, загружаем код, манипулируем джойстиком, нажимаем на его центральную кнопку и смотрим на мониторе порта как меняются значения по осям координат, а на плате отключается и включается светодиод.
Открыть изображение в новом окне
#define pinX A2 // ось X джойстика
#define pinY A1 // ось Y джойстика
#define swPin 2 // кнопка джойстика
#define ledPin 13 // светодиод на Pin 13

void setup() {
 
Serial.begin(9600);
 
 
pinMode(ledPinOUTPUT);
 
pinMode(pinXINPUT);
 
pinMode(pinYINPUT);
 
 
pinMode(swPinINPUT);
 
digitalWrite(swPinHIGH);
}
 
void loop() {
 
boolean ledState digitalRead(swPin); // считываем состояние кнопки
 
digitalWrite(ledPinledState); // вкл./выкл. светодиод

 
int X analogRead(pinX); // считываем значение оси Х
 
int Y analogRead(pinY); // считываем значение оси Y

 
Serial.print(X); // выводим в Serial Monitor
 
Serial.print("t"); // табуляция
 
Serial.println(Y);
}
Kosmonavt
Отправлено: 26.02.2019 19:39  Обновлено: 04.03.2019 21:23
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Проверка четырёхзначного светодиодного дисплея TM1637
Проверяем четырёхзначный светодиодный дисплей 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(CLKDIO);
void setup()
{
}
void loop()
{
  int k;
  uint8_t data[] = { 0xff0xff0xff0xff };
  uint8_t blank[] = { 0x000x000x000x00 };
  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+222);
  delay(TEST_DELAY);
  display.clear();
  display.setSegments(data+221);
  delay(TEST_DELAY);
  display.clear();
  display.setSegments(data+131);
  delay(TEST_DELAY);
  // Show decimal numbers with/without leading zeros
  display.showNumberDec(0false); // Expect: ___0
  delay(TEST_DELAY);
  display.showNumberDec(0true);  // Expect: 0000
  delay(TEST_DELAY);
   
display.showNumberDec(1false); // Expect: ___1
   
delay(TEST_DELAY);
  display.showNumberDec(1true);  // Expect: 0001
  delay(TEST_DELAY);
  display.showNumberDec(301false); // Expect: _301
  delay(TEST_DELAY);
  display.showNumberDec(301true); // Expect: 0301
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(14false21); // Expect: _14_
  delay(TEST_DELAY);
  display.clear();
  display.showNumberDec(4true22);  // Expect: 04__
  delay(TEST_DELAY);
  display.showNumberDec(-1false);  // 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(-5false30); // Expect: _-5_
  delay(TEST_DELAY);
  display.showNumberHexEx(0xf1af);        // Expect: f1Af
  delay(TEST_DELAY);
  display.showNumberHexEx(0x2c);          // Expect: __2C
  delay(TEST_DELAY);
  display.showNumberHexEx(0xd10true); // Expect: 00d1
  delay(TEST_DELAY);
  display.clear();
  display.showNumberHexEx(0xd10true2); // Expect: d1__
  delay(TEST_DELAY);
  
   
// Run through all the dots
   
for(k=0<= 4k++) {
      
display.showNumberDecEx(0, (0x80 >> k), true);
      
delay(TEST_DELAY);
   }
  // Brightness Test
  for(04k++)
   
data[k] = 0xff;
  for(07k++) {
    
display.setBrightness(k);
    
display.setSegments(data);
    
delay(TEST_DELAY);
  }
  
  
// On/Off test
  for(04k++) {
    
display.setBrightness(7false);  // Turn off
    
display.setSegments(data);
    
delay(TEST_DELAY);
    
display.setBrightness(7true); // Turn on
    
display.setSegments(data);
    
delay(TEST_DELAY);  
  
}
 
  
// Done!
  display.setSegments(SEG_DONE);
  while(1);
}
Kosmonavt
Отправлено: 26.02.2019 23:57  Обновлено: 08.05.2019 14:44
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Выводим информацию о влажности и температуре на светодиодный дисплей
Открыть изображение в новом окне
Открыть изображение в новом окне
Выводим информацию о влажности и температуре на светодиодный дисплей, заодно сравниваем показания на мониторе порта:
#include "DHT.h"
   
      // подключаем библиотеку для датчика температуры и влажности DHT11
DHT dht(2DHT11); 
   
      // сообщаем на каком порту (на 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(CLKDIO);// сообщаем на каких портах будет дисплей 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(1digitoneT); // выводим на дисплей TM1637 значение темепературы в целых десятках
  
tm1637.display(2digittwoT); // выводим на дисплей TM1637 значение темепературы в целых единицах
  
tm1637.display(312); // выводим на дисплей TM1637 знак Цельсий, 
   
      //то есть "С" (12) после значения температуры
  
delay (5000); // Пауза
  
tm1637.display(1digitoneH); // выводим на дисплей TM1637 значение влажности в целых десятках
  
tm1637.display(2digittwoH); // выводим на дисплей TM1637 значение влажности в целых единицах
  
tm1637.display(315); // выводим на дисплей TM1637 другой знак, 
   
      //например "F" (15) после значения влажности
  
delay (5000); // Пауза
}


Ещё один вариант, но с выводом на дисплей знака градуса и влажности (туман - три полоски). Схема немного другая.
Открыть изображение в новом окне
#include <Arduino.h>
#include <TM1637Display.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPINDHTTYPE);
#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(CLKDIO);

void setup()
{
  
dht.begin();
}

void loop()
{
  
float h dht.readHumidity();
  
float t dht.readTemperature();

  
int k;
  
uint8_t data[] = { 0xff0xff0xff0xff };
  
uint8_t blank[] = { 0x000x000x000x00 };
  
display.setBrightness(0x0f);

  
display.setSegments(SEG_TEMP);
  
display.showNumberDec(ttrue21);
  
delay(TEST_DELAY);
  
display.setSegments(SEG_VLAJ);
  
display.showNumberDec(hfalse21);
  
delay(TEST_DELAY);
}
Kosmonavt
Отправлено: 08.03.2019 1:57  Обновлено: 08.03.2019 2:55
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Проверка сенсорного модуля KY-036 на управление встроенным светодиодом Arduino
Открыть изображение в новом окне
int digitalPin 2// назначаем цифровой вывод "2"
int val 0// присваиваем переменной "val" нулевое значение

void setup()
{
  
pinMode(LED_BUILTINOUTPUT); // задействовать, но не включать встроенный светодиод
}
void loop()
{
  
val digitalRead(digitalPin); // "val" считывает значение с вывода "2" 
  
if (val == 1// если val равно логической единице, то:
  
{
    
digitalWrite(LED_BUILTINHIGH); // включить встроенный светодиод
    
delay(1000); // задержать свечение светодиода на одну секунду
  
}
  else 
// иначе (или val равно логическому нулю):
  
{
    
digitalWrite(LED_BUILTINLOW); // погасить встроенный светодиод
  
}
}
Kosmonavt
Отправлено: 08.03.2019 19:48  Обновлено: 08.05.2019 14:46
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 FLProg для тех кто не знаком с языком программирования
Открыть изображение в новом окне
Для тех кто не знаком с языком программирования есть программа 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(2INPUT); 
pinMode(13OUTPUT); 

}
void loop()
{




//Плата:1
if( (digitalRead (2))) {_tim2O 1_tim2I 1;
   

else { if(
_tim2I
   
   {_tim2I 0_tim2P millis();
   

else { if (
_tim2O) {if ( _isTimer(_tim2P1000)) _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(_tim1P1000)) _tim1O 0;}}}
digitalWrite(13_tim1O);




}
bool _isTimer(unsigned long startTimeunsigned long period )
  {
  
unsigned long currentTime;
currentTime millis();
if (
currentTime>= startTime
   
{return (currentTime>=(startTime period));
   


else {return (currentTime >=(4294967295-startTime+period));}
  }

Разное

Обработанные водным раствором щелочи стальные контакты (например, батарейного отсека переносной магнитолы или пульта ДУ) никогда не заржавеют.

Интересно

Чтобы защитить стержень от обгорания, его нужно обмазать тонким слоем смеси силикатного клея и сухой минеральной краски (окись железа, цинка и магния).

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