помогите написать код

andrew12354
Offline
Зарегистрирован: 18.03.2019
нужно , что-бы при повторном нажатии на кнопку загорался соседний светодиод 
 
вот 
 
 
int button = 2; // кнопка
 
int led1 = 8;// певый светодиод
int led2 = 9;// второй светодиод 
int led3 = 10;// третий светодиод
 
void setup() {
 
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
 
pinMode(button, INPUT);
 
}
 
void loop(){
 
if (digitalRead(button) == HIGH) {
 
digitalWrite(led1, HIGH);  
}
}
andrew12354
Offline
Зарегистрирован: 18.03.2019
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

200 рублей. согласны?

andrew12354
Offline
Зарегистрирован: 18.03.2019

?

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

andrew12354 пишет:

?

что не понятного ? нужно

вот

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

так за деньги много кто может )))

Andrey12
Andrey12 аватар
Offline
Зарегистрирован: 26.12.2014

Я не возьмусь за 200, за 2000 подумаю еще. Так что налетайте пока дешево!

sadman41
Offline
Зарегистрирован: 19.10.2016

Эта красивее

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

sadman41 пишет:

Эта красивее

 

не..., ну энто если только на чистом/честном.

sadman41
Offline
Зарегистрирован: 19.10.2016

На ассемблере с лямбда-функциями реального времени и захватом чужого таймера.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

sadman41 пишет:

На ассемблере с лямбда-функциями реального времени и захватом чужого таймера.

точно... и еще это, побегом из виртуалки :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ТС, могу написать на Брейнфаке. Устроит?

EKate
Offline
Зарегистрирован: 18.03.2019

Это точно, песочница? andrew12354 Попробуйте добавить счетчик (i) нажатий кнопки от 1 до 3 в зависимости чему равна (i) зажигать светодиод например i = 1 диод № 1 i = 2 диод №2 и так далее

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

EKate пишет:

Это точно, песочница? andrew12354 Попробуйте добавить счетчик (i) нажатий кнопки от 1 до 3 в зависимости чему равна (i) зажигать светодиод например i = 1 диод № 1 i = 2 диод №2 и так далее

ну так че полный код не осилили ? имено его ждет ТС, а вы тут со своими дурацкими счетчиками (i)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так я вроде предложил полный код. Похоже, не нужен :(

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

Не так оно всё просто ... случись дрожание рук - получим генератор случайных чисел.

EKate
Offline
Зарегистрирован: 18.03.2019

Может человек ждал волшебного пенделя со ссылкой - где копать. А потом - может вы все и правы. Вернется - раскажет.

EKate
Offline
Зарегистрирован: 18.03.2019

Вот и пендель http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku.

Вроде по теме.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

Это точно, песочница? andrew12354 Попробуйте добавить счетчик (i) нажатий кнопки от 1 до 3 в зависимости чему равна (i) зажигать светодиод например i = 1 диод № 1 i = 2 диод №2 и так далее

а если 4-й раз нажать кнопку то???
Видимо я единственный ТС-а не понял, что хочет, зачем, почему кнопку притянул к земле а не PULLUP )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

я единственный ТС-а не понял, что хочет, зачем, почему кнопку притянул к земле 

А я не понял какой именно  "соседний светодиод".

bwn
Offline
Зарегистрирован: 25.08.2014

EKate пишет:

Вот и пендель http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku.

Вроде по теме.

