Програмирование кнопок

intom33
Offline
Зарегистрирован: 26.11.2016

Доброго Всем времени суток !

Кто может помочь в программировании переключателей.

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

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

вывести короткий импульс на одну из ног ардуино?

 

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

digitalRead(), if(), digitalWrite(), delay/millis()

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Садман !!! Супер ! :)))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

intom33 пишет:

мне нужно как то...

Такие темы следует создавать в платном разделе "Ищу исполнителя".

В остальных принято вместе с вопросом публиковать скетч с попытками что-то сделать самостоятельно, схему соединений и конкретные вопросы (а не вопрос "как сделать?").

intom33
Offline
Зарегистрирован: 26.11.2016

digitalRead(), if(), digitalWrite()

Так не получается.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Неправда Ваша - получается.

intom33
Offline
Зарегистрирован: 26.11.2016

Мене нужно чтобы при любом переключении переключателей на выходе был небольшой импульс.

В независимости в каком положении переключатель, надо ловить любое изменение переключателей.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

То, что Вам нужно, следует описывать в разделе "Ищу исполнителя".

В остальных разделах обсуждение начинается только после того, как выложены код и схема.

intom33
Offline
Зарегистрирован: 26.11.2016

А можно небольшой примерчик ПОЖАЛУЙСТА.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

intom33 пишет:

А можно небольшой примерчик ПОЖАЛУЙСТА.

Вот смотрите как прикольно получается, вы тут с 16 года, за 4 года не освоили вопрос ? 

intom33
Offline
Зарегистрирован: 26.11.2016

int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int num = 0;
void setup() {

 pinMode(8, INPUT);
 pinMode(9, INPUT);
 pinMode(10, INPUT);
 pinMode(11, INPUT);
 pinMode(12, OUTPUT);
}

void loop() {
  val1 = digitalRead(8);
  val2 = digitalRead(9);
  val3 = digitalRead(10);
  val4 = digitalRead(11);
  
  if(val1 == 0)num = 1;
  if(val1 == 1)num = 2;  
  if(val2 == 0)num = 3;
  if(val2 == 1)num = 4;      
switch (num){
  case 1:
   digitalWrite(12,1);
   delay(50);
   digitalWrite(12,0);
   break;
  case 2:
  digitalWrite(12,1);
   delay(50);
   digitalWrite(12,0);
   break;
  case 3:
  digitalWrite(12,1);
   delay(50);
   digitalWrite(12,0);
   break;
  case 4:
  digitalWrite(12,1);
   delay(50);
   digitalWrite(12,0);
}

}

 

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014
const uint8_t pins_in[]={8,9,10,11};
uint8_t pins_old_state[sizeof(pins_in)];
const uint8_t pin_out=12;

#define IMPULSE_DELAY 50

void setup() {
  pinMode(pin_out,OUTPUT);
  digitalWrite(pin_out,LOW);
  for(uint8_t i=0;i<sizeof(pins_in);i++){
    pinMode(pins_in[i],INPUT_PULLUP);
    pins_old_state[i]=digitalRead(pins_in[i]);
  }
}

void loop() {
  static uint8_t timer=0;
  if(digitalRead(pin_out) && millis()-timer>IMPULSE_DELAY){
    digitalWrite(pin_out,LOW);  
  }
  for(uint8_t i=0;i<sizeof(pins_in);i++){
    uint8_t stat=digitalRead(pins_in[i]);
    if(pins_old_state[i]!=stat){
       pins_old_state[i]=stat;
       timer=millis(); 
       digitalWrite(pin_out,HIGH);  
    }
  }
}

А тот код который привели вы говорит о вашем полнейшем не понимании. В следующий раз заходите в песочницу.

intom33
Offline
Зарегистрирован: 26.11.2016

Огромное СПАСИБО заработало !!!

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Удивительно....

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

brokly пишет:

Удивительно....

е рядом, но оно запрещено ;-)