묻고 답하고
스위치 하나를 연결할때
보드 + -> 스위치 다리 -> 스위치 다리 -> 보드-
이런식으로 연결하잖아요.
이걸
보드1 + -> -> 보드1 -
스위치 다리 -> 스위치 다리
보드2 + -> -> 보드2 -
이런식으로 하면 어떨까? 라는 발상입니다. 저도 해본 적이 없어서 될지 어떨지는 모르겠는데, 된다면 이런 식으로 4개 보드에 땜질을 해주면 어떨까 싶은거죠. 어차피 매트릭스 쓰면 다이오드 있으니까 작동하지 않을까? 하는 생각입니다. 저도 아직은 초심자인지라 터무니없는 이야기일수도 있습니다...
- 아두이노는 하나만 쓰고 그 아두이노에 여러개의 USB칩셋"만" 추가로 붙여서 각각 따로 USB키보드 노릇을 하게 하는 게 제일 합리적으로 생각이 되는데 아두이노로 그게 가능할지 모르겠네요. 아두이노 문외한이라.. 대충 보기에는 아두이노만 갖고는 어려워 보입니다. 말씀하신 하드웨어 장비가 아마 이런 구조겠죠. 아두이노를 쓴다는게 아니라, 메인 컨트롤러1개 + 여러 개의 USB디바이스 칩셋이라는 구조 말이죠.
- 헌데, 매트릭스를 동시에 사용하는 건 가능해 보입니다. 아두이노 네개가 동시에 켜져있다는 가정하에, 전압을 인가하는 놈은 그중에 하나만 하고 나머지 셋은 읽기만 하면 된다는 얘기죠. 그럼 현재 읽는 라인이 어딘지 어떻게 아느냐? 그 부분의 출력을 다른 아두이노의 입력으로 넣으면 되겠죠. 즉, 매트릭스를 지정하는 신호와 해당 매트릭스의 키 입력 상태를 모조리 인풋으로 받으면 된다는 겁니다. 이를 응용하면 아두이노 입력 단자 부족 문제도 해결할 수 있겠죠. 현재 쓰시는 방식과 비슷하나, 통신을 키 데이터가 아니라 매트릭스 선택에 대해서 한다는게 다른 점입니다. 데이터의 추가 가공이 필요없으니 지금보단 훨씬 빠르겠죠. 이쪽도 동기화 문제가 발생할 확률이 높지만 조금만 추가처리를 해주면 어렵잖게 해결할 수 있을 겁니다. 다 해놓고 나면 결국 마스터-슬레이브방식 버스 신호처리 또는 패러렐 통신쪽과 아주 비슷해지겠네요.
- 또는, 현재 통신부분 구현을 어떻게 하셨는지 모르겠습니다만 스캔 상황을 계속 공유하지 말고 상태가 변한 것만 전송한다면 최적화가 가능할지도.. 아두이노는 구식 시리얼통신도 가능한걸로 알고 있는데 이를 통해 입력이 변한 키에 대한 정보만 1대3으로 즉각 브로드캐스팅한다면 쉽게 해결이 가능할 수도 있겠습니다. 시리얼통신이 느리다지만 저정도 정보는 문제없을것 같군요.
- 단자부족으로 아두이노 하나가 풀 매트릭스 지원을 못하는건 인코딩(디멀티플렉싱)으로 해결할 수 있습니다. 현 매트릭스 방식은 아마도 출력 하나가 매트릭스 한줄을 담당하는 것일텐데, 예를 들어, 인코딩을 동원하면 출력단자 4개로도 16개(2의 4승)의 매트릭스 줄을 제어할 수 있게 됩니다. 물론 단자가 더 많은 하드웨어를 쓸 수 있다면 그냥 쓰는게 편하기야 하겠죠.
- 추가2에 적어주신 키보드는 제가 확인해보니 그냥 단순 스위칭입니다. 동시 사용이 안됩니다. 본문 내용상 스위칭이 아닌 동시사용을 원하시는 게 확실해보이니 고려하실 이유가 없어 보입니다. 말하자면 그냥 KVM기능을 (키보드 부분에 한해) 내장한 키보드입니다. 단순 스위칭이었으면 USB셀렉터만 있어도 바로 끝나는 얘기.
- 그냥 속도가 대폭 빠른 컨트롤러를 써버리는 것도 방법입니다. (...) 비효율적 로직을 클럭파워로 때우는 것도 분명 고려해볼만한 방법이죠.
- 현재 버스통신은 어떤식으로 하시나요? 아두이노 병렬연결에 대한 연구와 예제는 수없이 많으므로 그중에 최적화된 통신기법을 쓰고 있는 건지도 따로 확인해보셔야 합니다.
- 만약 취미생활 목적이 아니고, 사용처가 게임이나 바이오스 제어처럼 반드시 하드웨어 방식이어야 하는 쪽도 아니라면, 그냥 아두이노 없이 소프트웨어적으로 해결하시는게 가장 편할 겁니다. 네트워크로 키 입력 정보만 공유하면 돼서 아주 간단하고 레이턴시도 적습니다.
좋은답변들을 많이 달아주셨네요.
제가 굳이 이런걸 구입하지않고 직접 구현하려고한 이유는 연결 딜레이 때문이었습니다.
위에 제가 써놓은 듀얼박스? 라는 18만원짜리 장치는
문의결과, 연결on/off 시에 약간의 끊김이 여전히 존재한다고합니다.
usb 키보드나 마우스를 끼거나 뺄때 약간의 렉과 딜레이가 있는것처럼요.
그런 딜레이가 아예 없도록 하려면, 연결은 여전히 되어있는상태에서
눌러도 신호만 안 가도록 구현해야하고, 아두이노 4개 각각으로 구현해야 한다고 생각해서였죠.
음... 아무튼 내일이나 모레쯤 여기서 나온 아이디어들을 구현해봐야겠군요.
제가 프로그래밍을 잘 아는 것이 아니라 wire 통신은 정확히 모르겠으나, 이 방식으로 일단 키스캔에 보드 두개를 쓰는 현상은 없어지겠죠.
그리고 제 생각입니다만은, 어차피 매트릭스 키 스캔은 전압차로 감지하는 것이니까, 링크 글 기준으로 키보드 와이어링 해서 아두이노에 납땜해주는 부분에 철사를 더 붙여서 모든 보드가 키스캔을 하면 되지 않을까~싶습니다.(모든 아두이노 보드를 병렬로 연결) 이건 되는지 여부를 저도 실험을 해 봐야 알겠지만, 그냥 키 스캔을 모두가 하게 하면 딜레이를 걱정할 필요는 없지 싶은데요.