Не компилится код Zuno

Данный раздел предназначен для русскоязычных пользователей. Если вы владеете английским, рекомендуем также просмотреть общую ветку обсуждений на английском.
User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Не компилится код Zuno

Post by picachu » 16 Aug 2017 16:34

Доброго дня.

Вероятнее это надо писать в теме по зуне, но мой уровень английского сего не позволяет, поэтому спрошу тут.

При компиляции кода для модуля RC522 возникает ошибка. Компилятор ругается на модуль CPI.
Под ардуиной все работает нормально.

Код:

Code: Select all

#include "SPI.h" 
#include "ZUNO_MFRC522.h" // library "RFID". 

// Pin (SS и RST) allow arbitrary connection and configured in the code. 
// !(SS- he - SDA). 
#define RST_PIN 9 
#define SS_PIN 10 
#define LED_PIN 13

SPISettings spi_params;
MFRC522 mfrc522(&spi_params,SS_PIN, RST_PIN);  //  reate MFRC522 instance. 
unsigned long uidDec, uidDecTemp;  // display card number in decimal format

// Last saved LED value
byte currentLEDValue;

// set up channel
ZUNO_SETUP_CHANNELS(
   ZUNO_SENSOR_BINARY_DOOR_WINDOW(getter, setter));

void setup() { 
  SPI.begin();  //  initialize SPI / Init SPI bus. 
  mfrc522.PCD_Init();     // initialize MFRC522 / Init MFRC522 card. 
  pinMode(RELE_PIN, OUTPUT);  
} 

void loop() { 
  // Look for new cards. 
  if ( ! mfrc522.PICC_IsNewCardPresent()) { 
    return; 
  } 

  // Select one of the cards. 
  if ( ! mfrc522.PICC_ReadCardSerial()) { 
    return; 
  } 

  uidDec = 0; 

  // The results of the serial number of the card "UID". 
  for (byte i = 0; i < mfrc522.uid.size; i++)  
  { 
    uidDecTemp = mfrc522.uid.uidByte[i]; 
    uidDec = uidDec*256+uidDecTemp;   
  }   

void setter(byte value)() {
// compare the number of "UID", cards with the recorded number of "UID" in the sketch.
    if (uidDec == 2949947481)   // replace!!!"UID" № "2949947481", the number "UID" number of your card. 
  {
    digitalWrite(LED_PIN, HIGH); // Turn on the led
    // The rest of the code
  }    
  //pause 2 seconds 
  delay(2000);
  {
    digitalWrite(LED_PIN, LOW); // Turn off the led
  }  
  currentLEDValue = value;
} 

byte getter() {
  return currentLEDValue;
}
}
Ошибка :

Code: Select all

Arduino: 1.6.5 (Windows 7), Плата"Z-Wave>ME Z-Uno, Russian, Disabled, Disabled"
Используем библиотеку SPI в папке: C:\Program Files (x86)\Arduino\libraries\SPI-master 
Используем библиотеку MFRC522 в папке: C:\Program Files (x86)\Arduino\libraries\ZUNO_MFRC522 

WARNING: library MFRC522 claims to run on [avr, STM32F1, teensy] architecture(s) and may be incompatible with your current board which runs on [zw8051] architecture(s).

C:\Users\Iam\AppData\Roaming\Arduino15\packages\Z-Uno\tools\zuno_toolchain\00.08.31/zuno_toolchain/compiler build C:\Users\Iam\AppData\Local\Temp\build6858813404277879763.tmp/tewst.cpp -r C:\Users\Iam\AppData\Roaming\Arduino15\packages\Z-Uno\hardware\zw8051\2.0.9 

	************* Building Arduino Sketch *************
	C:\Users\Iam\AppData\Local\Temp\build6858813404277879763.tmp/tewst.cpp
	***************************************************

