И что, у вас там выше есть обьявление функции MUVE() внутри setup() или loop() ? - нет ведь, иначе оно не компилировалось бы.
У вас, похоже, есть две версии кода - для форума и для себя. Потому что это не первый случай, когда ошибки, на которые вы жалуетесь - не ответствуют коду, что вы выложили.
Что касается вызова MUVE() из нее же самой - это называется рекурсия. Синтаксисом языка это не запрещено, но категорически не советую так делать. Ваша программа очень быстро зависнет при таком коде.
не нужно. Функция loop() - бесконечный цикл. Оно у вас и так будет само возвращаться к началу вашей функции, без необходимости устраивать рекурсию
А почему реле не работают… внимательно изучите функцию setup()
ЗЫ хотя, конечно, сложно судить, раз вы настоящий код не показываете. Я кажется догадываюсь, почему - вдруг очередной шедевр сопрут ?
@Colombo, Вы правда рассчитываете на то, что кто-то будет разбираться и помогать Вам, когда Вы просто врёте на каждом шагу и делаете всё, чтобы разобраться и помочь Вам было как можно труднее?
Не знаю, зачем коллеги вообще Ваш код после этого комментируют. По мне, так это себя не уважать.
да ладно, какое-то самоуважение, я третий день с температурой валяюсь, инет - единственное развлечение
Да и не думаю я, что ТС врет злонамеренно. Похоже у него два компа, на одном он код отлаживает, с другого в инет ходит. Я искренне надеюсь, что ему не приходится набивать код в форуме “одним пальцем”, косясь на монитор в соседней комнате
Зачем вы обвиняете меня во вранье?
Вот код, другого у меня нет. Я пока даже не знаю, как сохранять предыдущие версии.
//трекер на 1 ось по времени
#define position_sensor_pin 0 // средняя ножка резистора ОС по положению на пин 0
#define relay1 8 // пин 8 реле 1
#define relay2 7 // пин 7 реле 2
int val, L; //переменная для хранения значения фактического угла, угол из таблицы
byte T; // время расчетное
int delta, delta_old; // текущее и предыдущее значение рассогласования
#include <microDS3231.h>
MicroDS3231 rtc;
void setup() {
Serial.begin(9600); // Устанавливаем скорость передачи данных
delay(200); // Ждем 200 мкс
Serial.println("DS3231RTC Read Test"); // Выводим данные на последовательный порт
Serial.println("-------------------"); // Выводим данные на последовательный порт
// проверка наличия модуля на линии i2c
if (!rtc.begin()) {
Serial.println("DS3231 not found");
for (;;)
;
pinMode(relay2, OUTPUT);
pinMode(relay1, OUTPUT);
}
// получаем все данные в структуру
DateTime now = rtc.getTime();
//меняем любой параметр
//now.year += -10;
//now.second =0;
//now.minute =54;
//now.hour =22;
//now.day =6;
//now.date =26;
//now.month =5;
//отправляем в rtc
//rtc.setTime(now);
void MUVE();
}
void loop() {
printTime();
delay(100);
digitalWrite(relay2, LOW); // включение реле2 для проверки, все равно не включается
void MUVE();
}
void printTime() {
// получаем все данные в структуру и используем их
// этот способ быстрее и "легче" вызова отдельных get-функций
DateTime now = rtc.getTime();
Serial.print(now.hour);
Serial.print(":");
Serial.print(now.minute);
Serial.print(":");
Serial.print(now.second);
Serial.print(" ");
Serial.print(now.day);
Serial.print(" ");
Serial.print(now.date);
Serial.print("/");
Serial.print(now.month);
Serial.print("/");
Serial.println(now.year);
L = 100; // значение для ПРОВЕРКИ функции поворота
MUVE(); // запуск функции поворота
}
////////////////////////////
void MUVE() { //функция поворота
//int delta_old, delta;
val = analogRead(position_sensor_pin); // чтение резистора ОС
val = map(val, 0, 1023, 15, 345); //конвертировать выходной диапазон в градусах угола поворота потенциометра
constrain(val, 0, 360); //ограничение диапазона
delta = val - L; // разница между фактическим углом и требуемым на данный момент
if (delta > 0) {
digitalWrite(relay1, LOW);
} else {
digitalWrite(relay2, LOW);
} //включаем двигатель
Serial.println(val);
Serial.println(delta);
Serial.println(delta_old);
Serial.println(L);
Serial.println("ssssssssssssssssssssssssssssssss"); //для удобства чтения
delay(1000);
if (((delta < 0) && (delta_old > 0)) || ((delta > 0) && (delta_old < 0))) { //контроль смены знака х (продолжить выполнение после смены знака Х)
Serial.println(888); //контроль этой ветки
digitalWrite(relay1, HIGH); //откл. реле
digitalWrite(relay2, HIGH);
return;
} else {
Serial.println(444); //контроль этой ветки
if (delta_old != delta) { delta_old = delta; };
Serial.println(delta_old);
//if (delta_old != delta) {delta_old = delta;};
MUVE();
}
}
Зачем тратить сколько сил и времени на сарказм? Просто не отвечайте, если нет на то желания. Потратьте это время на что-то более полезное для вас. Зачем вы вообще читаете эту ветку?
Function declarations may appear in any scope.
A function declaration at class scope introduces a class member function. A non-member function definition may appear at namespace scope only (there are no nested functions).
То есть обьявления функций внутри других функций допустимы.
Надо признать, я этого не знал.
@Colombo - признаю, что зря считал это доказательством подмены кода. Это компилируется.
AutoLight.ino: In function void setup()
Error compiling project sources
Build failed for project 'AutoLight'
AutoLight.ino: 34:14: warning: variable 'now' set but not used [-Wunused-but-set-variable]
DateTime now = rtc.getTime()
^~~
AutoLight.ino: In function void printTime()
AutoLight.ino: 84:5: error: 'MUVE' was not declared in this scope
MUVE(); \\ ������ ������� ��������
^~~~
AutoLight.ino:84: note suggested alternative M_E
MUVE(); \\ ������ ������� ��������
^~~~
M_E
AutoLight.ino: In function void MUVE()
AutoLight.ino: 95:27: warning: second operand of conditional expression has no effect [-Wunused-value]
constrain(val, 0, 360); \\����������� ���������
AutoLight.ino: 95:27: warning: second operand of conditional expression has no effect [-Wunused-value]
AutoLight.ino: 95:27: warning: third operand of conditional expression has no effect [-Wunused-value]
Стыдно не учиться. Стыдно глумиться над человеком, которого превосходишь в какой то компетенции.(может оказаться, что такая компетенция единственная)
А с задачей я ЕЩЕ не справился. Но это всего-навсего дело времени.
Последний компонент к своей системе я получил всего неделю назад.
Поддержу))
Я бы поворачивал механизм не на совпадение на солнце, а ещё на полчаса угловых “вперед”(не знаю как обозвать). Таким образом имеем максимум света посередине между поворотами раз в час.