энкодер из 4 входов

see_watson
Offline
Зарегистрирован: 03.11.2016

4 кнопки подключены к 9,10,11,12 пинам.

надо получить данные в виде :

при нажатии на кнопку 12 получить 0001;

при нажатии на кнопки 10 и 12 получить 0101

итд итп

int in1 = 9;
int in2 = 10;
int in3 = 11;
int in4 = 12;



void setup()
{
 Serial.begin(9600);
 pinMode(in1, INPUT);
 pinMode(in2, INPUT);
 pinMode(in3, INPUT);
 pinMode(in4, INPUT);
}

void loop()
{


int a = digitalRead(in1);
int b = digitalRead(in2);
int c = digitalRead(in3);
int d = digitalRead(in4);
int val = a|b|c|d;
Serial.println(val);

if (val == 0001){Serial.println("ok");}
if (val == 0100){Serial.println("ok2");}


delay(1000);	
  
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
const byte pin1 = 9;
const byte pin2 = 10;
const byte pin3 = 11;
const byte pin4 = 12;
//---main()---------------------------------
void setup() {
  Serial.begin(9600);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  pinMode(pin4, INPUT);
}
void loop() {
  delay(1000);
  int val = 8 * digitalRead(pin4) + 4 * digitalRead(pin3) + 2 * digitalRead(pin2) + digitalRead(pin1);
  Serial.println(val,2);
}

 

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

Или так, результат такой же только выполнится быстрее

/**/
const byte pin1 = 9;
const byte pin2 = 10;
const byte pin3 = 11;
const byte pin4 = 12;
//---main()---------------------------------
void setup() {
  Serial.begin(9600);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  pinMode(pin4, INPUT);
}
void loop() {
  delay(1000);
  int val = (uint8_t)(PINB << 3)>> 4;
  Serial.println(val,2);
}

 

see_watson
Offline
Зарегистрирован: 03.11.2016

Спасибо работает.

но мне надо что бы значение с выходов получалось  B0100; B1001 и тд итп, а то выбор не работает

switch (val) {
    case 1000:
      //выполняется, когда var равно 1
      Serial.println("sever");
      break;
    case 0100:
      //выполняется когда  var равно 2
      Serial.println("ug");
      break;
    

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

case B100  не пробовали?

see_watson
Offline
Зарегистрирован: 03.11.2016

Спасибо. Заработало.

/**/
const byte pin1 = 9;
const byte pin2 = 10;
const byte pin3 = 11;
const byte pin4 = 12;
//---main()---------------------------------
void setup() {
  Serial.begin(9600);
  pinMode(pin1, INPUT);
  pinMode(pin2, INPUT);
  pinMode(pin3, INPUT);
  pinMode(pin4, INPUT);
}
void loop() {
  delay(1000);
  int val = 8 * digitalRead(pin4) + 4 * digitalRead(pin3) + 2 * digitalRead(pin2) + digitalRead(pin1);
 Serial.println(val,2);

  
  switch (val) {
    case B1000:
      //выполняется, когда var равно 1
      Serial.println("sever");
      break;
    case B0100:
      //выполняется когда  var равно 2
      Serial.println("ug");
      break;
    }
      
      
  }