Так зачем в сетапе и лупе использовать метки с одинаковым названием? Ну это как то даже не логично. Компилятор ведь тоже ругается если вы дважды обьявите переменную.
Это мне? А где у меня одинаковые метки? У меня там всего одна метка на всю программу, а loop
просто пустой - нету в нём меток. Или это кому-то другому было?
Компилятор говорит о другом: возможна ситуация, когда начнет использоваться необъявленная переменная. Объявлять ее нужно до использования оператора перехода.
Ну… чтобы разделить в пространстве текста скетча события и состояния.
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
int i = 0;
for_:
if (i < 20) {
i++;
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
delay(500);
goto for_;
}
}
void loop() {
}
//блинк с goto
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
goto function_1; end_1:
goto function_2; end_2:
return;
function_1:
digitalWrite(LED_BUILTIN, HIGH); delay(500);
goto end_1;
function_2:
digitalWrite(LED_BUILTIN, LOW); delay(500);
goto end_2;
}
Да виноват недосмотрел.
Но у вас получается, что компилятор прыгает на не обьявлннную переменную. по этому и ругань идёт.
вот так ни какой ругани нет.
void setup() {
int kaka;
Serial.begin(9600);
if (analogRead(1)) goto mumu;
kaka = analogRead(2);
mumu:
Serial.println(kaka);
}
void loop() {}
Чтобы не было разночтений назовём пример - конченый автомат.
int T1=1000,T2=2000,T3=3000;
long Y=0;//переменная хранения моментов времени
int i=0;//счётчик
byte loop_=1;//счётчик последовательности delay();
void setup(){
}
void loop(){
if(event_()){status_();}
}
//
bool event_(){
if(loop_==1&&millis()-Y>T1){
Y=millis();
i++;if(i>10){i=0;loop_++;}
return true;
}
if(loop_==2&&millis()-Y>T2){
Y=millis();
i++;if(i>20){i=0;loop_++;}
return true;
}
if(loop_==3&&millis()-Y>T3){
Y=millis();
i++;if(i>30){i=0;loop_=1;}
return true;
}
return false;
}
//
void status_(){
if(loop_==1){
//действие №1
}
if(loop_==2){
//действие №2
}
if(loop_==3){
//действие №3
}
}
Вот своеобразный взгляд некоего Архата с форума Гайвера. Немного расплывчато, но по детски понятное.
эх батенька, вы многое пропустили.
Читал мельком, но мало акцентов на конкретику, даже на примерах игрушек. Типа:
Нет описания структуры скетча применительно к КА.
То, что там написано, в принципе не является конечным автоматом (отсюда и такая запутанность) - программы КА простые как валенок, многие их вообще пишут одну на все случаи, потом только таблицу меняют. Я такой пример здесь приводил. Например, если это конечный автомат, то что там делают постоянные сравнения с millis? Это не автоматная программа, так что сколько её не полируй, автоматной она не станет.
Это именно тот случай, про который я возразил на Ваше утверждение, что
Как видим, не везде.
Лучше не надо, это, в лучшем случае, “пухомат”.
И где Вы таких находите?
Ну хотя бы раз она должна быть в программе, иначе чем считать промежутки времени в “автомате” ?
Да сразу по запросу - конечные автоматы Ардуино.
Ничем. У него (автомата) нет часов. Также у него не памяти, чтобы хранить старое значение millis. Если Вы, конечно, имеете в виду конечный автомат, а не “пухомат”, который Пух активно рекламирует.
Истечение временного интервала для автомата точно такой же внешний сигнал (символ входного алфавита) как и любой другой (нажатие кнопки, например).
Хотя да, время отсутствует в описании совсем. Значит не автомат. Автомат значит - выходное отражение объекта в зеркале, зависящее от объекта входного и кривизны самого зеркала (коробка автомата).