Помогите разобраться с проблемой!
- Войдите на сайт для отправки комментариев
Ср, 03/12/2014 - 22:15
Здравствуйте! Помогите, пожалуйста, бедной девушке. Уже просто в отчаянии. У меня к аналоговому входу подключен потенциометр. Необходимо следующее: пока значение потенциометра находится в каком-то диапазоне значений, необходимо, чтобы выполнялась та или иная работа arduino (загорались те или иные светодиоды, подключенные к arduino). Я написала программу, но она не работает, вообще. Т.е. как ни крути этот потенциометр, диоды не горят. Прошу, помогите найти ошибку, пожалуйста!
Вот сама программа:
void setup ()
{
pinMode(4,OUTPUT); // инициализация портов 4,7,8,12,13 на выход
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}
void loop (){
int val=analogRead(A0); // считывание значения с потенциометра
while (0<=val<=93) { // предел изменения значения потенциометра
digitalWrite (4,LOW); // все светодиоды выключены
digitalWrite (7,LOW);
digitalWrite (8,LOW);
digitalWrite (12,LOW);
digitalWrite (13,LOW);
}
while (94<=val<=187){
digitalWrite (4,HIGH); // горит только с 4 выхода
delay (5000);
digitalWrite (4,LOW);
delay (50000);
}
while (188<=val<=281)
{
digitalWrite (7,HIGH); // горит только с 7 выхода
delay (5000);
digitalWrite (7,LOW);
delay (50000);
}
while (282<=val<=375){
digitalWrite (8,HIGH); // горит только с 8 выхода
delay (5000);
digitalWrite (8,LOW);
delay (50000);
}
while (376<=val<=469){
digitalWrite (12,HIGH); // горит только с 12 выхода
delay (5000);
digitalWrite (12,LOW);
delay (50000);
}
while (470<=val<=563){
digitalWrite (13,HIGH); // горит только с 13 выхода
delay (5000);
digitalWrite (13,LOW);
delay (50000);
}
while (564<=val<=657){
digitalWrite (4,HIGH); // горят все светодиоды
digitalWrite (7,HIGH);
digitalWrite (8,HIGH);
digitalWrite (12,HIGH);
digitalWrite (13,HIGH);
delay (5000);
digitalWrite (4,LOW);
digitalWrite (7,LOW);
digitalWrite (8,LOW);
digitalWrite (12,LOW);
digitalWrite (13,LOW);
delay (50000);
}
while (658<=val<=751){
digitalWrite (4,HIGH); // горит только с 4 и 7 выходов
digitalWrite (7,HIGH);
delay (5000);
digitalWrite (4,LOW);
digitalWrite (7,LOW);
delay (5000);
}
while (752<=val<=845){
digitalWrite (8,HIGH); // горит только с 8 и 12 выходов
digitalWrite (12,HIGH);
delay (5000);
digitalWrite (8,LOW);
digitalWrite (12,LOW);
delay (5000);
}
while (846<=val<=939){
digitalWrite (4,HIGH); // поочередное зажигание всех светодиодов
delay (5000);
digitalWrite (4,LOW);
digitalWrite (7,HIGH);
delay (5000);
digitalWrite (7,LOW);
digitalWrite (8,HIGH);
delay (5000);
digitalWrite (8,LOW);
digitalWrite (12,HIGH);
delay (5000);
digitalWrite (12,LOW);
delay (5000);
}
while (940<=val<=1023){
digitalWrite (4,HIGH); // поочередное зажигание по 2 светодиода
digitalWrite (7,HIGH);
delay (5000);
digitalWrite (4,LOW);
digitalWrite (7,LOW);
delay (5000);
digitalWrite (8,HIGH);
digitalWrite (12,HIGH);
delay (5000);
digitalWrite (8,LOW);
digitalWrite (12,LOW);
delay (5000);
}
}
0<=val<=93)
заменить
val >= 0 && val <=93
и так далее
и еще. проще использовать массив для границ. и использовать данные из него
Большое спасибо. Исправлю.
Я с arduino работаю первый раз. К сожалению, в этой области я полный ноль) Поэтому вряд ли я смогу тут поработать с матрицами и так далее... Но все рвно, благодарю Вас за совет.
Для первого раза не плохо. А так если знакомы с С# то все просто.
Спасибо. Знакома, практиковала, но это было так давно, что сначала немного растерялась.
...А в конце каждого while, перед закрывающей скобкой, добавьте val=analogRead(A0);
А то ведь так и не замигает ничего. :)
:) Учту, спасибо!
И снова здравствуйте! Переделала программу с учетом замечаний, но получила новую проблему. Arduino считывает значение потенциометра только один раз в самом начале программы и выполняет ту программу, в пределы которой попадает измеренное значение потенциометра. И как бы я не крутила ручку этого потенциометра, значение val не меняется и режимы не переключаются.
Код программы с исправлениями
Замените все while на if.
Почитайте http://arduino.ru/Reference/While
И вставляйте код под банер http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Большое все спасибо, кто не остался равнодушным к моей проблеме и помог! Всё работает! )
Мужики, не знаю в какую ветку написать ((((
Помогите - плз)))
Задача такая:
после подключения питание на тини - 15 мин ждем, потом 2 часа сигнал на 2 порте, пять секунд отдыхаем и снова на два часа сигнал и закольцевать - два часа сигнал, пять секунд отдых, два часа работа и пять сек отдых и т.д. Только при включ, одноразово отсчитать 15минут, а затем цикл два часа - пять секунд и спо новой
спасибо, может кто поможет, я сам не бум бум ))
я не. ты даже не хочешь попробовать сам сделать. зачем на тебя время тратить
Я пробовал - ничего не получается. Хотя думается что сложности нет, хотя для кого как - кто в этом мало разбирается то нужно много времени что изучить и понять алгоритм работы. Ну а кто уже с этим работает, думаю просчше или тогда мы тут зачем - так порисовать кто лучше кому нос утрет ???!!! )))))
да ну. почитай про delay для начала. может ясность появится
и что она делает
http://arduino.ru/Reference/Delay
А мне ведь вчера этот вопрос в другой ветке попался? Постить в кучу тем нехорошо.
Предлагаю помочь мне в разработке суммой в 3k. Сделаем с RTC, и будет ровно, 2 часа и 5 секунд.
Вместо delay обработку через
PM=millis();
CM=millis();
while (CM-PM<500) {
CM=millis();
...
}