Есть такая присказка, про занятие сексом стоя, на лыжах, в гамаке!
Не знаю - почему я вспомнил?
Извините
т.с. - это что?
Прагма онс - я знаю для чего. Это что бы этот заголовочный “загружался” только один раз. Ну или как раньше делали оборачивали весь код файла в дефайн…
“так сказать”
Гораздо удобнее работать с проектом, когда он разбит на логические блоки
В чем тут секс стоя?
Для ленивых повторю ПРАВИЛА сборки скетча, принятые в Ардуино ИДЕ.
- ВСЕ файлы с расширением “.ino” собираются в один файл следующим образом: ПЕРВЫМ ставится текст из файла с наименованием ПАПКИ скетча. Затем из остальных - ПО АЛФАВИТУ! Затем добавляются прототипы всех функций у которых нет прототипов, из этой кучи. Затем всё это передается компилятору.
Файлы .cpp - компилируются как положено. Вся “кухня” касается исключительно файлов .ino.
Доходит ли теперь, что Dev.ino вписано в кучу РАНЬШЕ, чем Test.ino? Test.ino окажется первым ИСКЛЮЧИТЕЛЬНО тогда, когда сама ПАПКА скетча так называется, а у ТС она называется TestH.
Это всё - общеизвестные для Ардуино вещи и следует ИЗБЕГАТЬ многих ino в своих проектах!
А протопип функции обявить не пробовали?
В том, что в твоем проекте несколько “.ino”, а должен быть один. Остальные нужно делать “.cpp” и “.h”.
Нет там никакой проблемы, Вы просто в файле Dev.ino забыли написать #include "first.h"
Здесь нет и не может быть нестандартных глюков - Вы говорите об элементарных вещах, которые работают и не могут не работать.
Примерно про добавление по алфавиту я знал. И да, Вы смотрели примеры ваше? Я привел в одном сообщении три примера. Один(первый) НЕ рабочий и два рабочих. И как-то там не понятно все равно с “вашей теорией”…
Но как же тогда без #include "first.h"
работает в том же файле(Dev.ino) объявление переменной типа из h???
Это не моя теория. Дискутировать - в саду, за углом, около аптеки и не с о мной. Я написал то, что есть на самом деле и объяснил, почему это произошло. Трахаться стоя и в гамаке - далее предлагаю самостоятельно.
Ок. Буду приучаться к этому.
Ну и ладно… просто хотел разобраться
Никак не работает.
Знаете, что, в посте уже 32 сообщения, а простейший вопрос до сих пор не решён и знаете почему? Потому что Вы выносите всем мозг вместо того, чтобы сделать простую вещь.
Вот давайте Вы сейчас вставите ОДИН ПОЛНЫЙ скетч в котором видна проблема. Ещё раз для альтернативно одарённых - ОДИН ПОЛНЫЙ СКЕТЧ демонстрирующий проблему без всякого бла-бла и заумных теорий про нестандартные глюки.
Тут всё настолько элементарно, что это постараться надо так засрать мозги себе и всем остальным.
Пожалуйста:
TestH.ino:
#include "first.h"
first.h:
struct TData {
bool isR;
int sw;
};
Dev.ino:
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
TData rr; // <- тут тип виден
bool readdata (TData dd) { // <- тут тип НЕ виден
rr.isR = false;
dd.sw = 100;
}
Потому что Dev.ino объединяется с TestH.ino
Объединяется - значит тексты обоих файлов сливаются в один. Т.е. компилятору предъявляется файл
#include "first.h"
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
TData rr; // <- тут тип виден
bool readdata (TData dd) { // <- тут тип НЕ виден
rr.isR = false;
dd.sw = 100;
}
Вопрос в общем виде решен. Я никому ничего не выношу, отвечаю на вопросы и комментирую… Не вижу причин злится. Тем более и варианты с глюком и вариант решения я привел в данной ветке.
Ну да… и в таком вот виде он НЕ работает))) Но если разнести функции setup и loop c readdata в разные вкладки - то работает.
Работает. Но с одной поправкой (см. строку 19 на скриншоте) - функция
bool readdata (TData dd)
должна что-то возвращать. А у вас не возвращает ничего. Нужно внимательно читать сообщения об ошибках ))
Итак, у Вас два файла .ino Собственно проблема именно в этом - в том, что Вы не умеете их правильно использовать. Там очень много тонкостей и объяснять их Вам сейчас бесполезно, Вы не готовы воспринять это. Поэтому, запомните следующие вещи и они помогут Вам делать всё и всегда правильно
- В папке должен быть один (прописью - один) файл c расширением .ino)
- Выражение
#include <имя файла>
полностью и абсолютно эквивалентно тому, как если бы Вы просто вставили в это место содержимое того самого файла. Никаких других тонкостей тут нет. Это просто вставка содержимого в это место.
Исходите из этого и проблем никогда не будет.
Вот как у Вас должно быть.
///// Файл Dev.ino
///
#include "first.h"
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
TData rr; // <- тут тип виден
bool readdata (TData dd) {
rr.isR = false;
dd.sw = 100;
return dd.isR;
}
.
///// Файл first.h
///
#ifndef FIRST_H
#define FIRST_H
struct TData {
bool isR;
int sw;
};
#endif
.
///// Файл testh.cpp
///
#include "first.h"