답변:
내가 아는 한, 구형 Mac 마우스는 DE-9 커넥터를 사용했지만 이것은 RS-232 호환이 아닙니다. 그랬다면, 당신은 RS-232에서 PS / 2 어댑터 그리고 나서 표준 ps / 2-usb-converter (둘 다 활성 변환기 여야 함).
ADB 마우스를 사용하면 마우스를 사용할 수 있습니다. 어댑터들 이것들을 위해.
전자 제품과 프로그래밍에 관심이 있다면 자신 만의 변환기를 만들 수 있습니다. ~을 사용하여 십대 보드 몇 달러. 오래 된 사과 마우스가 그냥 보내면 너무 어렵지 않아야합니다. 직교 신호 포인터 이동으로 쉽게 변환되어야합니다.
고대 스레드 -하지만 같은 생각을 찾고 있었어.
USB 장치에서 사용할 구적 변조를 감추기 위해 HID 기능이있는 arduino / teensy를 사용할 수 있습니다.
DE9 핀아웃 (아래 코드의 arduino 핀 포함)은 다음과 같습니다.
DB9 Pro Micro
1 GND
2 VCC
3 GND
4 D0 (pin 3)
5 D1 (pin 2)
6 - (not connected)
7 B3 (pin 14)
8 D3 (pin TXO)
9 D2 (pin RXI)
GuilleAcoustic의 원래 샘플 코드 중 Johan Berglund가 수정 한 샘플 코드는 다음과 같습니다.
/* ================================================================================
Author : GuilleAcoustic
Date : 2015-05-22
Revision: V1.0
Purpose : Opto-mechanical trackball firmware
--------------------------------------------------------------------------------
Wiring informations: Sparkfun Pro micro (Atmega32u4)
--------------------------------------------------------------------------------
- Red : Gnd | Pin: Gnd
- Orange : Vcc (+5V) | Pin: Vcc
- Yellow : X axis encoder / channel A | Pin: PD3 - (INT0)
- Green : X axis encoder / channel B | Pin: PD2 - (INT1)
- Blue : Y axis encoder / channel A | Pin: PD0 - (INT2)
- Violet : Y axis encoder / channel B | Pin: PD1 - (INT3)
- Grey : Switch 1 | Pin: PB3
- White : Switch 2 | Pin: PB2
- Black : Switch 3 | Pin: PB1
--------------------------------------------------------------------------------
Modified for use with Apple M0100 mouse
By Johan Berglund, 2015-08-10
Changes in code:
- Internal pullup set for pin 14 (B3)
- State check for right and middle buttons commented out
Connection to DB9:
DB9 Pro Micro
1 GND
2 VCC
3 GND
4 D0 (pin 3)
5 D1 (pin 2)
6 - (not connected)
7 B3 (pin 14)
8 D3 (pin TXO)
9 D2 (pin RXI)
================================================================================ */
// =================================================================================
// Type definition
// =================================================================================
typedef struct
{
int8_t coordinate = 0;
uint8_t index = 0;
} ENCODER_;
// =================================================================================
// Constant definition
// =================================================================================
const int8_t lookupTable[] = {0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0, -1, 1, 0};
// =================================================================================
// Volatile variables
// =================================================================================
volatile ENCODER_ xAxis;
volatile ENCODER_ yAxis;
// =================================================================================
// Setup function
// =================================================================================
void setup()
{
// Set pull-up for mouse switch on M0100
pinMode(14, INPUT_PULLUP);
// Attach interruption to encoders channels
attachInterrupt(0, ISR_HANDLER_X, CHANGE);
attachInterrupt(1, ISR_HANDLER_X, CHANGE);
attachInterrupt(2, ISR_HANDLER_Y, CHANGE);
attachInterrupt(3, ISR_HANDLER_Y, CHANGE);
// Start the mouse function
Mouse.begin();
}
// =================================================================================
// Main program loop
// =================================================================================
void loop()
{
// Update mouse coordinates
if (xAxis.coordinate != 0 || yAxis.coordinate != 0)
{
Mouse.move(xAxis.coordinate, yAxis.coordinate);
xAxis.coordinate = 0;
yAxis.coordinate = 0;
}
// Update buttons state
!(PINB & 0b1000) ? Mouse.press(MOUSE_LEFT) : Mouse.release(MOUSE_LEFT);
// !(PINB & 0b0100) ? Mouse.press(MOUSE_RIGHT) : Mouse.release(MOUSE_RIGHT);
// !(PINB & 0b0010) ? Mouse.press(MOUSE_MIDDLE) : Mouse.release(MOUSE_MIDDLE);
// Wait a little before next update
delay(10);
}
// =================================================================================
// Interrupt handlers
// =================================================================================
void ISR_HANDLER_X()
{
// Build the LUT index from previous and new data
xAxis.index = (xAxis.index << 2) | ((PIND & 0b0011) >> 0);
xAxis.coordinate += lookupTable[xAxis.index & 0b1111];
}
void ISR_HANDLER_Y()
{
// Build the LUT index from previous and new data
yAxis.index = (yAxis.index << 2) | ((PIND & 0b1100) >> 2);
yAxis.coordinate += lookupTable[yAxis.index & 0b1111];
}
일반적으로 변환기를 능가하는 운전자의 문제입니다. 빠른 검색을 통해 과다한 시리얼 -USB 변환기를 구매할 수 있습니다. 나는 단순히 입력 장치를 인식하는 시스템에 숨을 멈추지 않을 것이다.