Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/54: Рейтинг темы: голосов - 54, средняя оценка - 4.70
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93

Arduino UNO. Как работать c RFID-сканнером и Arduino на одном Serial-порту?

29.10.2013, 00:26. Показов 10484. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рас уж тут речь зашла об ардуине и многопоточности COM порта, думаю могу обратиться именно сюда за помощью.

Имеется у меня arduino UNO, rfid-сканер(считыватель магнитных карт), а так же есть двигатель. Сначала я привинтил только двигатель к ардуине и сделал что бы он запускался или отключался в зависимости от нажатой кнопки на компе. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int ledPin = 10;  // светодиод я сюда тоже впихнул
int motorPin = 9;
 
void setup()
{               
  Serial.begin(9600);
  pinMode (ledPin, OUTPUT);
  pinMode (motorPin, OUTPUT);
}
 
void loop(){
  while (Serial.available()){
    char val = Serial.read();
 
    if (val == '1') 
    {
      Serial.println("ON");
      digitalWrite(ledPin, HIGH);
      digitalWrite(motorPin, HIGH);
    }
    if (val == '0') 
    {
      Serial.println("OFF");
      digitalWrite(ledPin, LOW);
      digitalWrite(motorPin, LOW);
    }
  }
}
Потом все разобрал и подключил только rfid-сканер, который выдает нам в COM-монитор идентификатор магнитной карты, если мы подносим ее к сканеру, в противном случае он сидит молча. Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <SoftwareSerial.h>
 
int input; 
String s;
 
SoftwareSerial RFIDSerial(0, 1); // RX, TX
 
void setup() 
{ 
  // Очищаем буфер 
  Serial.flush(); 
  // Устанавливаем скорость работы с портом 
  Serial.begin(9600); 
  // Устанавливаем скорость работы с модулем RDM630 
  RFIDSerial.begin(9600); 
  //s=""; 
}
 
void loop() 
{ 
  // если есть данные, то 
  if (RFIDSerial.available()) { 
    // читаем блок данных с модуля RDM630 и заносим их в переменную input 
    input = RFIDSerial.read(); 
    // присваиваем все считанные в переменную input значения переменной s, так как за 1 цикл loop мы получаем 1 значение, а их 12   
    s+=input;  // то же самое, что и s=s+input; 
    // если длинна кода равна 26 символам (в памяти чипа можно разместить 26 байт информации), то 
    if (s.length()==26) { 
      // выводим данные 
      Serial.println(s); 
      // очищаем переменную 
      s=""; 
    } 
  } 
}

Теперь собственно сам ВОПРОС, как совместить эти вещи и возможно ли это сделать? Нужно что бы сообщение, которое я отправляю на двигатель (1 или 0) шло именно на него, а не на сканер. Вообщем я уже совсем запутался, помогите распутаться.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.10.2013, 00:26
Ответы с готовыми решениями:

Как настраивать serial port под Linux для приёма данных от Arduino Uno
Здравствуйте! Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт ...

Как настраивать serial port под Linux для приёма данных от Arduino Uno
Здравствуйте! Есть устройство на базе Arduino Uno с которым ПК с Линкусом ( Федора ) осуществляет обмен по USB: с ПК уходит байт...

Ошибка при загрузке кода в Arduino Uno (Китай) - Arduino
В Диспетчере устройств Arduino определяется, как USB-SERIAL CH340 (COM5). При попытке залить стандартный Blink ошибка: avrdude:...

6
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.10.2013, 08:49
...в уне только один хардварный COM-порт.

C другой стороны, эта единица приводит к каким-то действиям на сканнере? Шлите пакетом, который сканнер не поймет.

p.s.: кстати, что за модель сканнера и либы под ардуино?
1
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93
29.10.2013, 13:29  [ТС]
На сколько я понимаю, при подключенном сканере, на мотор не получится слать сообщения, потому как COM порт уже занят сканером. Единица со сканером ничего не делает. Модель сканера.
Но я все равно еще надеюсь что это как то можно реализовать. На сканере есть джампер, с помощью которого можно выбрать режим (как я понял) передачи данных: UART или Wiegand. Правда я ни черта не понял как работает Wiegand.

