Перейти к публикации
iT4iT.CLUB

Small_d

Пользователи
  • Публикации

    9
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    14

Сообщения, опубликованные пользователем Small_d


  1. С выбором ком порта разобрался, надо было добавить всего лишь одну строку.
    После:

    //Сканирование UID ключа
            private void scaner()
            {
    Добавить
    
    serialPort1.PortName = cbPorts.Text;

    Далее дописываем

    	serialPort1.Open();
                string uidkey = serialPort1.ReadLine();
                serialPort1.Close();
                textBox1.Text = uidkey;
            }

    Теперь другая проблема.

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


  2. Всем привет. 
    По ходу написания своего диплома, написал небольшую форму на С# для администрирования базы данных. 
    В форме выводится таблица, возможно изменять данные ключей, добавлять и удалять ключи. Для работы нужна вторая ардуинка с 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;
            }

    Как сделать, что бы сканирование ключа происходило исходя из выбранного выше компорта в комбобоксе?



     

    scud_admin_bb.png

    scud_client.jpg

    • Like 1

  3. 24 минуты назад, melfis сказал:

    гляньте вот все собрал. на кнопку работает и в мониторе порта пишет. на карточку думает секунд 5 и пищит просто но в мониторе порта пусто. наверное потому что к серверу подключения нету?

    llll.JPG

    melfis,

     

    как подключен эзернет шилд? Через роутер или напрямую к компу?
    Через роутер, проверяйте IP сервера в скетче
    Если на прямую, то надо сперва DHCP сервер поднять, чтоб комп раздал IP на эзернет шилд. 
    Без DHCP патч корд другой нужен, кроссовер. Вроде)) Поправьте, если ошибаюсь.
    В скетче указать IP сервера, т.е. компа
    Пользователь по умолчанию root, но можно в базе и своего создать, только права ему дать нужные, ну и пароль, если есть.

    У меня работало либо с роутером, который раздавал IP, либо с поднятым DHCP сервером на компе, чтоб исключить лишнее звено (роутер). Без них так же выдавало 0.0.0.0 и соответственно ничего не работало.

     

     


  4. 28 минут назад, melfis сказал:

    здравствуйте. при попытке сборки версии замка с подключением к базе данных столкнулся с трудностями:
    1. в мониторе порта ошибка кодировки(порой может появится часть текста а порой только квадратики)
    2. реле щелкает раз в 5 сек (и в мониторе порта после каждого щелчка появляется один квадратит)
    3. при поднесении к считывателю карты информация о ней не появляется в мониторе порта(хотя светодиод на езернет шилде моргает когда я подношу карту а как убираю начинает гореть).
    пробовал предыдущие версии ваших скетчей (где запись идет в память там все работает отлично)

     melfis, ошибки кодировки в консоли, скорее всего скорость не выставил. Поставь 115200 бод, вместо 9600. В скетче скорость указана.

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


  5. @Kitsum, благодарю. Скетч залился, кодировка UTF8 ни в какую не захотела работать, то одно кракозябрами, то другое, а вот при смене кодировки в базе и на страничке в ср1251 все отображается отлично и описание ключей и сам текст полей оформления. 
    Другая проблема возникла, собрал схему с одной кнопкой, одним реле, и переключателем режимов, как нарисовано на второй странице темы, где пример с базой выложен.

    1. Как понять, считывает ли ключ rfid датчик или нет? 
    Дело в том, что в консоль у меня выводится только ip ардуинки и приглашение на сайт, причем не важно приложил я метку или нет. Через каждые 10-15 секунд (точно не засекал) выдает ip с приветствием и срабатывает реле. Т.е. получается, что дверь сама постоянно открывается.
    Но на кнопку реагирует как надо, нажимаем, идет тройной зумер и в консоль выводится сообщение, дверь открыта, дверь закрыта, реле открывается соответственно. Через какое то время, снова реле открывается само и ip с приглашением выдается. 

    2. При считывании UID метки стандартным скетчем, где выдает в dec и hex формате, dec выглядит так - 12, 345, 67, 89 , т.е. записать мастер ключ в базу, я должен просто слитно, 123456789, убрав пробелы и запятые? Или еще как то сконвертить надо? Опять же вопрос возник потому что в консоль ключи не выводит, как на примере.


  6. В 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  // OPEN

    IPAddress 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 password

    const 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.19

    SET 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]}')

    Подскажите, что подправить, или опять где то очепятка в скетче при заливке на форум?
    Благодарю.

    • Like 1
×
×
  • Создать...