Arcade PUB
  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать
Уроки  /  15 марта, 2020

Чтение данных из последовательного порта. Урок 6. Ардуино

by valentino

Привет! Сегодня еще один урок. Мы уже рассмотрели много разных ситуаций работы с ардуино. И в одном из предыдущих уроков научились записывать данные из программы в последовательный порт, чтобы следить за выполнением программы. Теперь рассмотрим чтение данных из последовательного порта, чтобы управлять программой и схемой с его помощью.

Отдельное питание сервопривода
Отдельное питание сервопривода

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

Содержание

  • 1 Для выполнения этого урока нам понадобятся
  • 2 Serial.read()
  • 3 Serial.available()
  • 4 Serial.readString()
  • 5 Serial.parseInt()
  • 6 Программа
  • 7 Полный текст программы
  • 8 Заключение
  • 9 Похожее

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

Последовательный порт. Урок 5. Ардуино

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

Мы уже делали схему управления сервоприводом с помощью потенциометра, в одном из предыдущих уроков. Пожалуйста, посмотрите его, если пропустили.

Cервопривод. Датчики. Ардуино

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Сервопривод
  • Блок батареек
  • Кабель USB

Serial.read()

Команды Serial.print() и Serial.println() мы уже знаем. Они записывают данные в последовательный порт. Команда для чтения данных, как не трудно догадаться — Serial.read().

Эта функция считывает и возвращает байт информации из буфера последовательного порта.

Если никакой информации нет, то возвращает -1.

Тип данных будет int.

Хитрость этой функции, с которой обязательно придется столкнуться в том, что она считывает именно байт информации и представляет его в виде кода символа из таблицы ASCII. Это значит, если вы введете слово из 5 букв, то каждый символ будет считан отдельно и его код из таблицы будет выведен в монитор последовательно. Например, код символа 0 — это 48, А код символа F — это 70. Причем только в десятичной системе счисления. Естественно, с символами Кириллицы все еще сложнее.

Попробуем загрузить в ардуино несколько примеров.

void setup() {
    Serial.begin(9600);
}
void loop() {
    if (Serial.available() > 0) {
        Serial.println(Serial.read(), DEC);
    }
}

// 1 - 49 // a - 97 // F - 70 // ] - 93

Serial.available()

Эта функция получает доступную для чтения из последовательного порта информацию. Максимум в буфере может быть до 64 байт. Эта те данные, которые записаны в порт и ожидают чтения. Следовательно, это удобно использовать для проверки последовательного порта на готовность к чтению. Если функция возвращает состояние отличное от 0, значит можно получить данные из порта. Попробуйте загрузить такой скетч в ардуино и проверить монитор порта.

void setup() {
    Serial.begin(9600);
}
void loop() {
    if (Serial.available() > 0) {
        Serial.println(Serial.read(), DEC);
    } else {
    	Serial.println("Ожидаем данные");
    }
}

Serial.readString()

Считывает из буфера символы, формирует из них строку типа String и выводит ее. С такой функцией уже можно принимать в программу целые команды. Хотя их еще нужно специальным образом обработать. Но в нашей программе будем использовать именно эту функцию.

void setup() {
    Serial.begin(9600);
}
void loop() {
    if (Serial.available() > 0) {
       String str = Serial.readString();
       Serial.println(str);
    }
}

Serial.parseInt()

Эта функция ищет целое число во входном потоке. Если число не было введено, выведет 0. Если ввести строку знаков, в которой будут числа, выведет только числа.

void setup() {
    Serial.begin(9600);
}
void loop() {
    if (Serial.available() > 0) {
      	x = Serial.parseInt();
      	Serial.println(x);
    }
}

//sfdfsdf - 0 //sdfdf34 - 34 // dsf3df3 - 3 \n 3
Принципиальная схема подключения мотора для записи данных в порт
Принципиальная схема подключения мотора для записи данных в порт

Программа

Ок. Давайте попробуем собрать схему и написать программу управления сервоприводом на основе данных вводимых в последовательный порт.

Программа будет принимать данные из порта, анализировать их, и если данные подходят для сервопривода отправлять на привод угол для перемещения вала.

В простейшем варианте такой программы используем функцию Serial.parseInt() чтобы получить только цифру и установить ее на сервопривод. Не забудьте ограничить максимальное и минимальное значение переменной функцией constrain().

void loop() {
    if (Serial.available() > 0) {
      
      	x = Serial.parseInt();
      	x = constrain(x, 0, 180);
      	Serial.println(x);
      	
      	myservo.write(x);
    }
}

Но, что если мы хотим принимать не только числовые данные, но и обрабатывать строковые команды. Тогда необходимо принимать все символы и обрабатывать их. Воспользуемся функцией Serial.readString(), чтобы организовать чтение данных из последовательного порта.

Затем сравним строку с несколькими значениями, которые уже будут внесены в программу. Если ни одна текстовая команда не подойдет, попробуем преобразовать строку в число и передать на сервомотор.

Сервопривод управляется из последовательного порта
Сервопривод управляется из последовательного порта

Полный текст программы

#include <Servo.h>

Servo myservo;
int pos=0;
String str;