И по поводу пакетов, которые не поймет сканер, я пробовал делать что то вроде : если на порт пришла буква "o" включаем двигатель, если "f" выключаем, но параллельно ждем данных от сканера - ничего не получилось.

P.S. использовал буквы "o" и "f", потому как идентификатор карт состоит из цифр.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
29.10.2013, 14:42
Вот именно, на один UART вешать нельзя. Если бы у гаджетов была поддержка 9-ти битного режима, тогда адресацию еще можно было бы сваять. В принципе, можно линию переключать между сервой и сканнером или имитировать программный UART на свободных пинах.
1
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93
05.11.2013, 22:51  [ТС]
Цитата Сообщение от raxp Посмотреть сообщение
В принципе, можно линию переключать между сервой и сканнером или имитировать программный UART на свободных пинах
Это то что нужно, но я не знаю как это можно реализовать.
Суть в том что у меня есть программа (эмулятор реактора идеального смешения), которая делает различные расчеты связанные с концентрацией веществ. Так вот, там есть кнопка "Начать процесс", при нажатии на которую у меня запускаются двигатели.
Но я решил что доступ к этой кнопке нужно обеспечивать только по карте, т.е. пока не приложим карту, мы не сможем запустить двигатели.
Таким образом uart у нас должен ждать идентификатора с карты, как только он его получил можно его переключать на работу с двигателем. Если Вы мне подскажете как это сделать, я буду очень Вам благодарен.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
05.11.2013, 23:12
Аппаратно
...элементарно: ключами перекоммутировать RX/TX ардуины с одного устройства на другой, сдвоенный подойдет, а управлять коммутатором (мультиплексором) одним из свободных дискретных I/O, сконфигурированным на выход. Схема включения стандартна, из даташита.

Можно на полевиках, есть и интегральные варианты. У Analog Devices полно, можно и советских КМОП наскрести на радиорынке.

http://www.chipdip.ru/catalog/ic-multiplexers/
http://kosmodrom.ua/prodlist.p... E%E8%F1%EA
http://ru.aliexpress.com/whole... 0&manual=y

Программно второй UART
...без всяких переключений. Программная фишка через - 'SoftwareSerial.h':
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <SoftwareSerial.h>
 
SoftwareSerial comSerial1(18,19);
SoftwareSerial comSerial(0,1);
 
char s;
char incByte;  // входящие данные
int  iLED = 13;      // LED подключен к 13 пину
 
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
     
pinMode(iLED, OUTPUT);
Serial.print("START:");
}
     
void loop()
{
//if (Serial1.available()) { // прием данных от устройства
// int incByte = Serial1.read();
       
if (Serial1.available())  // прием данных от устройства
 {
 delay(100); // задержка перед выводом сообщений на комп
while (Serial1.available() > 0) 
 {
char s=Serial1.read();
      
 Serial.println(s);  // вывод на комп
}
}
 
 if (Serial.available()) { // ввод данных с компа
 char incByte = Serial.read();
Serial1.print(incByte); // передача на устройство
     
 
 }
}
1
1 / 1 / 2
Регистрация: 11.11.2012
Сообщений: 93
07.11.2013, 17:43  [ТС]
Спасибо большое! Пока еще возможности опробовать нету, но на днях обязательно займусь этим и отпишусь на счет результата.
Еще раз огромное спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2013, 17:43
Помогаю со студенческими работами здесь

Arduino uno + arduino ethernet + delphi для чайников
Доброго времени суток. У меня такая задача нужно реализовать программу на Delphi которая будеуправлять платой, не знаю с какого бока...

Как реализовать Serial на Arduino
Столкнулся с проблемой нужно чтобы Лампочка работала через Serial будучи подключенной к реле LU-5-R

LM020L как подключить к Arduino uno
в протеусе 7 к ардуино уно и проверить его работу

Как прошить Atmega8 с помощью Arduino Uno
Здравствуйте, уважаемые! У меня в наличии есть плата Arduino Uno (точнее ее китайская копия), так же есть мк Atmega8A-PU. Uno я...

Как поставить пароль на arduino uno miniWeb-server
Как запаролить arduino uno miniWeb-server Есть код, но у меня он не работает: // Делаем функцию для оформления нашей Web страницы. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru