Помощь со скетчем

legion1229
Offline
Зарегистрирован: 07.11.2018
Вот сам скетч
//============================================================================================
// Подключение модулей:
//RFID:
//    10 пин - SS(slave select) управляющий пин для выбора RFID модуля 
// Ethernet:
//    8 пин - SS(slave select) управляющий пин для выбора сетевой карты
//============================================================================================

// Билиотека для работы с SPI, необходимо для работы сетевой карты и RFID приемника.
#include <SPI.h>

// Библиотека для работы с сетевой картой
#include <EtherCard.h>

// Библиотека необходимые для работы с RFID модулем
#include <MFRC522.h>

// Библиотеки для работы с дисплеем. Библиотека работает с дмсплеем по I2C, а не по SPI
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

// Создаем экземпляр класса, для работы с RFID
// Первый аргумент - номер пина к которому подключен SS (slave select)
// Второй аргумент - номер пина к которому подключен RST (reset)
MFRC522 mfrc522(10, 9);   // Create MFRC522 instance.

// Создаем экземпляр класса, для работы с дисплеем.
// Второй аргумент - количество символов в строке
// Третий аргумент - количество строк
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Буффер сетевой карты
byte Ethernet::buffer[700];

// Адрес сайта на который будем стучаться (в моем случае он запускается на одном с сервером IP) 
const char website[] PROGMEM = "192.168.0.104"; //Замените на ip адрес вашего компьютера

// IP адрес сервера.
static byte websiteip[] = { 192,168,0,104 }; //Замените на ip адрес вашего компьютера

//Мак-адрес устройства
static byte mac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

//RFID id который мы получили от пользователя
char rfid_id[9];

// Действия после успешной отправки данных
static void my_callback (byte status, word off, word len) {
  // Очищаем буфер сетевой карты
  Ethernet::buffer[off+300] = 0;

  // Выводим информацию об успешной отправке данных на экран
  lcd.clear();
  lcd.print("Successfully!");
  delay(1000);
  lcd.clear();
  lcd.print("Waiting label..");
}

// Выбираем сетевую карту для работы по SPI.
void select_ethernet(){
  digitalWrite(8,LOW);
  digitalWrite(10,HIGH);
}

// Выбираем RFID модуль для работы по SPI
void select_rfid(){
  digitalWrite(8,HIGH);
  digitalWrite(10,LOW);  
}

// Функция отправки данных на сервер
void send_package(){
  select_ethernet();
  ether.packetLoop(ether.packetReceive());
  // Формирование Http-Get запроса
  ether.browseUrl(PSTR("/cgi-bin/processor.py?RFIDCode="),rfid_id, website, my_callback);
}

//Получение id с RFID карты и запись в rfid_id
void get_rfid_id(byte *buffer) {
    // Данные в буффере rfid модуля храняться в виде байтов, фактически числа от 0 до 255, но для более удобочитаемого вида будем записывать в String в hex формате
    String  hex_rfid_id;

    //Читаем данные из буффера и записываем в hex_rfid_id в шеснадцатиричной системе счисления
    for (byte i = 0; i <= 9; i++) {
      hex_rfid_id += buffer[i] < 0x10 ? "0" : ""; 
      hex_rfid_id += String(buffer[i],HEX);
    }

    //Эти данные нам будет необходимо отправить в буффер, поэтому наш String необходимо преобразовать в массив символов
    
    hex_rfid_id.toCharArray(rfid_id,[9]);
}

void setup () {
  // Инициализируем SPI для работы с модулями
  SPI.begin();
  
  // Инициализируем дисплей
  lcd.begin();
  
  // Инициализация serial-монитора
  Serial.begin(9800);
  
  // Включем подстветку
  lcd.backlight();
  lcd.print("Loading...");

  // Выбираем сетевую карту, для работы по SPI
  select_ethernet();
  // Инициализация сетевой карты, второй аргумент - мак-адрес (должен быть уникальным! Можно не менять, если в сети устройства с таким адресом нет).
  if (ether.begin(sizeof Ethernet::buffer, mac) == 0) 
    Serial.println(F("Failed to access Ethernet controller"));
  else
    Serial.println(F("Successfully to access Ethernet controller"));
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));
  else
    Serial.println(F("Successfully DHCP"));
  memcpy(ether.hisip, websiteip, sizeof(websiteip));   
  ether.printIp("SRV: ", ether.hisip);
  lcd.clear();
  lcd.print("Welcome!");
  // Выбираем RFID модуль, для работы по SPI 
  select_rfid();
  // Инициализируем RFID модуль
  mfrc522.PCD_Init();
}

void loop () {
  // Смотрим есть ли новые поднеснные карты
  if (mfrc522.PICC_IsNewCardPresent()){
    // Выбираем одну из карт
    if (mfrc522.PICC_ReadCardSerial()){
      // посылаем данные на сервер
      get_rfid_id(mfrc522.uid.uidByte);
      send_package();
    }
  }
}

Выдает ошибку на     hex_rfid_id.toCharArray(rfid_id,[9]);

Помогите пожалуйста 

legion1229
Offline
Зарегистрирован: 07.11.2018

sadman41
Offline
Зарегистрирован: 19.10.2016

Ничерта не видно.

legion1229
Offline
Зарегистрирован: 07.11.2018
C:\Users\stunt\Desktop\ESCV-366ba8c29464f0e6162f9b8c56db3d2b5ac0aa8a\v3\ESCV_Arduino\ESCV_Arduino.ino: In function 'void get_rfid_id(byte*)':
 
ESCV_Arduino:97: error: expected identifier before numeric constant
 
     hex_rfid_id.toCharArray(rfid_id,[9]);
 
                                      ^
 
C:\Users\stunt\Desktop\ESCV-366ba8c29464f0e6162f9b8c56db3d2b5ac0aa8a\v3\ESCV_Arduino\ESCV_Arduino.ino: In lambda function:
 
ESCV_Arduino:97: error: expected '{' before ')' token
 
     hex_rfid_id.toCharArray(rfid_id,[9]);
 
                                        ^
 
C:\Users\stunt\Desktop\ESCV-366ba8c29464f0e6162f9b8c56db3d2b5ac0aa8a\v3\ESCV_Arduino\ESCV_Arduino.ino: In function 'void get_rfid_id(byte*)':
 
C:\Users\stunt\Desktop\ESCV-366ba8c29464f0e6162f9b8c56db3d2b5ac0aa8a\v3\ESCV_Arduino\ESCV_Arduino.ino:97:39: note: candidate is: get_rfid_id(byte*)::<lambda()>::operator void (*)()() const <near match>
 
     hex_rfid_id.toCharArray(rfid_id,[9]);
 
                                       ^
 
C:\Users\stunt\Desktop\ESCV-366ba8c29464f0e6162f9b8c56db3d2b5ac0aa8a\v3\ESCV_Arduino\ESCV_Arduino.ino:97:39: note:   no known conversion from 'void (*)()' to 'unsigned int'
 
exit status 1
expected identifier before numeric constant
 
nik182
Offline
Зарегистрирован: 04.05.2015

Попробуйте объяснить что делает строка 94?

legion1229
Offline
Зарегистрирован: 07.11.2018

Написано же сверху 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

legion1229 пишет:

Написано же сверху 

 

Там неправильно написано.

Лучше попытайтесь сказать своими словами.

b707
Offline
Зарегистрирован: 26.05.2017

Легион, посмотрите справку на функцию String.toCharArray и сравните со своей строкой. И вообще, с этого надо было сразу начать, а не в форум пулять