C:\Users\Iam\AppData\Local\Temp\build6858813404277879763.tmp/tewst.cpp:59:1:error:uCxx doesn't support "for" statement with empty columns or without body!

Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build6858813404277879763.tmp\SPI.cpp with SDCPP... 
Compiling C:\Users\Iam\AppData\Local\Temp\build6858813404277879763.tmp\SPI_sdcpp_.cpp ...

uCxx returned error code:1

Ошибка компиляции.
Модуль ZUNO_MFRC522 взят из этого топика viewtopic.php?p=65471#p65471

User avatar
PoltoS
Posts: 4268
Joined: 26 Jan 2011 19:36

Re: Не компилится код Zuno

Post by PoltoS » 17 Aug 2017 00:46

Смущает вот это:
Используем библиотеку SPI в папке: C:\Program Files (x86)\Arduino\libraries\SPI-master

Видимо, стоит кастомная библиотека, которая перекрывает штатную зуновскую. Попробуйте эту папку временно убрать

User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Re: Не компилится код Zuno

Post by picachu » 17 Aug 2017 21:44

Та же ошибка. Я собственно сперва подумал, что нет библиотеки, поэтому добавил.

Поправил код, ошибся в паре скобок.

Code: Select all

 #include "SPI.h"
#include "ZUNO_MFRC522.h" // library "RFID". 

/*
 -----------------------------------------------------
 * Signal     Pin              Pin
 *            Zuno        MFRC522 board
 * ------------------------------------------------------------
 * Reset       9               RST
 * SPI SS       8               SDA
 * SPI MOSI   2               MOSI
 * SPI MISO   1               MISO
 * SPI SCK     0               SCK

 */

// Pin RST connection and configured in the code.(SS- he - SDA).
#define RST_PIN 9
#define LED_PIN 13

SPISettings spi_settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
SPI.beginTransaction(&spi_settings);
ZMFRC522_h MFRC522(&spi_settings, RST_PIN); //  reate MFRC522 instance.
unsigned long uidDec, uidDecTemp;  // display card number in decimal format


// Last saved LED value
byte currentLEDValue;

// set up channel
ZUNO_SETUP_CHANNELS(
  ZUNO_SENSOR_BINARY_DOOR_WINDOW(getter, setter));

