Как заставить return вернуть значение в функции?
- Войдите на сайт для отправки комментариев
Сб, 28/10/2017 - 08:18
Здравствуйте!
Имеется скетч с функцией printDateTime():
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
void setup ()
{
Serial.begin(57600);
Rtc.Begin();
}
void loop ()
{
RtcDateTime now = Rtc.GetDateTime();
printDateTime(now);
delay(5000);
}
#define countof(a) (sizeof(a) / sizeof(a[0]))
void printDateTime(const RtcDateTime& dt)
{
char datestring[20];
snprintf_P(datestring,
countof(datestring),
PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
dt.Month(),
dt.Day(),
dt.Year(),
dt.Hour(),
dt.Minute(),
dt.Second() );
return datestring;
}
Ошибка: return-statement with a value, in function returning 'void' [-fpermissive]
В чем проблема?
http://arduino.ru/Reference/FunctionDeclaration
Спасибо.
Однако после смены void на char, ошибка компиляции стала следующей:
invalid conversion from 'char*' to 'char' [-fpermissive]
Что опять не так :(
Почитай этюды про память. Здесь, вшапке
Grove - у вас опыт, видимо, нулевой? Много обьяснять придется...
Лучше бы вы почитали какую-нить толстую книжку про Си - про символы, символьные массивы, переменные и ссылки на них. Про передачу парметров по значению и по ссылке, область видимости, инициализацию и очистку переменных... это далеко не полный список того, что нужно знать. чтобы правильно передать ваши данные из процедуры в основную программу. Пока вы их передаете в корне неверно.
И не надейтесь получить готовый ответ. Даже если кто-то напишет, как правильно передать время из функции - все равно уже на следующей строчке кода вы опять споткнетесь о что-то другое. И так будет постоянно, если нет базовых знаний.
Вот так как то )
int lol () { return 'lol'; } void setup() { Serial.begin(9600); Serial.write(lol); }Динозавр , а вы хоть это компилировали? Или крутые знатоки не нуждаются в проверке своих "знаний." хоть это скорее "незнание".
ПС: Вот вариант скетча для ТС. Но не понятно зачем тогда возвращать если он снаружи.
char datestring[20]="123"; char *func(){ /*здесь загружаете в datestring*/ return datestring; } void setup() { Serial.begin(9600); Serial.write(func()); } void loop() { }Но мне понравился этот скеч, но он точно к теме не относится.
char const *msg1 = "yes"; char const *msg2 = "no"; char const *func() { static bool stat=0; stat =!stat; if (stat) return msg1; else return msg2; } void setup() { Serial.begin(9600); } void loop() { delay(300); Serial.println(func()); }invalid conversion from 'char*' to 'char' [-fpermissive]
Что опять не так :(
Насколько я понял из кода , Вы пытыетесь вернуть из функции локально объявленный массив. Так нельзя делать.
ПС: Вот вариант скетча для ТС. Но не понятно зачем тогда возвращать если он снаружи.
И действительно, зачем?