Помогите новичкую
- Войдите на сайт для отправки комментариев
Сб, 06/02/2016 - 23:29
Помогите разобраться с двоичным кодом. Написал такой скетч, но индикатор не реагирует на нажатие кнопок.
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);
}
}
1. Вы не могли бы как-то понятнее писать. Что за индикатор, как именно он должен реагировать и т.п. Что за логика у Вас в функции loop()?
2. Что по Вашему означает глубокомысленная конструкция
digitalWrite(0, _4bit&B0001); ?
3. Посмотрите на логику в своём loop(). Не знаю, что Вы хотели сделать (Вы же поленились это описать), но сделано там явно не то, чего Вы хотели. Например, если SF_4 == LOW, то у Вас будет всё погашено НЕЗАВИСИМО от того какие значения принимают все остьные SF_x. Они могут быть любыми. Вы же не этого хотели?
Прошу прощения за глупо заданный вопрос. К 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.
Уважаемый ЕвгенийП удалил все else { digitalWrites(0); }. Ничего не изменилось.
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; } }Это в лоб без придумок.
К сносу
Тебе в другой форум
http://arduino.ru/forumy/ishchu-ispolnitelya
Форум почитайте, Жека вроде и скорость мерил и пулялку строил.