Привет geektimes. Мне из Китая пришла одна приблуда, схему которой нашёл в сети, и когда рассматривал, обнаружил для себя очень интересную часть, вот она:
Так как почти всё порты микроконтроллера заняты, то Китайцы для экономии портов поступили очень хитро, уровень хитрости можете оценить сами.
Пробовал ночью написать функцию для чтения в среде Arduino IDE:
На практике проверить нету возможности, хотя в теории должно работать, если что поправьте меня.
Все мои публикации на geektimes.
Так как почти всё порты микроконтроллера заняты, то Китайцы для экономии портов поступили очень хитро, уровень хитрости можете оценить сами.
Пробовал ночью написать функцию для чтения в среде Arduino IDE:
Код
#define PIN1 10
#define PIN2 11
#define DOWN 1
#define OK 2
#define UP 3
#define SET 4
void setup()
{
Serial.begin(9600);
}
char checkKeys()
{ // понеслась
pinMode(PIN1, OUTPUT);
digitalWrite(PIN1, LOW);
pinMode(PIN2, OUTPUT);
digitalWrite(PIN2, LOW);
int keysRead = 0;
for (keysRead = 1; keysRead <= 4; keysRead++) {
switch (keysRead) {
case DOWN:
digitalWrite(PIN1, INPUT_PULLUP);
if (digitalRead(PIN1) == false) {
return DOWN;
}
break;
case OK:
pinMode(PIN1, OUTPUT);
digitalWrite(PIN1, LOW);
digitalWrite(PIN2, INPUT_PULLUP);
if (digitalRead(PIN2) == false) {
return OK;
}
break;
case UP:
pinMode(PIN2, OUTPUT);
digitalWrite(PIN2, LOW);
digitalWrite(PIN1, INPUT_PULLUP);
if (digitalRead(PIN1) == false) {
return UP;
}
break;
case SET:
digitalWrite(PIN2, INPUT_PULLUP);
if (digitalRead(PIN2) == false) {
return SET;
}
break;
default:
return 0;
}
}
}
void loop()
{
int keyScan = checkKeys();
Serial.print(keyScan);
Serial.print(" ");
switch (keyScan) {
case DOWN:
Serial.println("DOWN");
break;
case OK:
Serial.println("OK");
break;
case UP:
Serial.println("UP");
break;
case SET:
Serial.println("SET");
break;
}
delay(500);
}
На практике проверить нету возможности, хотя в теории должно работать, если что поправьте меня.
Все мои публикации на geektimes.