Позвольте продолжить тему, что бы не плодить подобные. Максимально простенькие часы: Код (C++): #define INTERVAL 1000 int h = 0; int m = 0; int s = 0; long lastTime = 0; void loop(void){ while(millis() - lastTime > INTERVAL) { lastTime=millis(); s++; if (s >= 60){ s = 0; m++;} if (m >= 60) {m = 0; h++;} if (h >= 24) {h = 0;} } DisplayTime(); // функция для вывода на дисплей } Настройка планируется через веб-страницу, данные с которой обрабатываются функцией handleForm1() Код (C++): void handleForm1() { String chasSet = server.arg("chasset"); String minSet = server.arg("minset"); int h = chasSet.toInt(); int m = minSet.toInt(); Serial.print(h); Serial.print(m); server.send(200, "text/html", s); //Send web page } Как "превратить" String chasSet и String minSet в int h и int m я разобрался. Подскажите, как вытащить эти данные из handleForm1() ?
Сделайте эти переменные глобальными, как самый простой вариант. Иначе придется изучать указатели, что больно. Есть и другие способы, но первый самое то.
какая разница, сколько адресов в ОЗУ использует программа? Без разницы, если программа работает и оверстека не происходит.
Я чуток переформулирую, чтобы понятнее было: какая разница, говнокодище там или нет? Без разницы, если программа работает и оверстека не происходит.
очень сильно влияет на время исполнения программы, если есть такие требования. Но современная тенденция такая - взять проц побыстрее, налить говнокодище. Пофиг, что подтупливает, зато быстренько состряпано.
Код (C++): void handleForm1(int& h, int& m) { String chasSet = server.arg("chasset"); String minSet = server.arg("minset"); h = chasSet.toInt(); m = minSet.toInt(); Serial.print(h); Serial.print(m); server.send(200, "text/html", s); //Send web page } void foo() { int h,m; handleForm1(h,m); }
вот такой гуанокод получился Код (C++): #define INTERVAL_SECOND 1000 int s = 0; long lastTime = 0; String chasSet = server.arg("chasset"); String minSet = server.arg("minset"); void handleForm1() { chasSet = server.arg("chasset"); minSet = server.arg("minset"); } void loop(void){ int h = chasSet.toInt(); int m = minSet.toInt(); while(millis() - lastTime > INTERVAL_SECOND) { lastTime=millis(); s++; if (s >= 60){ s = 0; m++;} if (m >= 60) {m = 0; h++;} if (h >= 24) {h = 0;} } } В таком виде изменить h и m со странице удается, но время на дисплее не меняется (каждый новый цикл h и m принимают первоначальное значение). Если int h = chasSet.toInt(); int m = minSet.toInt(); вынести из loop, то h и m принимают значения, заданное при загрузке, часы идут, но изменить h и m со страницы не выходит. Идеи закончились. Куда дальше копать?
Вот сюда. Читать и смотреть на свои h и m. Если не прояснилось, ещё раз перечитывать и снова смотреть. Пока не прояснится.