Помогите новичкую

Сергей С.В.
Offline
Зарегистрирован: 02.01.2016

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

int SF_1 = 0;
int SF_2 = 0;
int SF_3 = 0;
int SF_4 = 0;
void setup()
{
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(10,INPUT);
  pinMode(11,INPUT);
  pinMode(12,INPUT);
  pinMode(13,INPUT);
}
void digitalWrites(byte _4bit)
  {
    digitalWrite(0, _4bit&B0001);
    digitalWrite(1, _4bit&B0010);
    digitalWrite(2, _4bit&B0100);
    digitalWrite(3, _4bit&B1000);
  }

void loop()
{
  SF_1 = digitalRead(13);
  SF_2 = digitalRead(12);
  SF_3 = digitalRead(11);
  SF_4 = digitalRead(10);

  
  if(SF_1 == HIGH)
  {
    digitalWrites(1);
  }
  else
  {
    digitalWrites(0);
  }
  if(SF_2 == HIGH)
  {
    digitalWrites(2);
  }
  else
  {
    digitalWrites(0);
  }
  if(SF_3 == HIGH)
  {
    digitalWrites(4);
  }
  else
  {
    digitalWrites(0);
  }
  if(SF_4 ==HIGH)
  {
    digitalWrites(8);
  }
  else
  {
    digitalWrites(0);
  }
}

 

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

1. Вы не могли бы как-то понятнее писать. Что за индикатор, как именно он должен реагировать и т.п. Что за логика у Вас в функции loop()?

2. Что по Вашему означает глубокомысленная конструкция 

digitalWrite(0, _4bit&B0001); ?

3. Посмотрите на логику в своём loop(). Не знаю, что Вы хотели сделать (Вы же поленились это описать), но сделано там явно не то, чего Вы хотели. Например, если SF_4 == LOW, то у Вас будет всё погашено НЕЗАВИСИМО от того какие значения принимают все остьные SF_x. Они могут быть любыми. Вы же не этого хотели?

Сергей С.В.
Offline
Зарегистрирован: 02.01.2016

Прошу прощения за глупо заданный вопрос. К Arduino MICRO к выводам D0 - D3 через дешифратор SD4511 подключён семисегментный светодиодный индикатор. D0 = 1, D1 = 2, D3 = 4, D4 = 8. К выводам D10 - D13 подключены кнопки. SF_1 = D13, SF_2 = D12, SF_3 = D11, SF_4 = D10. При нажатии на кнопку SF_1 на индикаторе должна высветиться 1, SF_2 - 2, SF_3 - 4, SF_4 - 8. Но этого у меня не получилось. На индикаторе горит 0 не меняет свои покозания при нажатии на кнопки. Информацию брал с этого поста http://arduino.ru/forum/programmirovanie/odno-uslovie-na-4-vyvoda . Если у когото возникнет вопрос зачем мне это нужно отвечаю, изучаю С++ и Arduino.

Сергей С.В.
Offline
Зарегистрирован: 02.01.2016

Уважаемый ЕвгенийП удалил все else { digitalWrites(0); }. Ничего не изменилось.

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015
void loop()
{
  byte SF=0;
  if (digitalRead(10))SF=4;
  if (digitalRead(11))SF=3;
  if (digitalRead(12))SF=2;
  if (digitalRead(13))SF=1;
  switch (SF)
  {
    case 1:
    digitalWrites(1);
    break;
    case 2:
    digitalWrites(2);
    break;
    case 3:
    digitalWrites(4);
    break;
    case 4:
    digitalWrites(8);
    break;
    default:
    digitalWrites(0);
    break;
  }
}

Это в лоб без придумок.

nazar
Offline
Зарегистрирован: 08.02.2016

К сносу

at0mix
at0mix аватар
Offline
Зарегистрирован: 23.11.2015

Тебе в другой форум

http://arduino.ru/forumy/ishchu-ispolnitelya

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

Форум почитайте, Жека вроде и скорость мерил и пулялку строил.