Почему не работает цикл while?

236
29 марта 2018, 09:15

Провожу эксперименты с Arduino и решил замучать цикл while (вместо loop). Задал условие, при котором должен срабатывать цикл, но вместо срабатывания светодиод просто загорается и всё. Вот код:

int main() {
  int i = 0;
  DDRB = B00100000;
  while (i < 200)
  {
    PORTB |= B00100000;
    delay(1000);
    PORTB &= B00000000;
    delay(1000);
    i++;
  }
}

Может я туплю, или у компилятора мозги поплыли?

Answer 1

Цикл while() работает, в данном случае не работает delay(), а чтобы оный заработал (как и прочие подобные arduino'вские функции) надо сначала инициализировать саму arduino'вскую библиотеку с помощью init().

int main() {
  int i = 0;
  init();
  DDRB = B00100000;
  while (i < 200)
  {
    PORTB |= B00100000;
    delay(1000);
    PORTB &= ~B00100000;
    delay(1000);
    i++;
  }
}

Альтернативой будет написать свою реализацию delay() с использованием активного ожидания или же таймера.

ЗЫ: К данной проблеме не относится, но если уж чисто включаешь пин, то стоит его так же чисто и выключать:

    PORTB &= ~B00100000; 
Answer 2

Работать напрямую с регистрами порта - не очень хорошая идея.

Попробуйте сделать через функции: pinMode, digitalWrite

READ ALSO
Не работает цикл while в Arduino?

Не работает цикл while в Arduino?

Вот код на дёргание светодиода каждую секунду:

228
Записать даные из значения переменной в файл .txt Builder C++

Записать даные из значения переменной в файл .txt Builder C++

Как записать даные из значения переменной в файл txt?

214
Возведение матрицы в степнь

Возведение матрицы в степнь

Пытаюсь сделать возведение матрицы в степеньЗнаю, как выглядит умножение матриц (возведение в квадрат):

240
Элементы AlertDialog располагаются сверху. (Android Studio)

Элементы AlertDialog располагаются сверху. (Android Studio)

Создаю AlertDialog следующим способом:

161