Если он и в той теме, прочитает столько же, сколько в этой ветке, придется давать пенделя посылающему.((((

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

я единственный ТС-а не понял, что хочет, зачем, почему кнопку притянул к земле 

А я не понял какой именно  "соседний светодиод".

Логично )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

Это точно, песочница? andrew12354 Попробуйте добавить счетчик (i) нажатий кнопки от 1 до 3 в зависимости чему равна (i) зажигать светодиод например i = 1 диод № 1 i = 2 диод №2 и так далее

Так что ли???
 

int button = 2; // кнопка
int led1 = 8;   // первый светодиод
int led2 = 9;   // второй светодиод 
int led3 = 10;  // третий светодиод

byte i = 0;     // счетчик
byte f_b = 0;   // флаг нажатия кнопки

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(button, INPUT);
}
 
void loop(){
if (digitalRead(button) == HIGH && f_b == 0) {
f_b=1;  
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}
digitalWrite(i+7, HIGH);  
}
if (digitalRead(button) == LOW && f_b == 1) {
f_b=0;  
}
}

 

EKate
Offline
Зарегистрирован: 18.03.2019

Код ua6em похоже скопипастил и не совсем понимает что происходит в if-ах

ua6em пишет:

Так что ли???

void loop(){

if (digitalRead(button) == HIGH && f_b == 0) {
f_b=1;  
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}
digitalWrite(i+7, HIGH);  
}
if (digitalRead(button) == LOW && f_b == 1) {
f_b=0;  
}
}

Я предлогаю (мы ведь только учимся :) ) для простоты избавиться от мозголомных IF (){}.

Тоесть в :  

void loop(){
if (digitalRead(button) == HIGH && f_b == 0) {
f_b=1;  
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}

Для начала Вам ua6em написать коментарии к приведенным выше сторокам кода. И зачем нам флажок f_b?

Вот мой наивный код:

if (digitalRead(button) == HIGH) {
  i =i + 1; //получив нажатие кнопки - увеличили счетчик.
}

 

а дальше я так-же наивно что-то с этим делал ;)

andrew12354
Offline
Зарегистрирован: 18.03.2019

Спасибо , так намного проще .

EKate
Offline
Зарегистрирован: 18.03.2019

andrew12354 пишет:

Спасибо , так намного проще .

За что? А если проще то ваш код  - в студию, тоесть сюда. Плиз.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

Код ua6em похоже скопипастил и не совсем понимает что происходит в if-ах

ua6em пишет:

Так что ли???

void loop(){

if (digitalRead(button) == HIGH && f_b == 0) {
f_b=1;  
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}
digitalWrite(i+7, HIGH);  
}
if (digitalRead(button) == LOW && f_b == 1) {
f_b=0;  
}
}

Я предлогаю (мы ведь только учимся :) ) для простоты избавиться от мозголомных IF (){}.

Тоесть в :  

void loop(){
if (digitalRead(button) == HIGH && f_b == 0) {
f_b=1;  
digitalWrite(i+7, LOW);  
i++;
if (i>3) {i=1;}

Для начала Вам ua6em написать коментарии к приведенным выше сторокам кода. И зачем нам флажок f_b?

Вот мой наивный код:

if (digitalRead(button) == HIGH) {
  i =i + 1; //получив нажатие кнопки - увеличили счетчик.
}

 

а дальше я так-же наивно что-то с этим делал ;)

естественно скопипастил у ТС, не самому жеж писать, кое чего дополнил...
Вы действительно не понимаете зачем там переменная для флага нажатия - отжатия кнопки???
К ТС-у только один вопрос, надо ли после зажигания 3-го светодиода всё гасить или зажигать первый, если надо гасить, то присваиваем i=0...
Да, пин 7 надо тоже обозначить как выходной...и да...if это самая элементарная конструкция )))

 

andrew12354
Offline
Зарегистрирован: 18.03.2019

А вот еще . Как добавить , что-бы с помощью Serial Monitor можно было менять яркость светодиода , с использованием аналогового пина. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Это уже на 600р тянет

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А вот обьяснить аналоговому пину, что он умеет яркость менять - бесценна.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andrew12354 пишет:

Спасибо , так намного проще .

и, что? работает? )))

andrew12354
Offline
Зарегистрирован: 18.03.2019

с использованием ( i =i + 1) , да

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andrew12354 пишет:

А вот еще . Как добавить , что-бы с помощью Serial Monitor можно было менять яркость светодиода , с использованием аналогового пина. 


Я пас!!! Тут без вскрытия чипа с последующим переконфигурированием  не обойтись

