<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blowing Through Lines &#187; Arduino</title>
	<atom:link href="http://blowingthroughlines.com/category/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>http://blowingthroughlines.com</link>
	<description>Highly addictive code.</description>
	<lastBuildDate>Tue, 15 Jun 2010 18:14:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using Those Old PS2 Mouses You Couldn&#8217;t Throw Out</title>
		<link>http://blowingthroughlines.com/2009/09/28/arduino/arduino-with-ps2-intellimouse/</link>
		<comments>http://blowingthroughlines.com/2009/09/28/arduino/arduino-with-ps2-intellimouse/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 16:53:14 +0000</pubDate>
		<dc:creator>nilloc</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[microcontroller]]></category>

		<guid isPermaLink="false">http://blowingthroughlines.com/?p=174</guid>
		<description><![CDATA[Sorry got totally distracted by a box in the basement with some PS2 Intellimouse parts in it this weekend. I&#8217;ll have those Box2D shortcuts updated soon, promise.
Anyway if you&#8217;d like to get a PS2 Microsoft Intellimouse with wheel fully working with a current (Diecimila or newer) Arduino here&#8217;s the corrected code:

?View Code C1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
/**
 * Code [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Sorry got totally distracted by a box in the basement with some PS2 Intellimouse parts in it this weekend. I&#8217;ll have those Box2D shortcuts updated soon, promise.</p>
<p>Anyway if you&#8217;d like to get a PS2 Microsoft Intellimouse with wheel fully working with a current (Diecimila or newer) Arduino here&#8217;s the corrected code:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p174code2'); return false;">View Code</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1742"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
</pre></td><td class="code" id="p174code2"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
 * Code is a mix of ps2mouse from the Arduino playground
 * and mousewheel code from &quot;a world in dk&quot; modified to
 * work with Arduino Decimilia and 0017, and run a PS2
 * Microsoft Intellimouse.
 * 
 * Collin Reidorf collin@paperclipped.com 
 * Repaired http://blowingthroughlines.com
&nbsp;
 */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * an arduino sketch to interface with a ps/2 mouse.
 * Also uses serial protocol to talk back to the host
 * and report what it finds.
 */</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * Pin 5 is the mouse data pin, pin 6 is the clock pin
 * Feel free to use whatever pins are convenient.
 */</span>
<span style="color: #339933;">#define MDATA 5</span>
<span style="color: #339933;">#define MCLK 6</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * according to some code I saw, these functions will
 * correctly set the mouse clock and data pins for
 * various conditions.
 */</span>
<span style="color: #993333;">void</span> gohi<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> pin<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	pinMode<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	digitalWrite<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> golo<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> pin<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	pinMode<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	digitalWrite<span style="color: #009900;">&#40;</span>pin<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* PRECONDITION : clock is HIGH */</span>
<span style="color: #808080; font-style: italic;">/* sends a single bit and returns with clock high */</span>
<span style="color: #993333;">void</span> sendBit<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> bit<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>bit<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		gohi<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> 
	<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		golo<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #808080; font-style: italic;">/* wait for clock cycle */</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> LOW<span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> HIGH<span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* reads a single bit and returns with clock low */</span>
<span style="color: #993333;">char</span> readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> tmp <span style="color: #339933;">=</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> HIGH<span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> HIGH<span style="color: #009900;">&#41;</span> 
		tmp <span style="color: #339933;">=</span> <span style="color: #208080;">0x01</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> LOW<span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> tmp<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> mouse_write<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> parity <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* put pins in output mode */</span>
	gohi<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	gohi<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	delayMicroseconds<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	golo<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	delayMicroseconds<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	golo<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	delayMicroseconds<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #808080; font-style: italic;">/* start bit */</span>
	gohi<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #808080; font-style: italic;">/* wait for mouse to take control of clock); */</span>
	sendBit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* clock is low, and we are clear to send data */</span>
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		sendBit<span style="color: #009900;">&#40;</span>data <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x01</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		parity <span style="color: #339933;">=</span> parity <span style="color: #339933;">^</span> <span style="color: #009900;">&#40;</span>data <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x01</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// might not need this anymore but too lazy to test...</span>
&nbsp;
		data <span style="color: #339933;">=</span> data <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>  
	<span style="color: #808080; font-style: italic;">/* parity */</span>
	sendBit<span style="color: #009900;">&#40;</span>parity<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* stop bit */</span>
	sendBit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* wait for mouse to switch modes */</span>
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>digitalRead<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #339933;">;</span>
	<span style="color: #808080; font-style: italic;">/* put a hold on the incoming data. */</span>
	golo<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * Get a byte of data from the mouse
 */</span>
<span style="color: #993333;">char</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> data <span style="color: #339933;">=</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> bit <span style="color: #339933;">=</span> <span style="color: #208080;">0x01</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//	Serial.print(&quot;reading byte from mouse\n&quot;);</span>
	<span style="color: #808080; font-style: italic;">/* start the clock */</span>
	gohi<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	gohi<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	delayMicroseconds<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// delayMicroseconds(5);  /* not sure why */ // and not evidently needed</span>
&nbsp;
	<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// read the bits</span>
		data <span style="color: #339933;">=</span> data <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span>readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;&lt;</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* eat parity bit, which we ignore */</span>
	readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* eat stop bit */</span>
	readBit<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #808080; font-style: italic;">/* put a hold on the incoming data. */</span>
	golo<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> data<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// for the mousewheel</span>
<span style="color: #666666; font-style: italic;">// #define verbose // for verbose output</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// should go up on top when ready</span>
&nbsp;
<span style="color: #993333;">char</span> writeAndGetResponse<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// #ifdef verbose</span>
		<span style="color: #666666; font-style: italic;">// Serial.print(&quot;sending :	 &quot;);</span>
		<span style="color: #666666; font-style: italic;">// Serial.print((unsigned char)data, HEX);</span>
		<span style="color: #666666; font-style: italic;">// Serial.print(&quot;\t&quot;);</span>
	<span style="color: #666666; font-style: italic;">// #endif	</span>
&nbsp;
	mouse_write<span style="color: #009900;">&#40;</span> data <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span> response<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">char</span> response<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> data <span style="color: #339933;">=</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">// #ifdef verbose</span>
		<span style="color: #666666; font-style: italic;">// Serial.print(&quot;echo &quot;);</span>
		<span style="color: #666666; font-style: italic;">// Serial.print((unsigned char)data, HEX);</span>
		<span style="color: #666666; font-style: italic;">// Serial.print(&quot; from mouse\n&quot;);</span>
	<span style="color: #666666; font-style: italic;">// #endif</span>
	<span style="color: #b1b100;">return</span> data<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">// </span>
<span style="color: #993333;">void</span> msMode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">// sequence for ms mode (3 button + scroll)</span>
	<span style="color: #666666; font-style: italic;">// this is a entering procedure and i guess it will</span>
	<span style="color: #666666; font-style: italic;">// work with other mice/ICs as its problably stadard ps2</span>
	<span style="color: #666666; font-style: italic;">// And using an array were just a quick way to handle them</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0xF3</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0xC8</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0xF3</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0x64</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0xF3</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0x50</span><span style="color: #339933;">;</span>
	msInitSequence<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span><span style="color: #208080;">0xF2</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">7</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> 
		writeAndGetResponse<span style="color: #009900;">&#40;</span>msInitSequence<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// end of mousewheel stuff</span>
&nbsp;
&nbsp;
<span style="color: #993333;">void</span> showMStat<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> mstat<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> bit <span style="color: #339933;">=</span> <span style="color: #208080;">0x01</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">8</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>mstat<span style="color: #339933;">&amp;</span>bit<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">:</span>
					Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;L&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
					Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;R&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>
					Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;M&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>
					<span style="color: #666666; font-style: italic;">// Serial.print(&quot; Reserve ...\t&quot;);</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">4</span><span style="color: #339933;">:</span>
					<span style="color: #666666; font-style: italic;">// Serial.print(&quot; X data negative \t&quot;);</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">5</span><span style="color: #339933;">:</span>
					<span style="color: #666666; font-style: italic;">// Serial.print(&quot;Y data negative \t&quot;);</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">6</span><span style="color: #339933;">:</span>
					Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;X data overflow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">case</span> <span style="color: #0000dd;">7</span><span style="color: #339933;">:</span>
					Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Y data overflow&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
		bit <span style="color: #339933;">=</span> bit<span style="color: #339933;">&lt;&lt;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> mouse_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	gohi<span style="color: #009900;">&#40;</span>MCLK<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	gohi<span style="color: #009900;">&#40;</span>MDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;">//	Serial.print(&quot;Sending reset to mouse\n&quot;);</span>
	mouse_write<span style="color: #009900;">&#40;</span><span style="color: #208080;">0xff</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #808080; font-style: italic;">/* ack byte */</span>
	<span style="color: #666666; font-style: italic;">//	Serial.print(&quot;Read ack byte1\n&quot;);</span>
	mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #808080; font-style: italic;">/* blank */</span>
	mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #808080; font-style: italic;">/* blank */</span>
&nbsp;
	msMode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// mousewheel code</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//	Serial.print(&quot;Sending remote mode code\n&quot;);</span>
	mouse_write<span style="color: #009900;">&#40;</span><span style="color: #208080;">0xf0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #808080; font-style: italic;">/* remote mode */</span>
	mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #808080; font-style: italic;">/* ack */</span>
	<span style="color: #666666; font-style: italic;">//	Serial.print(&quot;Read ack byte2\n&quot;);</span>
&nbsp;
	delayMicroseconds<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	mouse_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
 * get a reading from the mouse and report it back to the
 * host via the serial line.
 */</span>
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> mstat<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> mx<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> my<span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> mz<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* get a reading from the mouse */</span>
	writeAndGetResponse<span style="color: #009900;">&#40;</span><span style="color: #208080;">0xEB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #808080; font-style: italic;">/* give me data! */</span> 
&nbsp;
	mstat <span style="color: #339933;">=</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	mx <span style="color: #339933;">=</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	my <span style="color: #339933;">=</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	mz <span style="color: #339933;">=</span> mouse_read<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/* send the data back up */</span>
&nbsp;
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>mouse status=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>mstat<span style="color: #339933;">,</span> BIN<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>X=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>mx<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Y=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>my<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>Z=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>mz<span style="color: #339933;">,</span> DEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	showMStat<span style="color: #009900;">&#40;</span>mstat<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// print buttons that are down</span>
	Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">20</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #808080; font-style: italic;">/* twiddle */</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Based on code from <a href="http://www.arduino.cc/playground/ComponentLib/Ps2mouse" target="_blank">The Arduino Playground</a> which also shows the pinouts (where the black and white drawing is the female connector&#8217;s pintout, the pins on the mouse itself are a mirror image, like in the blurry photo below) and more code from <a href="http://rotand.dk/blog/2007/11/21/arduino-ps2-mouse/" target="_blank">A world in dk(decay/denmark)</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://blowingthroughlines.com/2009/09/28/arduino/arduino-with-ps2-intellimouse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
