Как избавиться от бесконечного цикла?

Потребовалось сделать устройство, которое при включении выдавало бы однократно определённое количество звуковых сигналов (например, 100). Однако ардуино по такой программе выдавал импульсы безостановочно:

void setup ()
for (int n=0; n<101; n=n+1)
{
//Текст программы
}

Если же убрать строчку “void setup ()”, то программа не компилируется.
Подскажите, как выйти из положения.

После 5 строки напиши
abort();

Во так вот надо!

void setup (){
for (int n=0; n<101; n=n+1)
{
//Текст программы
}
}
void loop() {
  
}

А ваш пример не компилируется из-за очевидных ошибок.

Может exit(0)? Хотя while(true); понятнее.
Но, для данного случая нужно как советует @lilik.

Так не надо! Ему же нужно 100 раз цикл выполнить, а у Вас - 101.

Это «типичный случай так называемого вранья». Такая программа не могла ничего выдавать, т.к. она не компилируется.

Это у него :slight_smile:
Эх раз…, ещё раз, ещё много, много раз…

Что значит “у него”? А для чего Вы писали свой пост №3? Чтобы повторить его ошибки? А я думал – чтобы исправить. Пост №3 Ваш, так что это у Вас со словами “так вот надо”.

аборт решает любые проблемы?

Но есть беда: как и всякое решение, плодит новые.

Тогда n=1 как вариант… или n<100, или n<=99… в общем методом подбора.

:rofl:

Естественного подбора!

…Ты возьмешь только то, что поймешь,
а поймешь только то, что исправишь,
ты оставишь все то, что возьмешь,
и возьмешь, что оставишь.

Владимир Леви

А зачем её убирать? Или вы не знаете структуру программы для Ардуино???

uint8_t loop_enter = 0;

void setup() {
  Serial.begin(9600);
  for (uint8_t n = 1; n < 101; n++) {
    //Текст программы
    Serial.print("n = ");
    Serial.println(n);
  }
  loop_enter = 1;
}

void loop() {
  if (loop_enter == 1) {
    Serial.print("Вошли в основной цикл программы.");
    loop_enter++;
  }
}

Скетч использует 1762 байт (12%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 253 байт (24%) динамической памяти, оставляя 771 байт для локальных переменных. Максимум: 1024 байт.
(Arduino Nano Atmega168)

Вывод в порт ардуино:

n = 1
n = 2
n = 3
n = 4
n = 5
n = 6
n = 7
n = 8
n = 9
n = 10
n = 11
n = 12
n = 13
n = 14
n = 15
n = 16
n = 17
n = 18
n = 19
n = 20
n = 21
n = 22
n = 23
n = 24
n = 25
n = 26
n = 27
n = 28
n = 29
n = 30
n = 31
n = 32
n = 33
n = 34
n = 35
n = 36
n = 37
n = 38
n = 39
n = 40
n = 41
n = 42
n = 43
n = 44
n = 45
n = 46
n = 47
n = 48
n = 49
n = 50
n = 51
n = 52
n = 53
n = 54
n = 55
n = 56
n = 57
n = 58
n = 59
n = 60
n = 61
n = 62
n = 63
n = 64
n = 65
n = 66
n = 67
n = 68
n = 69
n = 70
n = 71
n = 72
n = 73
n = 74
n = 75
n = 76
n = 77
n = 78
n = 79
n = 80
n = 81
n = 82
n = 83
n = 84
n = 85
n = 86
n = 87
n = 88
n = 89
n = 90
n = 91
n = 92
n = 93
n = 94
n = 95
n = 96
n = 97
n = 98
n = 99
n = 100
Вошли в основной цикл программы.

1 лайк

402 – ещё ничего, хуже когда 404.

отож, после недавнего армагедона не работает передатчик в FM трансмиттере, был подключен только к корпусу авто, вот сижу вычисляю какое напряжение было перенесено градом на корпус авто, чтобы статикой выбить передатчик (всё остальное живо, в том числе микроконтроллер) склоняюсь к 404

Спасибо, получилось. :+1:
А начинающими все когда-то были.

…а волны и плещут и скачут, и бьются АБОРТ корабля…

1 лайк

А в книге написано “о борт”…