이종훈's 작업실


키보드 매트릭스를 테스트하는 중인데 이상하게 2열의 1,2,3 등의 숫자만 입력이 안되더군요






핀에 문제가 있나 하고 핀아웃도 다시 확인하고






배선설정과 실제 스케치간에 연결이 다른부분이 있나 다시 확인해봤습니다. 

문제는 그냥 제가 시리얼로 결과를 확인하고 있다는 것이었지요

Tx 핀으로 입력을 하는데 그걸 시리얼 출력으로 쓰고있으니 당연히 안되는 것이었습니다. 




수정해서 키패드 입력을 LED 디스플레이로 하는건 금방 되었는데

본격적으로 계획을 짜보니 이게 생각보다 난이도가 상당히 높네요.

스케치를 짜려고 보니 생각해야 할 부분이 많습니다.


1. 키패드 매트릭스는 사칙연산 부호 등 때문에 char 형태로 데이터를 주고받음 -> '0' 문자를 숫자로 변경하는건 쉬움. 

2. 25개의 매트릭스 입력에 따라 숫자, 문자 등으로 분류하여 각각 다른 계산을 해야함 -> 역시 어렵진 않을듯. 

3. 계산기의 자리수는 16자리이므로 최대 9999999999999999 까지 표시할 수 있다. 

소수점을 사용해야 하므로 float 변수를 사용하는데 소수점 이하를 표시하려면

앞에 표시될 '0.' 글자를 빼면 소수점 14자리까지 쓸 수 있어야 한다. 

기본적으로 디스플레이에서 float 함수를 쓰면 소수점 2번째 자리까지만 표시되며

"%f" 형을 사용해 float 형을 출력하면 이하 숫자의 오류가 생긴다. 

dtostrf() 함수를 사용하면 3번째이하 자리수를 처리할 수 있지만 

소수점 이하 자리수를 정확히 알고 있는 경우가 아니면 역시 오류가 생긴다 ->갑자기 최종보스 출현한 난이도..;


검색해보니 부동소수점 문제는 원래 어렵더군요.. 

아두이노 계산기 예제라고 나와있는것도 죄다 정수처리만 가능한 간단형 버전이고요.



913425.45 를 출력하면 저렇게 나옵니다.

일단 정확하게 출력하는것도 문제지만 그걸 또 연산처리해야한다는 점이 엄청 골치아프네요

신고

Comment +2

  • 하얀마음얀1004 2017.10.31 08:48 신고

    몇년전에 구매한 버튼이 여러개 달린 LCD에는 아나로그 입력핀 1개에 여러개의 저항에 버튼을 달아 저항값을 읽어 눌린 버튼을 처리하는것을 보았습니다.
    핀이 부족할 때는 그방법도 좋을것 같습니다.

    • 그 문제는 해결되었습니다. 지금은 float 형의 소수점 이하 10자리까지 제대로 표시하는 문제가 남아있는데 이건 검색을 해봐도 어렵네요..

', 'auto'); ga('send', 'pageview');