bwn
Offline
Зарегистрирован: 25.08.2014

Да ну нах.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andrew12354 пишет:

с использованием ( i =i + 1) , да

i++ на два символа меньше набирать

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ну что EKate - дерзай, следующей хотелкой будет NRF и т.д. :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

Да ну нах.

неужели можно фьюзами? да ну нах! круто, если это так

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

и, что? работает? )))

ну как-то оно, безусловно, работает :) Во всяком случае, единицу прибаляет :)

Товарищу EKate я бы посоветовал собрать простенький макет из кнопки и пары светодиодов и попробовать свой код :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

и, что? работает? )))

ну как-то оно, безусловно, работает :) Во всяком случае, единицу прибаляет :)

Товарищу EKate я бы посоветовал собрать простенький макет из кнопки и пары светодиодов и попробовать свой код :)

из двух может и не поймет, вот на трёх - однозначно лажа вылезет )))

b707
Offline
Зарегистрирован: 26.05.2017

ua6em пишет:

из двух может и не поймет, вот на трёх - однозначно лажа вылезет )))

можно вообще светодиоды не подключать, вывести i в Сериал пожалуй даже нагляднее будет

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ua6em пишет:

из двух может и не поймет, вот на трёх - однозначно лажа вылезет )))

поймет, когда при нажатии просто два диода гореть будут и все, а при отпускании как random пошлет.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

из двух может и не поймет, вот на трёх - однозначно лажа вылезет )))

можно вообще светодиоды не подключать, вывести i в Сериал пожалуй даже нагляднее будет

вопрос, а цитирование чужого кода не тянет на плагиат? )))

EKate
Offline
Зарегистрирован: 18.03.2019

Мое мнение такое: если мы нажали на кнопку то выполнить действие светодиод.

если мы получили еще нажатие то гасим предидущий и зажигаем следующий.

это мои наивные рассуждения. но можно сложнее:

если мы нжали на кнопку то выполнить действие светодиод. и проверить состояние: порт на выход? горит : нет.

если мы получили еще нажатие то гасим предидущий и зажигаем следующий.

в обоих случаях мне не важно что с кнопкой и св.диодом он или светится или нет - так я понял условия.

 

EKate
Offline
Зарегистрирован: 18.03.2019

ua6em пишет:

b707 пишет:

ua6em пишет:

и, что? работает? )))

ну как-то оно, безусловно, работает :) Во всяком случае, единицу прибаляет :)

Товарищу EKate я бы посоветовал собрать простенький макет из кнопки и пары светодиодов и попробовать свой код :)

из двух может и не поймет, вот на трёх - однозначно лажа вылезет )))

Товарищ уже проверял но только в протеусе.

EKate
Offline
Зарегистрирован: 18.03.2019

есть два варианта скетча(решено 2мя путями). оба работают в симуляторе. :) в железе не проверял.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

есть два варианта скетча(решено 2мя путями). оба работают в симуляторе. :) в железе не проверял.

а логику включить?

EKate
Offline
Зарегистрирован: 18.03.2019

Если вы о - симуляция и железо не всегда дают одинаковый результат. То об этом недоразумении я осведомлен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

Если вы о - симуляция и железо не всегда дают одинаковый результат. То об этом недоразумении я осведомлен.


Знать мало, а применять?

bwn
Offline
Зарегистрирован: 25.08.2014

EKate пишет:

есть два варианта скетча(решено 2мя путями). оба работают в симуляторе. :) в железе не проверял.

Дайте поставлю вопрос иначе, сколько раз выполниться луп, пока вы держите кнопку, по вашему мнению?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

EKate пишет:

есть два варианта скетча(решено 2мя путями). оба работают в симуляторе. :) в железе не проверял.

Дайте поставлю вопрос иначе, сколько раз выполниться луп, пока вы держите кнопку, по вашему мнению?

ну зачем так жестоко )))
PS - Код ua6em похоже скопипастил и не совсем понимает что происходит в if-ах

bwn
Offline
Зарегистрирован: 25.08.2014

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?