Serial.Print() в присоединенном файле

jsv001
Offline
Зарегистрирован: 06.10.2018

Прошу подсказать, как вызвать функцию Serial.Print() в присоединенном файле.

Папка a1

скетч a1.ino

его содержимое 

//==========================================================

char p = 32;

extern "C" void mfunc(void);

void setup()

{

Serial.begin(9600);

}

//==========================================================

void loop()

{

mfunc();

Serial.write(p);

}

//==========================================================

присоединенный файл a1.c

extern char p;

void mfunc(void)

{

p++;

//Serial.write(p);

}

Суть проблемы - ежели выводить в порт в основном цикле, все работает

если же выводить в присоединенном файле (раскомментировать строку),

обижается, и пишет, что 'Serial' undeclared.

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015
#include <Arduino.h>

первой строчкой в "присоединённом" файле.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Справа вверху в окошечке добавить файл пробовали?
Кстати файлы почему-то добавляются с расширением ino.......

jsv001
Offline
Зарегистрирован: 06.10.2018

Спасибо, разобрался

Кстати, добавление #include <Arduino.h> не помогает

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

jsv001 пишет:

Спасибо, разобрался

Кстати, добавление #include <Arduino.h> не помогает

 

И что же именно помогло, кстати?

jsv001
Offline
Зарегистрирован: 06.10.2018

Помогло переименование присоединённого файла.

Я его назвал a11.ino, и все заработало.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

jsv001 пишет:

Помогло переименование присоединённого файла.

Я его назвал a11.ino, и все заработало.

Ахренеть :))))) Ну то есть ты не разобрался, как работать с *.c/*.cpp-файлами? Ну оно тебе, видимо, и не надо. Забей.

jsv001
Offline
Зарегистрирован: 06.10.2018

Не надо Ахреневать, ты еще будешь нужен родине и семье.

Присоединенный файл с расширением .с содержит код, сделаный в AVRStudii №4.19.

Все прекрасно работает, классы там не нужны, обычный СИ.

Ну и захотелось еще и в компорт вывести информацию. Сервис, тысызыть...

Попробовал, там то и возникла проблема (уже решенная).

 

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

jsv001 пишет:

 

Присоединенный файл с расширением .с содержит код, сделаный в AVRStudii №4.19.

 

видимо не тобой код то сделан, если ты #include добавить не осилил

jsv001
Offline
Зарегистрирован: 06.10.2018

Повторяю,  добавление #include <Arduino.h> первой строчкой в "присоединённом" файле

не помогает.
 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

jsv001 пишет:

Повторяю,  добавление #include <Arduino.h> первой строчкой в "присоединённом" файле

не помогает.
 

Проверил - действительно, ругается. Это потому, что файлы с расширением "*.c" средой обрабатываются не так, как с расширением "*.cpp". Вариант полечить, не переименовывая в *.ino - переименовать в *.cpp.

Строго говоря, IDE права: раз у нас Serial - это объект класса, то и из *.c-файла - ничо не знаю, никаких таких классов.

jsv001
Offline
Зарегистрирован: 06.10.2018

DIYMan пишет:

Проверил - действительно, ругается. Это потому, что файлы с расширением "*.c" средой обрабатываются не так, как с расширением "*.cpp". Вариант полечить, не переименовывая в *.ino - переименовать в *.cpp.

Строго говоря, IDE права: раз у нас Serial - это объект класса, то и из *.c-файла - ничо не знаю, никаких таких классов.

Да, похоже, что IDE так себя и ведет.

Чистые СИ шные функции, в том числе взятые из AVR-студии, надобно размещать в файле с расширением с.

Ежели надо использовать что-то вроде Serial, размещать в файле с расширением ino.

Ну а расширение cpp оставить для библиотек с классами.

Коктейль "АРДУИНАсАВРСТУДИЕЙ" - неплохо.

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

jsv001 пишет:

Ежели надо использовать что-то вроде Serial, размещать в файле с расширением ino.

Неверно.

Файл .ino в проекте должен быть только один, иначе рано или поздно вы столкнетесь с глюками компиляции. А "что-то вроде Serial" размещайте в файлах .cpp.

jsv001
Offline
Зарегистрирован: 06.10.2018

b707 пишет:

Неверно.

Файл .ino в проекте должен быть только один, иначе рано или поздно вы столкнетесь с глюками компиляции. А "что-то вроде Serial" размещайте в файлах .cpp.

Папка a1, в ней два файла - a1.ino (главный) и a11.ino (присоединенный).

Глюков не вижу.

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Скорее всего кто "главный" файл определяется по названию папки.

jsv001
Offline
Зарегистрирован: 06.10.2018

Да, папка и главный файл должны иметь одинаковое имя.

jsv001
Offline
Зарегистрирован: 06.10.2018

И вот еще один рабочий проектик, папка a02

это главный файл a02.ino 
//======================================
char ppp = 32;
extern "C" void mfunc21(void);
extern "C" void mfunc22(void);
extern "C" void mfunc23(void);
//--------------------------------------
void setup()
{   Serial.begin(9600);
    pinMode(13,OUTPUT);
}
//--------------------------------------
void loop()
{   digitalWrite(13, HIGH);    delay(100);
    digitalWrite(13, LOW);    delay(100);
 
    mfunc23();
    mfunc22();
    mfunc21();
}
//======================================
 
это присоединенный файл a021.ino
//======================================
void mfunc21(void)
{
    Serial.println("\n-bэто файл №21-");
}
//======================================
 
это другой присоединенный файл a022.ino
//======================================
extern char ppp;
void mfunc22(void)
{
    Serial.println("\n-bэто файл №22-");
    Serial.write(ppp);
}
//======================================
 
а это третий присоединенный файл a023.c
//======================================
extern char ppp;
void mfunc23(void)
{
    ppp++;
}
//======================================
 
Порядок вызова функции в loop'е менял на противоположный, 
глюк появляться отказался.