• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие вопросы по Arduino IDE для ESP8266

Сергей_Ф

Moderator
Команда форума
@Aviator лежат там где им положено. Вы же не хотите, что бы ИДЕ перестала работать с Arduino.
путь такой ~\AppData\Local\Arduino15
Вас что в Гугле забанили? К чему такие вопросы?
 

combasoft

New member
Всем привет. У меня новичковый вопрос по работе в Aruino IDE.
Я начал было писать скетч с использованием pubSubClient, но количество переменных и констант стало настолько большим, что стало сложно ориентироваться в коде, поэтому я решил выделить в коде отдельные блоки и разнести их по классам.
Почитал как делать либы на ардуине.ру (Hacking/LibraryTutorial)
В итоге у меня получилась структура папок вида
"path to my project\classes\some_packet_name\my_class_name". В папке my_class_name три файлика: один - это keywords.txt, два других это MyClassName.cpp и MyClassName.h
Каждый класс как либу подключать не охота, хочется что б главном файлике проекта MyProject.ino было что-то типа такого:
Код:
#include <\classes\some_packet_name\my_class_name\MyClassName.h>
только такой вариант не получается(
Подскажите плиз как правильно подключить свой класс.
 

combasoft

New member
Не компилится( Ругается:
Arduino: 1.6.12 (Windows XP), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

In file included from E:\Electronic\полив\testmyLibraries\testmyLibraries.ino:1:0:

sketch\classes\rules\light_rule\LightRule.h:11:15: error: expected unqualified-id before ')' token

LightRule();

^

sketch\classes\rules\light_rule\LightRule.h:9:1: error: an anonymous struct cannot have function members

{

^

sketch\classes\rules\light_rule\LightRule.h:27:1: error: abstract declarator '<anonymous class>' used as declaration

};

^

testmyLibraries:3: error: 'lightRule' does not name a type

exit status 1
'lightRule' does not name a type

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Что-то вроде проблем с конструктором, который не принимает параметров. Подскажите плиз, что в коде поправить, что б убрать ошибки компиляции?
 

Вложения

combasoft

New member
@combasoft мне кажется он просит убрать точку с запятой в описании класса.
Спасибо, взлетело.
Выходит, на ардуине.ру был бажный пример. Код успешно компилируется как с описанием сигнатуры конструктора в h-файле: ClassName; так и без него, т.е. c закомментаренной этой строкой.
Следующая ошибка
sketch\classes\rules\light_rule\LightRule.h:13:10: error: 'byte<anonymous class>::getResult(int)', declared using anonymous type, is used but never defined [-fpermissive]

byte getResult(int x);
возникает при попытке обращения к одной из функций:
Код:
#include "classes\rules\light_rule\LightRule.h"

LightRule lightRule;

void setup() {
  // put your setup code here, to run once:
  int y = 5;
  byte x = lightRule.getResult(y);
}

void loop() {
  // put your main code here, to run repeatedly:
}
изначально сигнатура у getResult была такая: byte getResult();
а входной параметр я в нее добавил в ходе попыток забороть ошибку, возникающую при компиляции. В общем, с любым вариантом сигнатуры я получаю эту ошибку.
 

combasoft

New member
Проблема была в том, что я неверно использовал директиву define.
В дефайне нужно указывать что-то "говорящее", по чему можно соотнести это имя с конкретным h-файлом. При этом это имя не должно совпадать с именем класса. А именно так у меня и было, вот и не компилировалось. Правда по тексту ошибок от компилятора я бы до каузы еще долго добирался. Помогло сличение того, что я понаделал с примером либы с классом Morse. Переделал дефайн на такой вариант:
#ifndef LightRule_H
#define LightRule_H
и код стал компилироваться.
 

Юрий Ботов

Moderator
Команда форума
LightRule(void);
void doRule(void);
byte getResult(void);

и так до упора
Это gcc и когда вы выползаете за пределы упрощенного языка ардуины и лезете в классы вам придется аккуратно описывать все интерфейсы
 

combasoft

New member
LightRule(void);
void doRule(void);
byte getResult(void);
Я это уже смотрел на stackOverflow) Там говорилось, что в простом С для функции, которая не принимает параметров, нужно указывать void. Для С++ этого делать не требуется. Это же видно на примере с официального сайта дуины - их Morse содержит функции без параметров и они в хедере описаны как someType functionName(); , то есть без void в скобках.
 

Юрий Ботов

Moderator
Команда форума
Там говорилось, что в простом С для функции, которая не принимает параметров, нужно указывать void. Для С++ этого делать не требуется.
не наоборот? :) Тогда прочтите стандарт, а не stackoverflow. Для С отсутствие параметра (или левой части) равнозначно тому что там стоит "int". А вот C++ вообще ни понимает что такое пустые скобки и требует описания... Блин. Какой-же я наверное старый....
 

combasoft

New member
Чет не видать в свободном доступе стандарты( Есть драфт для С99: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf
И да, там было про то, что нужно хоть что-то, но указывать:
At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each struct declaration and type name.
В Arduino IDE норм компилируется и без void в скобках, как я писал выше. Видимо, компилятор позволяет такие штуки.
 

combasoft

New member
Так заработало или нет? Или так... беседуем
Беседуем) Начиная отсюда Общие вопросы по Arduino IDE для ESP8266 оно собралось и работает. Я расчитывал, что по тексту сообщения это будет понятно. Я же написал, что нашел каузу и какой способ ее исправить.
 

rv9Yw

New member
День добрый.
Есть вопрос следующего характера.
Пишу в Sublime Text c использованием Stino -> тут подробнее хттп://robotosha.ru/arduino/sublime-text-as-ide-arduino.html

Добавил в Arduino IDE через Boards Manager -> ESP8266. В ардуинке все как положено появилось и работает, а вот в STINO нет.


Может кто использует тоже и все работает? Ну или совет куда копать?
Заранее спасибо.
 
Сверху Снизу