728x90

# tinkercad circuit

=> R1, R2, R3, R4 단자는 빨간색 선으로 각각 13, 12, 11, 10에 연결되어있고, C1, C2, C3, C4 단자는 초록색 선으로 각각 9, 8, 7, 6에 연결되어있다.

 

# 코드

int R1 = 13;
int R2 = 12;
int R3 = 11;
int R4 = 10;
int C1 = 9;
int C2 = 8;
int C3 = 7;
int C4 = 6;
void setup()
{
  pinMode(C1, INPUT_PULLUP);
  pinMode(C2, INPUT_PULLUP);
  pinMode(C3, INPUT_PULLUP);
  pinMode(C4, INPUT_PULLUP);
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  Serial.begin(9600);
}

char _getch()
{
  char ch;
  
  digitalWrite(R1, LOW);
  if ( digitalRead(C1) == LOW)
    ch='1';
  if ( digitalRead(C2) == LOW)
    ch='2';
  if ( digitalRead(C3) == LOW)
    ch='3';
  if ( digitalRead(C4) == LOW)
    ch='A';    
  digitalWrite(R1, HIGH);
  
  digitalWrite(R2, LOW);
  if ( digitalRead(C1) == LOW)
    ch='4';
  if ( digitalRead(C2) == LOW)
    ch='5';
  if ( digitalRead(C3) == LOW)
    ch='6';
  if ( digitalRead(C4) == LOW)
    ch='B';  
  digitalWrite(R2, HIGH);
  
  digitalWrite(R3, LOW);
  if ( digitalRead(C1) == LOW)
    ch='7';
  if ( digitalRead(C2) == LOW)
    ch='8';
  if ( digitalRead(C3) == LOW)
    ch='9';
  if ( digitalRead(C4) == LOW)
    ch='C';
  digitalWrite(R3, HIGH);
  
  digitalWrite(R4, LOW);
  if ( digitalRead(C1) == LOW)
    ch='*';
  if ( digitalRead(C2) == LOW)
    ch='0';
  if ( digitalRead(C3) == LOW)
    ch='#';
  if ( digitalRead(C4) == LOW)
    ch='D';    
  digitalWrite(R4, HIGH);
  
  delay(30);
  
  return(ch);
}

void loop()
{
  char a;
  a = _getch();
  Serial.print(a);
  delay(70);
}

1. 각각의 단자에 대한 변수를 선언하고 연결된 번호의 값을 할당한다.


2. setup() 부분에 pinMode() 함수를 이용하여 C1, C2, C3, C4 단자는 INPUT_PULLUP인 입력모드로 설정하고 R1, R2, R3, R4 단자는 OUPUT인 출력모드로 설정한다. 시리얼 통신을 시작한다. 시리얼 모니터 전송속도를 9600bps로 설정한다.


3. 반환형이 char형인 함수 _getch()를 선언한다. 이 함수는 키패드에 입력한 문자를 반환하는 함수이다. 먼저 char형 변수 ch를 선언한다. digitalWirte()함수를 이용하여 R1 단자에  LOW(논리 0)값을 출력하여 C1~C4 단자 중 LOW(논리 0)값인 경우가 있다면 ch에 입력받은 문자를 저장한다. R1 단자에 HIGH(논리 1)값을 출력하고 R2 단자에 LOW(논리 0)값을 출력하여 같은 과정을 반복하고 R2, R3 단자가 LOW(논리 0)값일 경우에도 같은 과정을 반복하여 ch에 입력받은 문자를 저장한다. 이 후 지연시간 30ms를 갖고 문자 ch를 반환한다.


4. loop() 부분에 char형 변수 a을 선언하고 _getch() 함수를 이용하여 반환받은 값을 a에 저장한다. 시리얼 모니터에 a를 출력하고 지연시간 70ms를 갖는다. 이 과정을 무한정 수행한다.

 

# 시뮬레이션

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기