Без делея не работает, что не так?
- Войдите на сайт для отправки комментариев
Втр, 20/10/2015 - 02:02
Есть код (первый проект на ардуинке, так сказать) и моя голова отказывается понимать что с ним не так...
const int c = 1; byte /*buttomValOld[128 * (c + 1)],*/ controlValOld[128 * (c + 1)], chanal, control; int controlNum; void setup() { Serial.begin(250000); controlNum = 0; for ( int controlNum = 0; controlNum <= 128 * (c + 1); controlNum++) { controlValOld[controlNum] = 0; } pinMode (13, OUTPUT); pinMode (8, INPUT); chanal = 0; control = 0; } void loop() { for ( chanal = 0; chanal <= c; chanal = chanal + 1) { for ( control = 0; control <= 127; control = control + 1) { controlNum = (control + chanal * 128); //------------------------------------------------------------------------// { //работа с контроллерами //Условие выполнения для конкретного контроллера { if ((controlNum >= 1) and (controlNum <= 5)) if ((analogRead(controlNum) / 8) == controlValOld[controlNum]) {} else { digitalWrite(13, HIGH); Serial.write(0xB0 + chanal); //Если убрать эту и.. Serial.write(control); Serial.write(analogRead(controlNum) / 8); //..и эту - работает без делея digitalWrite(13, LOW); controlValOld[controlNum] = (analogRead(controlNum) / 8); // delay(0); //Без него не работает О.о } } } } } // digitalWrite(13, HIGH); // delay(0); // С этим то же самое // digitalWrite(13, LOW); }
Если убрать делей - то светодиод на 13 ножке просто горит и всё, постоянно. Если поставить делей в этот цикл, либо в конец со значением 0 - то всё работает. Но всё таки он меня напрягает... Кстати, если напрочь убрать массив - тоже всё работает, но не так как нужно. Почему в его присутствие с нулевым значением всё работает, а без него - нет? И имеет ли реальную задержку команда delay(0)?
А так?
А так?
это не ко мне - пусть ТС проводит опыты, что у него за чюдо-код такой, что на микросекунды реагирует: тут работаю - тут не работаю.
*самому стало интересно, кварц 12 мегагерц - как-то так:
Вот и я об этом: самой micros() тоже нужно время - 4 мс на 16 МГц или 8 мс - на 8 МГц. Вполне логично, что на 12 МГц это будет 5 или 6 мс.
Вот и я об этом: самой micros() тоже нужно время - 4 мс на 16 МГц или 8 мс - на 8 МГц. Вполне логично, что на 12 МГц это будет 5 или 6 мс.
да, но // delay(0); // 20
Ну, если вычесть 5, которые приходятся на micros(), остается 15 мкс. Ни какая функция не может отработать мгновенно.
Ну, если вычесть 5, которые приходятся на micros(), остается 15 мкс. Ни какая функция не может отработать мгновенно.
ну, и?
И имеет ли реальную задержку команда delay(0)?
А что открыть код и посмотреть запрещённый у нас ИГИЛ мешает?
Это неспортивно.
Типа, "не наш метод"? :))))