void setup() {
  SPI.beginTransaction();  //  initialize SPI / Init SPI bus.
  MFRC522.PCD_Init();     // initialize MFRC522 / Init MFRC522 card.
  pinMode(LED_PIN, OUTPUT);


  void loop() {
    
    // Look for new cards.
    if ( ! MFRC522.PICC_IsNewCardPresent()) {
      return;
    }
  
  
    // Select one of the cards.
    if ( ! MFRC522.PICC_ReadCardSerial()) {
      return;
    }

    uidDec = 0;

    // The results of the serial number of the card "UID".
    for (byte i = 0; i < MFRC522.uid.size; i++)
    {
      uidDecTemp = MFRC522.uid.uidByte[i];
      uidDec = uidDec * 256 + uidDecTemp;
    }

    void setter(byte value)() {
      // compare the number of "UID", cards with the recorded number of "UID" in the sketch.
      if (uidDec == 2949947481)   // replace!!!"UID" № "2949947481", the number "UID" number of your card.
      {
        digitalWrite(LED_PIN, HIGH); // Turn on the led
        // The rest of the code
      }
      //pause 2 seconds
      delay(2000);
      {
        digitalWrite(LED_PIN, LOW); // Turn off the led
      }
      currentLEDValue = value;
    }

    byte getter() {
      return currentLEDValue;
    }
  }
Пошла следующая ошибка

Code: Select all

Arduino: 1.6.5 (Windows 7), Плата"Z-Wave>ME Z-Uno, Russian, Disabled, Enabled"

Используем библиотеку MFRC522 в папке: C:\Program Files (x86)\Arduino\libraries\ZUNO_MFRC522 

WARNING: library MFRC522 claims to run on [avr, STM32F1, teensy] architecture(s) and may be incompatible with your current board which runs on [zw8051] architecture(s).

C:\Users\Iam\AppData\Roaming\Arduino15\packages\Z-Uno\tools\zuno_toolchain\00.08.31/zuno_toolchain/compiler build C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp/tewst.cpp -r C:\Users\Iam\AppData\Roaming\Arduino15\packages\Z-Uno\hardware\zw8051\2.0.9 

	************* Building Arduino Sketch *************
	C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp/tewst.cpp
	***************************************************

Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\Print.cpp with SDCPP... 
Compiling C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\Print_sdcpp_.cpp ...
Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\Stream.cpp with SDCPP... 
Compiling C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\Stream_sdcpp_.cpp ...
Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\HardwareSerial.cpp with SDCPP... 
Compiling C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\HardwareSerial_sdcpp_.cpp ...
Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\HLCore.cpp with SDCPP... 
Compiling C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\HLCore_sdcpp_.cpp ...
Preprocessing file: C:\Users\Iam\AppData\Local\Temp\build2071106001968128110.tmp\_tewst.cpp with SDCPP... 
tewst.ino:2:46: fatal error: ZUNO_MFRC522.h: No such file or directory
compilation terminated.
Preprocessor failed!uCxx returned error code:1

Ошибка компиляции.
В этой теме viewtopic.php?p=65471#p65471 как я понял так и не сумели решить проблему и Вы рекомендовали дождаться версии 2.0.7. Но сейчас версия вроде уже 2.0.9


PS. Нашел несоответствие в коде. В библиотеке ZUNO_MFRC522.h пин SS_PIN жестко объявлен 8, а у меня 10. Исправил, ошибка не ушла.

User avatar
PoltoS
Posts: 4268
Joined: 26 Jan 2011 19:36

Re: Не компилится код Zuno

Post by PoltoS » 18 Aug 2017 02:01

Правок куча - много ошибок было.

Вот дифф с моими комментариями

Code: Select all

18a19 -- добавил описание SS_PIN (поменяйте, если нужно)
> #define SS_PIN 10
21,23c22,23 -- нельзя писать код и присваивать значения вне ф-ций. заменил на конструкторы. Что за ZMFRC522_h? Переименовал в MFRC522. Имя объекта MFRC522 заменил на mrfc522, т.к. первое уже занято под имя класса.
< SPISettings spi_settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
< SPI.beginTransaction(&spi_settings);
< ZMFRC522_h MFRC522(&spi_settings, RST_PIN); //  reate MFRC522 instance.
---
> SPISettings spi_settings(4000000, MSBFIRST, SPI_MODE0);
> MFRC522 mrfc522(&spi_settings, RST_PIN, SS_PIN); //  reate MFRC522 instance.
30a31 -- убрал описание канала, т.к. для датчика открытия setter не нужен
> /*
32a34
> */
35,36c37,39 -- вот тут инициализируем.
<   SPI.beginTransaction();  //  initialize SPI / Init SPI bus.
<   MFRC522.PCD_Init();     // initialize MFRC522 / Init MFRC522 card.
---
>   SPI.beginTransaction(&spi_settings);
>   SPI.begin();  //  initialize SPI / Init SPI bus.
>   mrfc522.PCD_Init();     // initialize MFRC522 / Init MFRC522 card.
38a41 -- забыта скобка
> }
43c45 -- имя переменной (а не класса)
<     if ( ! MFRC522.PICC_IsNewCardPresent()) {
---
>     if ( ! mrfc522.PICC_IsNewCardPresent()) {
49c51
<     if ( ! MFRC522.PICC_ReadCardSerial()) {
---
>     if ( ! mrfc522.PICC_ReadCardSerial()) {
56,58c57,59
<     for (byte i = 0; i < MFRC522.uid.size; i++)
<     {
<       uidDecTemp = MFRC522.uid.uidByte[i];
---
>     for (byte i = 0; i < mrfc522.uid.size; i++)
>     {
>       uidDecTemp = mrfc522.uid.uidByte[i];
61,62c61,63 -- что за скобки после списка параметров ф-ции?? закомментировал getter/setter, т.к. не используются
< 
<     void setter(byte value)() {
---
> }
> /*
>     void setter(byte value) {
80c81
<   }
---
> */

User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Re: Не компилится код Zuno

Post by picachu » 18 Aug 2017 10:34

PoltoS wrote:
18 Aug 2017 02:01
Правок куча - много ошибок было.

Вот дифф с моими комментариями
Поправил, выверил скобки.
Ошибка таже
PoltoS wrote:
18 Aug 2017 02:01
-- Имя объекта MFRC522 заменил на mrfc522, т.к. первое уже занято под имя класса.
Это свитчер зачем то поменял на заглавные буквы при вставке из буфера. В коде строчными.

Code: Select all

#include <SPI.h>
#include <ZUNO_MFRC522.h>

// Pin connection and configured
#define RST_PIN 9
#define SS_PIN 8
#define LED_PIN 13

SPISettings spi_settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
MFRC522 mrfc522(&spi_settings, RST_PIN, SS_PIN); //  reate MFRC522 instance.
unsigned long uidDec, uidDecTemp;  // card number in decimal format

// Last LED value
byte currentLEDValue;

// set up channel
ZUNO_SETUP_CHANNELS(ZUNO_SENSOR_BINARY_DOOR_WINDOW(getter));

void setup() {
  SPI.beginTransaction(&spi_settings);
  SPI.begin();  //  Init SPI
  mrfc522.PCD_Init();     // Init MFRC522
  pinMode(LED_PIN, OUTPUT);
}

void loop() {

  // Look for new cards.
  if ( ! mrfc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards.
  if ( ! mrfc522.PICC_ReadCardSerial()) {
    return;
  }

  uidDec = 0;
  for (byte i = 0; i < mrfc522.uid.size; i++)    // The results of the serial number of the card "UID".
  {
    uidDecTemp = mrfc522.uid.uidByte[i];
    uidDec = uidDec * 256 + uidDecTemp;
  }
  if (uidDec == 2949947481)   // compare the number of "UID", cards with the recorded number of "UID" in the sketch.
  {
    digitalWrite(LED_PIN, HIGH); // Turn on the led
    // The rest of the code
  }
  //pause 3 seconds
  delay(3000);
  {
    digitalWrite(LED_PIN, LOW); // Turn off the led
    currentLEDValue = value;
  }

  byte getter() {
/*    if (currentLEDValue == 0) { 
      return 0xff;             
    } else {                   
      return 0;                 
    }
  }
 */
}
А как файл "ino" прикрепить, что бы код не вставлять?

User avatar
PoltoS
Posts: 4268
Joined: 26 Jan 2011 19:36

Re: Не компилится код Zuno

Post by PoltoS » 18 Aug 2017 13:13

Эту строчку так и не поменяли
SPISettings spi_settings = SPISettings(4000000

User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Re: Не компилится код Zuno

Post by picachu » 18 Aug 2017 13:44

Упс, упустил. Поправил, всё равно ошибка.

Code: Select all

Arduino: 1.6.5 (Windows 8.1), Плата"Z-Wave>ME Z-Uno, Russian, Disabled, Disabled"
Используем библиотеку MFRC522 в папке: C:\Program Files (x86)\Arduino\libraries\ZUNO_MFRC522 

WARNING: library MFRC522 claims to run on [avr, STM32F1, teensy] architecture(s) and may be incompatible with your current board which runs on [zw8051] architecture(s).

C:\Users\vjik5\AppData\Roaming\Arduino15\packages\Z-Uno\tools\zuno_toolchain\00.08.31/zuno_toolchain/compiler build C:\Users\vjik5\AppData\Local\Temp\build7103122540897188909.tmp/tewst.cpp -r C:\Users\vjik5\AppData\Roaming\Arduino15\packages\Z-Uno\hardware\zw8051\2.0.9 

	************* Building Arduino Sketch *************
	C:\Users\vjik5\AppData\Local\Temp\build7103122540897188909.tmp/tewst.cpp
	***************************************************
C:\Users\vjik5\AppData\Local\Temp\build7103122540897188909.tmp/tewst.cpp:49:1:error:uCxx doesn't support "for" statement with empty columns or without body!

Preprocessing file: C:\Users\vjik5\AppData\Local\Temp\build7103122540897188909.tmp\SPI.cpp with SDCPP... 
Compiling C:\Users\vjik5\AppData\Local\Temp\build7103122540897188909.tmp\SPI_sdcpp_.cpp ...

uCxx returned error code:1
Ошибка компиляции.

Вот все модули собираются, а RFID ну ни как. :(
Ругается и все.

Кстати я сначала написал SPISettings spi_settings(4000000, MSBFIRST, SPI_MODE0);, а потом поправил на основе примера http://z-uno.z-wave.me/Reference/SPI/

Code: Select all

SPISettings spi_settings = SPISettings(8000000, MSBFIRST, SPI_MODE0);
SPI.beginTransaction(&spi_settings);
// ...
SPI.endTransaction();
.
Last edited by picachu on 18 Aug 2017 15:25, edited 6 times in total.

User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Re: Не компилится код Zuno

Post by picachu » 18 Aug 2017 14:09

Удалил все из скетча кроме инициализации модуля, не собирается.

Code: Select all

#include <SPI.h>
#include <ZUNO_MFRC522.h>
#define RST_PIN 9
#define SS_PIN  8

SPISettings spi_settings(4000000, MSBFIRST, SPI_MODE0);
MFRC522 mrfc522(&spi_settings, RST_PIN, SS_PIN); 
void setup() {
  SPI.beginTransaction(&spi_settings);
  SPI.begin();  //  Init SPI
  mrfc522.PCD_Init();     
  }
void loop() {
//
  }
Если закоментить RFID библиотеку, то все нормально.

Code: Select all

#include <SPI.h>
 // #include <ZUNO_MFRC522.h>
#define RST_PIN 9
#define SS_PIN  8

SPISettings spi_settings(4000000, MSBFIRST, SPI_MODE0);
//  MFRC522 mrfc522(&spi_settings, RST_PIN, SS_PIN); 
void setup() {
  SPI.beginTransaction(&spi_settings);
  SPI.begin();  //  Init SPI
 // mrfc522.PCD_Init();    
 void loop() {
//
  }
Значит проблема в библиотеке в ZUNO_MFRC522.h?

Взял библиотеку для ардуино https://github.com/miguelbalboa/rfid то же самое.
Нашел ещё пяток на просторах интернета, ошибка аналогичная.

Проверил все библиотеки на ардуино, заработали все, даже ZUNO_MFRC522.h
Получается проблема не в них, а в совместимости с зуной.
Как выйти из положения? Нужен FRID модуль на 13 мегагерц. 125 как в примерах не пойдет.

User avatar
PoltoS
Posts: 4268
Joined: 26 Jan 2011 19:36

Re: Не компилится код Zuno

Post by PoltoS » 18 Aug 2017 15:32

Перенесите папку ZUNO_MFRC522 в C:\Users\vjik5\AppData\Roaming\Arduino15\packages\Z-Uno\hardware\zw8051\2.0.9\libraries\

User avatar
picachu
Posts: 68
Joined: 02 Mar 2016 10:44

Re: Не компилится код Zuno

Post by picachu » 27 Aug 2017 14:05

Перенес, скомпилилось. После заливки и включения в сеть в интерфейсе появляется бинарный датчик, после чего зуна виснет намертво. Путем многократного нажатия на кнопку сброса оживает, но после этого не на что не реагирует. При прошивке других скетчей все нормально.Что то ей не нравится в коде, что не понять не могу.
Заливаю тот же код в ардуину, выкидывая строчки о канале и секцию геттер, всё работает.

Post Reply