День жизни потерял. Смотрю на элементарный код - не могу понять почему не работает... Нужно что бы Ардуино мигала светодиодом. Функция delay(), циклы не подходят, т к. Ардуино должна еще мониторить 2 кнопки и запускать серву. Опыт программирования только Паскаль. Логика кода вроде правильная, хоть убей не понимаю где ошибка.Осознаю, что код громоздкий, но мне важно сейчас именно разобраться как что работает, а не делать как удобней. Помогите пожалуйста найти ошибку, и по возможности посоветуйте менее громоздкий вариант кода. Ардуино УНО Arduino IDE 1.6.3 На скейч реагирует постоянным горением светодиода Код (C++): #define LED_PIN 13 int i = 0; //Счетчики int q = 0; boolean signalka = true; //Предположим сигнализация включена void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { if (signalka) //сигнализация условно включена { if (i < 10000) //светодиод должен гореть 10000 повтора цикла ЛУП { digitalWrite(LED_PIN, signalka); //Зажигаем СД ++i; //Увеличиваем счетчик i на единицу } else if (i = 10000) //когда счетчик становиться равным 10000, нужно потушить СД { q = 0; //Обнуляем второй счетчик - теперь СД должен не гореть 10000 повтора ЛУП ++i; //Увеличиваем счетчик i на единицу, что бы не обнулился счетчик q при следующем повторе ЛУП... } else //...поэтому при следующем повторе ЛУП мы поподаем на эту часть кода if (q < 10000) //Аналогично, СД НЕ должен гореть 10000 повторов ЛУП { digitalWrite(LED_PIN, !signalka); //Передаем на СД сигнал "Туши свет". ++q; //Увеличиваем счетчик на единицу. } else if (q = 10000) //Сюда мы попадаем когда прошло 10000 повторов ЛУП "без света" { i = 0; //Обнуляем счетчик i, что бы при следующем повторе ЛУПа зажечь СД } } }
http://arduino.ru/forum/programmirovanie/otkaz-ot-delay А у вас q не прибавляется, потому и свет не тухнет.
Код (C++): else if (i = 10000) Этот оператор не сравнивает i с 10000, а записывает 10000 в i. Возможно причина тут. Правильно (i == 10000). И вообще используйте millis() а не пустые циклы.
1. Типичная ошибка для языка С/С++ Код (Text): if (i = 10000) if (q = 10000) Данные условия всегда верны и при этом приводят к присваиванию значения переменной. Для сравнения надо использовать оператор == (два знака =). А еще такой код будет пролетать мухой. Не думаю, что при таких количествах циклов будет вменяемое мигание, надо на порядки побольше, если millis() использовать не позволяют убеждения.
Блин!!! Я и не знал что в С++ оператор присваивания в if может использоваться!!! Мигает как и надо. Частоту на глаз поставил))) Вообщем "все достаточно элементарно"))) Всем спасибо!!!
В if может использоваться любое выражение, которое имеет какое-то значение. Если результат выражения не равен 0, то компилятор считает выражение истинным. Например: Код (C++): int x; if((x = getX()) == 5) { ... }
ага, помнится, при просмотре какого-то проекта встретилось выражение вида Код (C++): if(y+x++ + ++y+x != 32) Даже не сразу было понятно как оно работает, пришлось брать карандашик и бумажку
на собеседованиях! Некоторые программисты, чтобы избежать проблемы в if ставят аргументы наоборот, если сравнивают с константой: Код (C++): if (42 == answer) { } компилятор или интерпретатор ловят и взывают к разуму.
это станок упаковки каких-то изделий, сначала сборка ленты - подача с 4х лотков по 4х8 штук, затем собранное сместить вверх-назад-вверх, и опять по 4х8. И так до 18 вертикальных рядов, потом обрезка и отсчет заново. Он был переделан из чего-то там древнего и сбоку прилеплена ардуина