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

В сети

Пользователей: 108
Из них просматривают:
Аналоги: 34. Даташиты: 21. Инструкции: 4. Новости: 14. Остальное: 18. Ошибки: 1. Программы: 2. Расчёты: 1. Форум: 12. Чат: 1.
Участников: 4
Гостей: 104

Google , Kosmonavt , wolf170571 , Яндекс , далее...
Рекорд 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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Функция digitalRead()
Интересный пример, получается такая картина: светодиод всегда светит, пока кнопка не нажата.
MACTEP
Отправлено: 16.02.2019 23:49  Обновлено: 16.02.2019 23:49
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6606
 Функция digitalRead()
Это зависит от того,как ты подключил кнопку. Ты же к земле вывод подтягиваешь? Значит на входе --0,соотвественно, и на выходе получаешь  0, а светодиод ты тоже к  земле подтянул.
Kosmonavt
Отправлено: 17.02.2019 0:04  Обновлено: 17.02.2019 0:07
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Функция 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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Функция 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
Откуда: Тирасполь
Сообщений: 3574
 Функция digitalRead()
INPUT_PULLUP    с этой надписью и мигает?
Может к кнопке километровый провод?
Kosmonavt
Отправлено: 22.02.2019 3:21  Обновлено: 22.02.2019 3:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Функция digitalRead()
Едва уловимое мерцание при ярком свечении, но не ровное. Можно заметить, если присмотреться. Провод медный одножильный 15 см.
evildesign
Отправлено: 22.02.2019 7:28  Обновлено: 22.02.2019 7:28
Модератор
Дата регистрации: 26.01.2010
Откуда: Тирасполь
Сообщений: 3574
 Функция digitalRead()
У микроконтроллера включается собственная подтяжка сопротивлением 50 кОм
Kosmonavt
Отправлено: 26.02.2019 4:19  Обновлено: 04.03.2019 21:21
Главный Инженер
Дата регистрации: 08.02.2009
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Проверка датчика влажности и температуры воздуха 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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Проверка работы джойстика
Замечательный модуль-джойстик, выдаёт достаточно плавные значения для промежуточного состояния. Собираем схему, вставляем скетч, загружаем код, манипулируем джойстиком, нажимаем на его центральную кнопку и смотрим на мониторе порта как меняются значения по осям координат, а на плате отключается и включается светодиод.
Открыть изображение в новом окне
#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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Проверка четырёхзначного светодиодного дисплея 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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Выводим информацию о влажности и температуре на светодиодный дисплей
Открыть изображение в новом окне
Открыть изображение в новом окне
Выводим информацию о влажности и температуре на светодиодный дисплей, заодно сравниваем показания на мониторе порта:
#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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 Проверка сенсорного модуля 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
Откуда: Днестровск
Сообщений: 1465
Пользователь активен!
 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));}
  }

Разное

Полихлорвиниловые трубки легче натянуть на изолируемые предметы (отвертки, пинцеты, радиодетали), если на 15-20 мин поместить их в ацетон.

Интересно

Если "ревёт" один из дросселей резонансного стабилизатора, забейте деревянный клин между его катушками.

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