Как избавиться от цикла While?

DDzshKa

✩✩✩✩✩✩✩
5 Апр 2022
1
0
Оформи код соответствующим тэгом
Пишу код, мне нужно избавиться от цикла While, как это сделать?
Пример кода:
void Start() {
byte schet = 0;
static uint32_t tmr;
if (PortM == 1 && !Zajig ) // Если в порт пришла 1 и зажигание включено
{

while (1) // Заходит в цикл
{
if (schet == 2) // Если равно двум
{
schet = 0; // Обнуляй счетчик
break; // Выход из цикла
}
if (schet < 2 && millis() - tmr >= 800) {

tmr = millis();
digitalWrite(change, ledOFF = !ledOFF); //Заводка Двигателя
mySerial.println("Change");
schet++;
}

}
}
}
Если я добавляю If вместо цикла вайл, то у меня каждый раз идет проверка и каждый раз в порт надо отправлять 1, чтоб менялось состояние, а мне нужно, чтоб она и проверяла что приходит в порт одновременно и с выполнением кода. Помогите, никак не могу разобраться.)
 

Wan-Derer

★★★★★✩✩
Команда форума
31 Июл 2018
2,136
412
Москва
wan-derer.ru
@DDzshKa,
Вынеси процедуру заводки в отдельную функцию, которая возвращает true/false.
В основном коде вызывай её и проверяй ответ. Если вернулось false (неудачная попытка), делай задержку и вызывай её же повторно.
 

Kino

✩✩✩✩✩✩✩
8 Янв 2021
7
1
из while, да и из любого цикла выход оператором break.
 

Boroda22

★✩✩✩✩✩✩
23 Фев 2022
251
42
Несколько видов циклов (с пост-пред условия) придуманы не просто так.
 

Normalek

★✩✩✩✩✩✩
6 Авг 2021
140
39
примерно так
C++:
byte schet = 2;
uint32_t tmr;

void loop() {
    //бла бла бла тут твой код
    if (schet < 2 && millis() - tmr >= 800) {
        tmr = millis();
        digitalWrite(change, ledOFF = !ledOFF); //Заводка Двигателя
        mySerial.println("Change");
        schet++;
    }
}


void Start() {
    if(PortM != 1 && Zajig ) return ;
    schet = 0;
    tmr = millis();
}
а вообще желательно видеть весь код