Провожу эксперименты с Arduino и решил замучать цикл while (вместо loop). Задал условие, при котором должен срабатывать цикл, но вместо срабатывания светодиод просто загорается и всё. Вот код:
int main() {
int i = 0;
DDRB = B00100000;
while (i < 200)
{
PORTB |= B00100000;
delay(1000);
PORTB &= B00000000;
delay(1000);
i++;
}
}
Может я туплю, или у компилятора мозги поплыли?
Цикл 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;
Работать напрямую с регистрами порта - не очень хорошая идея.
Попробуйте сделать через функции: pinMode, digitalWrite
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости