Не работает цикл while()
- Войдите на сайт для отправки комментариев
Извиняюсь, что немного не в тему, но настолько странный вопрос, что обгуглился - и всё бестолку.
Дано: RaspberryPI 3B с чистым, кошерным Raspbian. Пытаюсь использовать Си-шный пример для датчика DHT-22 через вшитую в Raspbian библиотеку wiringPI.
Данные с датчика в примере не считываются. Сперва грешу на неработающий DHT-22, нахожу замену - картина не меняется. Осцилографом встаю на пин - вижу и запрос от процессора, и ответ от датчика. Всё по-честному, но программа не отлавливает ответ дачика. В конце концов упираюсь в следующий кусок кода:
#define DHTPIN 2 void main () { uint8_t lastState = 1; uint8_t currState = 1; pinMode( DHTPIN, INPUT ); counter = 0; timeStamp = micros(); while (currState == lastState) { currState = digitalRead( DHTPIN ); // printf("%d", currState); counter++; delayMicroseconds( 1 ); if ( counter == 255 ) { timeCurrent = micros(); printf( "Counter wachdog. Breaking.\n" ); printf("Time inetrval: %d\n", (timeCurrent - timeStamp)); break; } } ; }
Перед этим куском кода Малинка успешно отправляет по данному пину запрос на передачу информации, а датчик (как это видно на осцилографе), успешно информацию назад отправляет. Но при этом из цикла программа вываливается ТОЛЬКО по переполнению счетчика 'counter', хотя, если расскомментировать строку printf, то видно, как в течении этого периода в 255 значений бегут и меняются нули и единички по digitalRead.
И самое странное и удивительное, о чем собственно и вопрос: если же условие While поставить в двойные скобки, всё начинает работать!
while ( ( currState == lastState ) ) { ...code }
Вот когда условие - в двойных скобках, цикл While корректно отлавливает изменение currState. Как так получается?
удивительное дело.
Ничего не приходит в голову, кроме каких-то нечитаемых символов в тексте. Попробуйте скопировать текст в какой-то внешний текстовой редактор, а потом вставить отттуда в новый скетч
Пробовал. Перебивал весь текст руками...
не понимаю...
А какого типа переменные currState и lastState ?
А какого типа переменные currState и lastState ?
смотрите внимаьельнее, в коде они есть
А какого типа переменные currState и lastState ?
Ну, судя по коду выше, оба uint8_t.
Не скажу за скобки, но весёлые приключения у меня на RaspberryPi с DHT были. Детали уже забылись, но помню, что на стороне DHT напряжение было маловатое - что-то на нижнем лимите по питанию. Ну и он мне всякое слал... И чем чаще опрашиваешь - тем чудесней результат.
Залил в свою ардуино нано (168 мега) вот такой скетч:
Все прекрасно работает. На порт выводит при нажатии (низкий уровень). Возможно нужно как то указать, что не нажатым у вас высокий уровень на порту. Или типа того. Больше ничем помочь не могу...