Помощь чайнику(Программная часть Arduino)
- Войдите на сайт для отправки комментариев
Вс, 02/02/2020 - 16:37
Хочу сделать так что-бы по удержанию кнопки(А0) горел один светодиод,а по удержанию кнопки(А1) горел другой.И есть одно условие,если нажата кнопка(А0) и горит соответствующий светодиод ,то кнопка (А1) не должна включать свой светодиод,и наоборот.По принципу "Кто первый встал,того и тапки".
Вот код
int a; void setup() { Serial.begin(9600); pinMode(A1,INPUT); pinMode(A0,INPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); } void loop() { int a=map(a,0,1,0,2); if(digitalRead(A0)==!HIGH){a=1;} if(digitalRead(A1)==!HIGH){a=2;} Serial.println(a); switch(a){ case 1:digitalWrite(6,HIGH); break; case 2:digitalWrite(7,HIGH); break; default:digitalWrite(6,LOW); digitalWrite(7,LOW); delay(10); } }
Условие выполнить мне не удалось,может есть у кого какие идеи?
Наверное при анализе состояния одной кнопки необходимо учитывать ещё и состояние второй, нет?
И поясните, что это у вас такое в строчке 12 написано
Да,но я не знаю как.Есть варианты?
Из-за того что это абстрактная задача,и кнопок в дальнейшем будет +- 7,я буду масштабировать значение "а" от 0 до 7,и самих кейсов будет 7. Если я правильно понимаю что делает map.Я не уверен что я правильно использую map.Может здесь он не нужен.
Что такое масштабируемое значение а от 0 до 7 и чем оно отличается от обычного int?
Вы что такое сделать то пытались этой строчкой, поясните своими словами?
Да,но я не знаю как.Есть варианты?
изучайте логические операторы и составляйте сложные условия, например
Если кнопка1 нажата И кнопка2 НЕ нажата
Ну как я понял оператор switch(значение),будет выполнять кейс с тем же значением что и значение switch.
switch(7){
case1...
case7(то есть пропустит все кейсы,и включит 7)
}
По поводу int a;Я задал переменную "а" ,но она имеет либо 0 либо 1.Но мне нужно что бы значение "а" было от 0 7,что бы я мог задействовать кейс.Вот так я это понимаю.Или еще можно сказать что я промежуток 0-1 разбил на 8 частей от 0 до 7
b707,спасибо Вам,я не осознанно делал фигню,заменил map на if(digitalRead(A1)==HIGH||digitalRead(A0)==HIGH){a=0;}
Но все же, есть маленькая проблема.Если я удерживаю 2 кнопки все хорошо,горит один из светодиодов(тот который я первый включил),но когда я отпускаю какую-либо кнопку(1 из 2),то другая включает мне 2 светодиода О_0
Учитесь рассуждать логически
Если первая кнопка НАЖАТА и вторая НЕ НАЖАТА - включаем первый светик
Аналогично, если первая НЕ нажата, вторая нажата - включаем второй светик
Во всех остальных случаях все гасим.
Осталось перевести это в код
Проблема в том что,когда удерживается одна кнопка горит красный светик,одновременно нажимаю другую кнопку все равно горит красный(как и должно),но когда я отпускаю одну из кнопок причем ЛЮБУЮ, горит зеленый и красный светик,вот это меня удивляет!
Ищите ошибку
Зачем вы в последнем варианте убрали выключение диодов? И еще - вы все равно не все варианты учли
Тут мне придется извиниться потому что,с выключением диодов то есть вот так: if(digitalRead(A0)==!HIGH&&digitalRead(A1)==HIGH){digitalWrite(7,HIGH);digitalWrite(8,LOW);}
все работает,но можно ли,добиться такого же результата без выключения диодов?(Жирным шрифтом)
Попробую описать полную ситуацию.Представим что у ардуино 7 входов и 7 выходов.Нужно сделать так,когда на 1 вход ардуино приходили 5В то 1 выход выдавал 0В,а остальные 6 выходов 5В и так аналогично должен работать каждый вход и выход Это первое условие.
Второе условие было "Кто первый встал,того и тапки".То есть если на первый вход подается 5В то,плата работает в режиме первый выход 0В остальные 5В,и ей должно быть все равно даже если на 2-3-4-5 входе будет 5в,потому что на первый вход подали 5В первее,и пока они не пропадут,она работает в таком режиме.Как только с первого выхода пропадет 5в,она должна перейти в режим ожидания и ждать того первого.
Я думал пример с светиками поможет мне разобрать и с этим.Но видимо здесь все сложнее,ибо в таком раскладе я не могу в if выключать пины
Да йоп же ж. На, пробуй, у меня сегодня помутнение сознания, вследствие чего поступаю совершенно нетипичным для форума образом:
Объяснять не буду.
Да йоп же ж. На, пробуй, у меня сегодня помутнение сознания, вследствие чего поступаю совершенно нетипичным для форума образом:
Я слишком слабый,что бы это понять,но если я все правильно подключил.И без ошибок скопировал код,то он работает не так как нужно. )=
он работает не так как нужно. )=
Ну тады ой.
Можно использовать оператор while,например
if(digitalRead(A0)==LOW){
digitalWrite(7,HIGH);
while(digitalRead(A0)==LOW)
{
//пустой цикл
}
digitalWrite(7,LOW)
}
Получится пока нажата кнопка включаем светодиод и крутимся в цикле,как только отпустили кнопку выходим из цикла и гасим светодиод
Объяснять не буду.
если я опять же все правильно сделал,то код не работает.(думаю так и должно быть ибо я не вИжу не одной команды которая включала светики)
Я сидел разбирался,но я так и не понял какую функцию выполняют ноги(leg),хотелось бы все таки услышать объяснение.Была идея что это переменная для switch(leg) что бы смотря какая нога встала,такой кейс и использовался.Но вроде нет)=
тапки одни, а ног много.Если тапки одеты, то надо знать на чье тело. Потому что если именно это тело легло спать, то тапки надо снять.
тапки одни, а ног много.Если тапки одеты, то надо знать на чье тело. Потому что если именно это тело легло спать, то тапки надо снять.
Пух, кому ты пишешь? Он в моём коде в нужных местах не может нужные уровни поставить, а ты...
В комнате живут 1 и 2 . в шкафу лежат тапки . = true; Если 1 захотел одеть тапки !digitalRead(body1Pin) и тапки есть tapky . Ну и так далее. Если вы не знаете языка Си , то можете забить на программирование и ардуино.
ПС: если tapky == false; и leg==1 , то тапки у первого . а если tapky == false; и leg==2, то у второго. А если tapky == true и не важно leg==1 или leg==2 , то в шкафу
Можете стелаль если leg==0 то тапки в шкафу и переменую tapky выкинуть.
Ладно,спасибо.Тут достаточно материала что бы решить задачу,осталось его проработать.
Я думал пример с светиками поможет мне разобрать и с этим.Но видимо здесь все сложнее,ибо в таком раскладе я не могу в if выключать пины
Чтобы светик погас - кто-то должен его выключить. Если вы почему либо "не можете" делать это в программе - то ваша задача программного решения не имеет.
хотя почему вы не можете подать на пин LOW - я так и не понял.
у меня сегодня помутнение сознания
Ты, эта ... береги себя, не шути такими делами!