void setup() {
    Serial.begin(9600);
    myservo.attach(9);
}
void loop() {
    if (Serial.available() > 0) {
      
      str = Serial.readString();
  
      if (str == "one"){pos = 1;}else
      if (str == "ten"){pos = 10;}else
      if (str == "ninety"){pos = 90;}else{
        pos = str.toInt();
      }

      pos = constrain(pos, 0, 180);
      pos = str.toInt();
      Serial.println(str);
    }
    myservo.write(pos);
}

Заключение

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

Похожее

Tags

  • Основное

Навигация по записям

Шаговый двигатель. Датчики. Ардуино
randomSeed()

Share your thoughts Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Новое видео на канале

https://youtu.be/bvzX-edTdS0

Свежие записи

  • Четырехразрядный индикатор. Урок 24. Ардуино
  • 7 сегментный индикатор. Урок 23. Ардуино
  • Клавиатура. Урок 22. Ардуино
  • OLED дисплей. Урок 21. Ардуино
  • Много кнопок на одном пине. Урок 20. Ардуино

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Купить стартовый набор Ардуино UNO на Aliexpress

Стартовый набор Ардуино Уно

Купить набор датчиков для Ардуино 45 штук на Aliexpress

набор датчиков для Ардуино

arcadepub

Do you know how this display works? It is pretty e Do you know how this display works? It is pretty easy to use it with #arduino.
#arduinouno #arduinoproject #arcadepub #ардуино #аркадныйпаб #ардуинопроект
How to use 7 segments indicator with #arduino its How to use 7 segments indicator with #arduino its pretty easy.
#arduinouno #arduinoproject #arcadepub
How to use 4x4 keypad with #arduino check it out. How to use 4x4 keypad with #arduino check it out. #arduinouno #arduinoproject #arcadepub
How to use oled display with #arduino it's pretty How to use oled display with #arduino it's pretty easy. #arcadepub #ардуино #ардуинопроект #arduinoproject #arduinouno
Hi there! How to control button debounce without c Hi there! How to control button debounce without code. Lets see.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello there! Let's write a program to control ard Hello there!  Let's write a program to control arduino by ir.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hey! How are you doing? How do you think, we can c Hey! How are you doing? How do you think, we can control arduino program by ir? I bet we can. 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Hello! There is a second video on my youtube chann Hello! There is a second video on my youtube channel. I've just added subtitles, so you can see how to use if and else structures and for() loop in arduino program. Enjoy, and do NOT forget to subscribe. 
https://youtu.be/8AHfAQyNAqU

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #youtube
Hi there! How is it going? Photo resistor and lase Hi there! How is it going? Photo resistor and laser are here. Look at graphics and try to understand how it works!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Here is ky-039 heart beat arduino module. Do you l Here is ky-039 heart beat arduino module. Do you like it? Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Its Magic lights with ky-027 arduino module. Do yo Its Magic lights with ky-027 arduino module. Do you like it?  Write in the comments below!

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Arduino and #laser are together. Please subscribe Arduino and #laser are together.

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #arduinoproject
Do you know how gyroscope modul works with arduino Do you know how gyroscope modul works with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
Do you know how you can use rfid module with ardui Do you know how you can use rfid module with arduino? 

Please subscribe to my instagram and youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #rfid #arduinoproject
It is almost done Please subscribe to my youtube It is almost done

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Begin to make a spider bot. Please subscribe to Begin to make a spider bot. 

Please subscribe to my youtube channel as well.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering #arduinoproject #robot #spiderbot
Hello folks! There are 1000 of us on my instagram Hello folks! There are 1000 of us on my instagram account. And i want to tell thanks to each of you!
I'd like to tell more about this project. And that's why i made a video on youtube channel. 
It is in russian, but i have added english subtitles. 
I'm gonna tell you about many intriguing Arduino projects.
So, please, take a look at video. And subscribe to my youtube channel as well. 

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How can we know that flower needs to be watered. L How can we know that flower needs to be watered. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit #flower #autowatering
How to turn light on by clapping. Like and Subscri How to turn light on by clapping. Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Is it possible to turn light on over the internet? Is it possible to turn light on over the internet? Like and Subscribe to know more.

#arcadepub #diy #doityourself #learn #smarthome #ардуино #аркадныйпаб #сделайсам #умныйдом #arduino #circuit
Загрузи больше…

ArcadePUB @ 2020

arduino@arcadepub.ru

На сайте вы найдете уроки, проекты и обзоры всего, что связано с ардуино.

Аркадные игры и автоматы.

DIY проекты

Метки

  • Bluetooth
  • RGB Светодиоды
  • WIFI
  • Двигатели
  • Звук
  • Игры
  • Интернет вещей
  • Лего
  • Основное
  • Программирование
  • Уроки

Свежие записи

  • Четырехразрядный индикатор. Урок 24. Ардуино
  • 7 сегментный индикатор. Урок 23. Ардуино
  • Клавиатура. Урок 22. Ардуино
  • OLED дисплей. Урок 21. Ардуино
  • Много кнопок на одном пине. Урок 20. Ардуино

Навигация

  • Главная
  • Уроки
  • Датчики
  • Проекты
  • Справочник языка Ардуино
  • Справочник
  • Видео
  • Контакты
  • Поддержать

Дополнительно

Поддержать

Контакты

YouTube
Patreon
VK
Instagram
Twitter