Добрый день.
Есть следующая задача:
Считать 12 кнопок с помощью каскада из двух регистров 74HC165
Кнопки подтянуты на +5, при нажатии дают логический 0
Входы G и H регистров подтянуты на GND (всегда выдают 0)
При всех не нажатых кнопках:
ABCD EFGH первого регистра
1111 1100
ABCD EFGH второго регистра
1111 1100
Сейчас код выглядит следующим образом:
1. Куда вставить в код управление защелкой (latch_SH_in) чтобы все корректно читалось?
2. Правильно ли читаются биты при порядке MSBFIRST? 1A 2B 3C 4D 5E 6F 7G 8H?
Или, все же наоборот 1H ............8A?
3. Что надо прописать в фигурных скобках, чтобы ничего не выводилось при ни одной не нажатой кнопке (value_in1 == 252 && value_in2 == 252)?
Раздел: Arduino и Raspberry Pi
Есть следующая задача:
Считать 12 кнопок с помощью каскада из двух регистров 74HC165
Кнопки подтянуты на +5, при нажатии дают логический 0
Входы G и H регистров подтянуты на GND (всегда выдают 0)
При всех не нажатых кнопках:
ABCD EFGH первого регистра
1111 1100
ABCD EFGH второго регистра
1111 1100
Сейчас код выглядит следующим образом:
// определяем переменные для входного IN регистра
int latch_SH_in = 41; // защелка входного регистра без привязки к SPI
int data_SH_in = 50; // SPI MISO 50
// общий CLK на каскад IN и OUT
int clock_SH_in_out = 52;// SPI SCK 52 на MEGA
// переменная считываемых с IN данных
int value_in1 = 0; // переменная первого IN
int value_in2 = 0; // переменная вторгоо IN
void setup()
{
// запускаем COM
Serial.begin(9600);
//настраиваем пины IN регистра
pinMode(latch_SH_in, OUTPUT);
pinMode(data_SH_in, INPUT);
// настраиваем общий IN_OUT clock
pinMode(clock_SH_in_out, OUTPUT);
}
void loop()
{
// Считываем регистры
value_in1 = shiftIn(data_SH_in, clock_SH_in_out, MSBFIRST);
value_in2 = shiftIn(data_SH_in, clock_SH_in_out, MSBFIRST);
//выводим значения в COM-монитор при изменениях в первом регистре
if(value_in1 == 124 && value_in2 == 252)
{Serial.println("A");}
if (value_in1 == 188 && value_in2 == 252)
{Serial.println ("B");}
if (value_in1 == 220 && value_in2 == 252)
{Serial.println ("C");}
if (value_in1 == 236 && value_in2 == 252)
{Serial.println ("D");}
if (value_in1 == 244 && value_in2 == 252)
{Serial.println ("E");}
if (value_in1 == 248 && value_in2 == 252)
{Serial.println ("F");}
//выводим значения в COM-монитор при изменениях во втором регистре
if(value_in1 == 252 && value_in2 == 124)
{Serial.println("2A");}
if (value_in1 == 252 && value_in2 == 188)
{Serial.println ("2B");}
if (value_in1 == 252 && value_in2 == 220)
{Serial.println ("2C");}
if (value_in1 == 252 && value_in2 == 236)
{Serial.println ("2D");}
if (value_in1 == 252 && value_in2 == 244)
{Serial.println ("2E");}
if (value_in1 == 252 && value_in2 == 248)
{Serial.println ("2F");}
}
1. Куда вставить в код управление защелкой (latch_SH_in) чтобы все корректно читалось?
2. Правильно ли читаются биты при порядке MSBFIRST? 1A 2B 3C 4D 5E 6F 7G 8H?
Или, все же наоборот 1H ............8A?
3. Что надо прописать в фигурных скобках, чтобы ничего не выводилось при ни одной не нажатой кнопке (value_in1 == 252 && value_in2 == 252)?
Раздел: Arduino и Raspberry Pi