-
Публикации
9 -
Зарегистрирован
-
Посещение
-
Дней в лидерах
14
Сообщения, опубликованные пользователем Small_d
-
-
Всем привет.
По ходу написания своего диплома, написал небольшую форму на С# для администрирования базы данных.
В форме выводится таблица, возможно изменять данные ключей, добавлять и удалять ключи. Для работы нужна вторая ардуинка с RFID модулем, чисто как читалка для ключа. Все работает, но есть один нюанс. COM порт, у меня указан конкретно под мое устройство в самом проекте в свойствах SerialPort1.
Собственно нужна помощь, в доработке.
На форму можно добавить combobox с выводом доступных ком портов. При выборе которого, считывание происходило бы именно с него.
На данный момент сделана просто защита от дурака с помощью Button.Enable, т.е. при нажатии кнопки сканировать ключ, все кнопки затухают до тех пор пока не поднесешь ключ к сканеру, поднес, ключ записался в поле ключ, кнопки стали доступны, далее добавляешь, удаляешь или изменяешь данные. На данный момент, после нажатия кнопки сканировать ключ, программа будет ждать ключа и больше ни на что не реагировать. Поднесли ключ, можно дальше работать.
Хотелось бы, что бы при запуске, можно было выбрать ком порт. Выбранный порт записался бы в SerislPort1 NamePort. При нажатии кнопки Сканировать ключ, если ком порт не верный выводилось предупреждение, типа выберите правильный ком порт.
Если верный, то появляется надпись поднесите ключ к сканеру.
Проект могу скинуть в личку, писал в MS Visual Studio 2015. Сдача диплома с 15 июня, можно конечно и так, но хочется продумать мелочи. Выложить готовый проект для всеобщего пользования буду готов после доделки и после сдачи)) Дабы антиплагиат мне все не испортил
Загрузка компортов при запуске формы(cbPorts - это combobox)private void Form1_FormLoad(object sender, EventArgs e) { string[] ports = SerialPort.GetPortNames(); cbPorts.Items.Clear(); cbPorts.Items.AddRange(ports); }
Кнопка Сканировать ключ
//Кнопка сканирования RFID ключа private void btnScan_Click(object sender, EventArgs e) { scaner(); } //Сканирование UID ключа private void scaner() { serialPort1.Open(); string uidkey = serialPort1.ReadLine(); serialPort1.Close(); textBox1.Text = uidkey; }
Как сделать, что бы сканирование ключа происходило исходя из выбранного выше компорта в комбобоксе?
- 1
-
Работает и без роутера, только пришлось отдельно установить на комп DHCP сервер. Разницы ведь нет, кто будет раздавать?
-
не для ардуинки, а для скетча, ардуино получит другой адрес, а в скетче укажи адрес который на компе в данный момент.
-
-
24 минуты назад, melfis сказал:melfis,
как подключен эзернет шилд? Через роутер или напрямую к компу?
Через роутер, проверяйте IP сервера в скетче
Если на прямую, то надо сперва DHCP сервер поднять, чтоб комп раздал IP на эзернет шилд.
Без DHCP патч корд другой нужен, кроссовер. Вроде)) Поправьте, если ошибаюсь.
В скетче указать IP сервера, т.е. компа
Пользователь по умолчанию root, но можно в базе и своего создать, только права ему дать нужные, ну и пароль, если есть.У меня работало либо с роутером, который раздавал IP, либо с поднятым DHCP сервером на компе, чтоб исключить лишнее звено (роутер). Без них так же выдавало 0.0.0.0 и соответственно ничего не работало.
-
28 минут назад, melfis сказал:здравствуйте. при попытке сборки версии замка с подключением к базе данных столкнулся с трудностями:
1. в мониторе порта ошибка кодировки(порой может появится часть текста а порой только квадратики)
2. реле щелкает раз в 5 сек (и в мониторе порта после каждого щелчка появляется один квадратит)
3. при поднесении к считывателю карты информация о ней не появляется в мониторе порта(хотя светодиод на езернет шилде моргает когда я подношу карту а как убираю начинает гореть).
пробовал предыдущие версии ваших скетчей (где запись идет в память там все работает отлично)melfis, ошибки кодировки в консоли, скорее всего скорость не выставил. Поставь 115200 бод, вместо 9600. В скетче скорость указана.
С остальным похоже на мои проблемы, почитай над твоими постами сообщения от Kitsum, особенно про сторожевой таймер. Возможно твоя ардуинка тоже с ним не пашет, тогда удали из скетча соответствующие строчки, см. выше... Мне помогло. -
@Kitsum, благодарю. Скетч залился, кодировка UTF8 ни в какую не захотела работать, то одно кракозябрами, то другое, а вот при смене кодировки в базе и на страничке в ср1251 все отображается отлично и описание ключей и сам текст полей оформления.
Другая проблема возникла, собрал схему с одной кнопкой, одним реле, и переключателем режимов, как нарисовано на второй странице темы, где пример с базой выложен.1. Как понять, считывает ли ключ rfid датчик или нет?
Дело в том, что в консоль у меня выводится только ip ардуинки и приглашение на сайт, причем не важно приложил я метку или нет. Через каждые 10-15 секунд (точно не засекал) выдает ip с приветствием и срабатывает реле. Т.е. получается, что дверь сама постоянно открывается.
Но на кнопку реагирует как надо, нажимаем, идет тройной зумер и в консоль выводится сообщение, дверь открыта, дверь закрыта, реле открывается соответственно. Через какое то время, снова реле открывается само и ip с приглашением выдается.
2. При считывании UID метки стандартным скетчем, где выдает в dec и hex формате, dec выглядит так - 12, 345, 67, 89 , т.е. записать мастер ключ в базу, я должен просто слитно, 123456789, убрав пробелы и запятые? Или еще как то сконвертить надо? Опять же вопрос возник потому что в консоль ключи не выводит, как на примере. -
В 01.10.2016 в 14:09, svchekalin сказал:Добавлю свою маленькую лепту в проэкт. Немного поправил скетч и теперь замок пишет в две дополнительные таблицы события разрешенных и запрещенных действий т.е. ключ в базе и при доступе записывается его айди и время дата доступа в табличку allow также если ключа нет в базе он записывается аналогично в табличку deny. Накрапал коекакой php код который отображает данные таблиц и может дабавить ключ в базу.
скетч
// Необходимые библиотеки
#include <avr/wdt.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Bounce2.h>
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>// Необходимые пины
#define PIN_SS 9 // RFID
#define PIN_RST 8 // RFID#define PIN_RELAY 7 // RELAY
#define PIN_MODE 6 // MODE
#define PIN_TONE 3 // TONE
#define PIN_OPEN 2 // OPENIPAddress ip2(192, 168, 2, 2);
MFRC522 mfrc522(PIN_SS, PIN_RST);
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress server(192, 168, 2, 1); // IP адрес MySQL сервера
char user[] = "ваш юзер нэйм"; // MySQL username
char password[] = "ваш пароль к базе"; // MySQL passwordconst char QUERY_S[] = "SELECT type FROM adatum.rc522 WHERE uid = %s;";
const char QUERY_I[] = "INSERT INTO adatum.rc522 (uid) VALUES ('%s');";
const char QUERY_X[] = "INSERT INTO adatum.allow (uid) VALUES ('%s');";//allow
const char QUERY_Y[] = "INSERT INTO adatum.deny (uid) VALUES ('%s');";//deny
char query[128];EthernetClient client;
MySQL_Connection conn((Client *)&client);
MySQL_Cursor cur = MySQL_Cursor(&conn);//
String key, lastKey;
String typeKey;
char toQuery[12];
unsigned long lastKeyTimer = 0;// Переменные необходимые для режима программирования
byte modeProgTime = 5; // Количество секунд удержания мастер ключа для входа\выхода в\из режим\а программирования
bool mode = false; // НЕ МЕНЯТЬ!
bool modeLock = false; // НЕ МЕНЯТЬ!
byte modeClean = 0; // НЕ МЕНЯТЬ!
unsigned long modeTimer = 0; // НЕ МЕНЯТЬ!// Управление замком
unsigned long openTimer = 0;// Защита кнопок от дребезга
Bounce key_open = Bounce();
/*
Функция звукового оповещения.
Принимает параметры: количество звуковых сигналов, частота в герцах, продолжительность звука, пауза в милесекундах (не обязательно)
*/
void squeaker(byte count, unsigned int Hz, unsigned int duration, unsigned int sleep = 0)
{
for(int i=0; i<count; i++) {
tone(PIN_TONE, Hz, duration);
if(sleep > 0) delay(sleep);
}
}
/*
Функция читает EEPROM и составляет список активных ключей
Первый байт в памяти содержит количество ключей
UID ключа содержит 4 байта
Общая память 1 + количество ключей * 4
Максимум можно записать 255 ключей
*/
void setup() {
// Настраиваем сторожевой таймер
wdt_disable();
delay(8000);
wdt_enable(WDTO_8S);// Инициализация используемых пинов
// Реле
pinMode(PIN_RELAY, OUTPUT);
digitalWrite(PIN_RELAY, HIGH);
// Кнопка открытия двери
pinMode(PIN_OPEN,INPUT_PULLUP);
digitalWrite(PIN_OPEN, HIGH);
key_open.attach(PIN_OPEN);
key_open.interval(5);// Перемычка выбора режима работы (0 - автоматическое закрытие двери, 1 - закрытие двери по ключу)
pinMode(PIN_MODE, INPUT);
digitalWrite(PIN_MODE, HIGH);// Инициализация консоли
Serial.begin(115200);
while (!Serial);// Инициализация ридера
SPI.begin();
mfrc522.PCD_Init();Ethernet.begin(mac, ip2);//--------------ip2 переименовать в ip и удалить айпишник для DHCP
Serial.print(F("IP: "));
Serial.println(Ethernet.localIP());
Serial.println();
// Приглашаем в гости
Serial.println(F("iT4iT CLUB (C) 2015\nhttps://it4it.club\n"));
}void loop() {
// Сбрасываем сторожевой таймер микроконтроллера
wdt_reset();if(openTimer > millis()+10000) openTimer = 0;
if(lastKeyTimer > millis()+10000) lastKeyTimer = 0;// Изменение режима работы закрытия
modeLock = digitalRead(PIN_MODE);// Открытие двери с кнопки
key_open.update();
if(!key_open.read() and openTimer == 0 and !mode) {
if(modeLock or (!modeLock and digitalRead(PIN_RELAY))) {
openTimer = millis()/1000;
digitalWrite(PIN_RELAY, LOW);
Serial.println(F("The door opened from the inside\n"));
squeaker(5, 3200, 100, 300);
}
delay(2000);
}
// Автоматическое закрытие двери
if(openTimer != 0) {
if(millis()/1000 - openTimer > 5) {
openTimer = 0;
if(modeLock) {
digitalWrite(PIN_RELAY, HIGH);
Serial.println(F("* closed lock"));
}
else {
if(!digitalRead(PIN_RELAY)) digitalWrite(PIN_RELAY, HIGH);
}
}
}
// Если ключ отсутствует или не читается, не выполняем дальнейший код
if(!mfrc522.PICC_IsNewCardPresent()) {
// Очистка таймера входа в режим программирования, в случае если ридер свободен
if(modeTimer != 0) {
if(++modeClean > 5) modeTimer = modeClean = 0;
}
// Таймер для контроля времени хранения последнего ключа в памяти
if(lastKeyTimer != 0) {
if((millis()-lastKeyTimer) > 100) {
lastKey = "";
lastKeyTimer = 0;
}
}
return;
}
if(!mfrc522.PICC_ReadCardSerial()) return;
// Останавливаем режим очистки
modeClean = 0;// Читаем ключ
for(byte i=0; i<4; i++) key += mfrc522.uid.uidByte;
// Один ключ = Один запрос к MySQL серверу. Не флудим.
if(key != lastKey) {
if(!conn.connected()) {
if(!conn.connect(server, 3306, user, password)) {
squeaker(5, 1000, 200, 200);
return;
}
}
key.toCharArray(toQuery, key.length()+1);
sprintf(query, QUERY_S, toQuery);
cur.execute(query);column_names *cols = cur.get_columns();
row_values *row = NULL;
Serial.println("KEY: " + key);
if((row = cur.get_next_row()) != NULL) typeKey = String(row->values[0]); else typeKey = "0";
if(typeKey == F("1") or typeKey == F("2")) {
if(!mode) {
Serial.println(F("access allow"));
sprintf(query, QUERY_X, toQuery);
cur.execute(query);
// Доступ разрешен
if(modeLock) {
openTimer = millis()/1000;
digitalWrite(PIN_RELAY, LOW);
}
else digitalWrite(PIN_RELAY, !digitalRead(PIN_RELAY));
squeaker(2, 2200, 200, 200);
}
else {
if(typeKey != F("1")) {
Serial.println(F("error: key elrady exists in eeprom"));
squeaker(2, 500, 300);
}
}
}
else {
if(!mode) {
Serial.println(F("access dany"));
sprintf(query, QUERY_Y, toQuery);
cur.execute(query);
squeaker(1, 500, 1000);
}
else {
Serial.println(F("add key in MySQL"));
sprintf(query, QUERY_I, toQuery);
cur.execute(query);
squeaker(2, 2200, 200, 200);
}
}lastKey = key;
cur.close();
conn.close();
}
else {
if(typeKey == F("1")) {
if(modeTimer == 0) modeTimer = millis()/1000;
else {
if(millis()/1000 - modeTimer > modeProgTime and modeTimer != 0) {
modeTimer = openTimer = 0;
if((mode = !mode) == true) {
// Вход в режим программирования
digitalWrite(PIN_RELAY, LOW);
Serial.println(F("MASTER PROGRAMMING MODE ON"));
squeaker(4, 1200, 200, 200);
}
else {
// Выход из режима программирования
digitalWrite(PIN_RELAY, HIGH);
Serial.println(F("MASTER PROGRAMMING MODE OFF"));
squeaker(4, 2200, 200, 200);
}
delay(2000);
}
}
}
}
lastKeyTimer = millis();
key = "";
}содержание файла mysql
-- phpMyAdmin SQL Dump
-- version 4.0.10deb1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 15 2016 г., 23:19
-- Версия сервера: 5.5.50-0ubuntu0.14.04.1
-- Версия PHP: 5.5.9-1ubuntu4.19SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;--
-- База данных: `test`
---- --------------------------------------------------------
--
-- Структура таблицы `allow`
--CREATE TABLE IF NOT EXISTS `allow` (
`n` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(15) NOT NULL DEFAULT '',
`description` varchar(15) NOT NULL DEFAULT '',
`periud` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`n`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=62 ;--
-- Дамп данных таблицы `allow`
--INSERT INTO `allow` (`n`, `uid`, `description`, `periud`) VALUES
(40, '24318669213', '', '2016-09-11 08:33:06');-- --------------------------------------------------------
--
-- Структура таблицы `deny`
--CREATE TABLE IF NOT EXISTS `deny` (
`n` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(15) NOT NULL DEFAULT '',
`description` varchar(15) NOT NULL DEFAULT '',
`periud` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`n`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=36 ;--
-- Дамп данных таблицы `deny`
--INSERT INTO `deny` (`n`, `uid`, `description`, `periud`) VALUES
(29, '52147166185', '', '2016-09-11 09:45:02');-- --------------------------------------------------------
--
-- Структура таблицы `rc522`
--CREATE TABLE IF NOT EXISTS `rc522` (
`uid` bigint(12) NOT NULL,
`type` enum('0','1','2') NOT NULL DEFAULT '2',
`description` varchar(250) DEFAULT NULL,
`periud` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;--
-- Дамп данных таблицы `rc522`
--INSERT INTO `rc522` (`uid`, `type`, `description`, `periud`) VALUES
(525425, '0', '2547867648', '2016-09-11 08:23:15'),
(1807952, '1', 'брелок', '2016-09-10 11:17:15'),
(24313, '1', 'пластиковая карта', '2016-09-10 11:21:08'),
(5213185, '2', '2497267207', '2016-09-10 12:10:29');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;php список ключей и форма добавления ключа
<head>
<title>Админ-панель</title>
</head>
<!doctype html>
<code lang="utf8">
<?php
echo "Ключи в базе";
// настройки
$db_host = 'localhost';
$db_name = 'test';
$db_username = 'adatum';
$db_password = 'Elmax1975';
$db_table_to_show = 'rc522';// Соеденяемся с базой
$connect_to_db = mysql_connect($db_host, $db_username, $db_password)
or die("Could not connect: " . mysql_error());mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
mysql_query("SET NAMES utf8");
$qr_result = mysql_query("select * from " . $db_table_to_show)
or die(mysql_error());// заголовки
echo '<table cellpadding="3" cellspacing="3" border="0" align="center" width="1" rules="rows">';
echo '<thead>';
echo '<tr align="center">';
echo '<th>Тип</th>';
echo '<th>Ключ</th>';
echo '<th>Имя пользователя</th>';
echo '<th>Когда зарегистрирован</th>';echo '</tr align="center">';
echo '</thead>';
echo '<tbody>';
// таблица MySQL
while($data = mysql_fetch_array($qr_result)){
echo '<tr>';
echo '<td>' . $data['type'] . '</td>';
echo '<td>' . $data['uid'] . '</td>';
echo '<td>' . $data['description'] . '</td>';
echo '<td>' . $data['periud'] . '</td>';
echo '</tr>';
}
echo '</tbody>';
echo '</table>';// закрываем
mysql_close($connect_to_db);
?>
<body>
<?php
$host="localhost";
$user="adatum";
$pass="Elmax1975"; //установленный вами пароль
$db_name="test";
$link=mysql_connect($host,$user,$pass);
mysql_select_db($db_name,$link);
mysql_query("SET NAMES utf8");//Если переменная Name передана
if (isset($_POST["Name"])) {
//Вставляем данные, подставляя их в запрос
$sql = mysql_query("INSERT INTO `rc522` (`uid`, `type`, `description`)
VALUES ('".$_POST['Name']."','".$_POST['Price']."','".$_POST['description']."')");
//Если вставка прошла успешно
if ($sql) {
echo "<p>Ключ успешно добавлен в базу.</p>";
} else {
echo "<p>Произошла ошибка.</p>";
}
}
?>
Добавить ключ
<table>
<form action="" method="post">
<tr>
<td>ID ключа:</td>
<td><input type="text" name="Name"></td>
</tr>
<tr>
<td>Тип:</td>
<td><input type="text" name="Price" size="3"> 0-не активный 1-админ 2-стандарт.</td>
</tr>
<tr>
<td>Имя пользователя:</td>
<td><input type="text" name="description"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK"></td>
</tr>
</form>
</table>
</body>думаю странички allow и deny добавлять смысла нет так как это часть кода выше
Добрый день. Понравился данный вариант исполнения системы СКУД. Для меня важна система хранения ключей именно в базе MySQL. База импортировалась отлично, и php тоже. Правда в базе в дескрипшене проблемы с кодировками. На странице добавления ключей, русский текст читаем, а в описании знаки вопроса ????? При смене кодировок, либо вообще ничего не читается, либо читается все кроме поля дескрипшен, или там только латинские?
А вот при попытке залить скетч вываливается ошибка на этой строчке:
// Читаем ключ for (byte i = 0; i < 4; i++) key += mfrc522.uid.uidByte;
Скрытый текстC:\Users\Денис\Downloads\диплом\ардуино\скетчи\SQL\SQL.ino: In function 'void loop()':
SQL:168: error: ambiguous overload for 'operator+=' (operand types are 'String' and 'byte [10] {aka unsigned char [10]}')
C:\Users\Денис\Downloads\диплом\ардуино\скетчи\SQL\SQL.ino:168:36: note: candidates are:
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:231:0,
from sketch\SQL.ino.cpp:1:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:113:11: note: String& String::operator+=(const String&) <near match>
String & operator += (const String &rhs) {concat(rhs); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:113:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'const String&'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:114:11: note: String& String::operator+=(const char*) <near match>
String & operator += (const char *cstr) {concat(cstr); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:114:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'const char*'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:115:11: note: String& String::operator+=(char) <near match>
String & operator += (char c) {concat(c); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:115:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'char'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:116:11: note: String& String::operator+=(unsigned char) <near match>
String & operator += (unsigned char num) {concat(num); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:116:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'unsigned char'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:117:11: note: String& String::operator+=(int) <near match>
String & operator += (int num) {concat(num); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:117:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'int'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:118:11: note: String& String::operator+=(unsigned int) <near match>
String & operator += (unsigned int num) {concat(num); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:118:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'unsigned int'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:119:11: note: String& String::operator+=(long int) <near match>
String & operator += (long num) {concat(num); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:119:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'long int'
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:120:11: note: String& String::operator+=(long unsigned int) <near match>
String & operator += (unsigned long num) {concat(num); return (*this);}
^
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:120:11: note: no known conversion for argument 1 from 'byte [10] {aka unsigned char [10]}' to 'long unsigned int'
exit status 1
ambiguous overload for 'operator+=' (operand types are 'String' and 'byte [10] {aka unsigned char [10]}')Подскажите, что подправить, или опять где то очепятка в скетче при заливке на форум?
Благодарю.- 1
Замок с радиочастотной идентификацией
в Arduino
Опубликовано: · Жалоба на ответ
С выбором ком порта разобрался, надо было добавить всего лишь одну строку.
После:
Далее дописываем
Теперь другая проблема.
При выборе неверного компорта и нажатия кнопки Сканировать ключ, прога ждет ключа, но мы отсканировать не можем, в итоге висяк. На кнопки н реагирует и т.д.
Т.е. нужно сделать таймер секунд на 10, после чего закрывать компорт. Ну и вывести сообщение, выберите другой компорт.