<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Arduino Reference - MouseMove </title> <link rel="shortcut icon" type="image/x-icon" href="http://arduino.cc/en/favicon.png"> <link rel='stylesheet' href='arduinoWideRender.css' type='text/css' /> <!--HeaderText--><style type='text/css'><!-- ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; } code { white-space: nowrap; } .vspace { margin-top:1.33em; } .indent { margin-left:40px; } .outdent { margin-left:40px; text-indent:-40px; } a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; } a.createlink { text-decoration:none; position:relative; top:-0.5em; font-weight:bold; font-size:smaller; border-bottom:none; } img { border:0px; } .editconflict { color:green; font-style:italic; margin-top:1.33em; margin-bottom:1.33em; } table.markup { border: 2px dotted #ccf; width:90%; } td.markup1, td.markup2 { padding-left:10px; padding-right:10px; } td.markup1 { border-bottom: 1px solid #ccf; } div.faq { margin-left:2em; } div.faq p.question { margin: 1em 0 0.75em -2em; font-weight:bold; } div.faq hr { margin-left: -2em; } .frame { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; } .lfloat { float:left; margin-right:0.5em; } .rfloat { float:right; margin-left:0.5em; } a.varlink { text-decoration:none; } /** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .arduino {font-family:monospace;} .arduino .imp {font-weight: bold; color: red;} .arduino .kw1 {color: #CC6600;} .arduino .kw2 {color: #006699;} .arduino .kw3 {color: #CC6600; font-weight: bold;} .arduino .co1 {color: #7E7E7E; font-style: italic;} .arduino .co2 {color: #7E7E7E;} .arduino .coMULTI {color: #7E7E7E; font-style: italic;} .arduino .es0 {color: #000099; font-weight: bold;} .arduino .es1 {color: #000099; font-weight: bold;} .arduino .es2 {color: #660099; font-weight: bold;} .arduino .es3 {color: #660099; font-weight: bold;} .arduino .es4 {color: #660099; font-weight: bold;} .arduino .es5 {color: #006699; font-weight: bold;} .arduino .br0 {color: #000000;} .arduino .sy0 {color: #000000;} .arduino .st0 {color: #0066CC;} .arduino .nu0 {color: #000000;} .arduino .nu6 {color: #208080;} .arduino .nu8 {color: #208080;} .arduino .nu12 {color: #208080;} .arduino .nu16 {color:#800080;} .arduino .nu17 {color:#800080;} .arduino .nu18 {color:#800080;} .arduino .nu19 {color:#800080;} .arduino .me1 {color: #ff1493;} .arduino .me2 {color: #ff1493;} .arduino span.xtra { display:block; } .sourceblocklink { text-align: right; font-size: smaller; } .sourceblocktext { padding: 0.5em; color: #000000; background-color: #ffffff; } .sourceblocktext div { font-family: monospace; font-size: small; line-height: 1; height: 1%; } .sourceblocktext div.head, .sourceblocktext div.foot { font: italic medium serif; padding: 0.5em; } --></style> <meta name='robots' content='index,follow' /> <meta name="verify-v1" content="TtxFIEJAB6zdJ509wLxjnapQzKAMNm9u0Wj4ho6wxIY=" /> </head> <body> <div id="page"> <!--PageHeaderFmt--> <div id="pageheader"> <div class="title"><a href='http://arduino.cc/en'>Arduino</a></div> </div> <!--/PageHeaderFmt--> <!--PageLeftFmt--> <div id="pagenav"> <div id="navbar"> <p><a class='wikilink' href='http://arduino.cc/en/Main/Buy'>Buy</a> <a class='wikilink' href='http://arduino.cc/en/Main/Software'>Download</a> <a class='wikilink' href='Guide_index.html'>Getting Started</a> <a class='wikilink' href='http://arduino.cc/en/Tutorial/HomePage'>Learning</a> <a class='wikilink' href='index.html'>Reference</a> <a class='wikilink' href='http://arduino.cc/en/Main/Hardware'>Hardware</a> <a class='wikilink' href='FAQ.html'>FAQ</a> </p> <p class='vspace'></p> </div> </div> <!--/PageLeftFmt--> <div id="pagetext"> <!--PageText--> <div id='wikitext'> <p><strong>Reference</strong> <a class='wikilink' href='index.html'>Language</a> | <a class='wikilink' href='Libraries.html'>Libraries</a> | <a class='wikilink' href='Comparison.html'>Comparison</a> | <a class='wikilink' href='Changes.html'>Changes</a> </p> <p class='vspace'></p><p><a class='wikilink' href='MouseKeyboard.html'>Mouse</a> </p> <p class='vspace'></p><h2>Mouse.move()</h2> <h4>Description</h4> <p>Moves the cursor on a connected computer. The motion onscreen is always relative to the cursor's current location. Before using Mouse.move() you must call <a class='wikilink' href='MouseBegin.html'>Mouse.begin</a>() </p> <p class='vspace'></p><p>WARNING: When you use the Mouse.move() command, the Arduino takes over your mouse! Make sure you have control before you use the command. A pushbutton to toggle the mouse control state is effective. </p> <p class='vspace'></p><h4>Syntax</h4> <p>Mouse.move(xVal, yPos, wheel); </p> <p class='vspace'></p><h4>Parameters</h4> <p>xVal: amount to move along the x-axis - <em>int</em><br />yVal: amount to move along the y-axis - <em>int</em><br />wheel: amount to move scroll wheel - <em>int</em><br /> </p><h4>Returns</h4> <p>nothing </p> <p class='vspace'></p><h3>Example:</h3> <p> <div class='sourceblock ' id='sourceblock1'> <div class='sourceblocktext'><div class="arduino">const <span class="kw1">int</span> xAxis <span class="sy0">=</span> A1<span class="sy0">;</span> <span class="co1">//analog sensor for X axis </span><br /> const <span class="kw1">int</span> yAxis <span class="sy0">=</span> A2<span class="sy0">;</span> <span class="co1">// analog sensor for Y axis</span><br /> <br /> <span class="kw1">int</span> range <span class="sy0">=</span> <span class="nu0">12</span><span class="sy0">;</span> <span class="co1">// output range of X or Y movement</span><br /> <span class="kw1">int</span> responseDelay <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span> <span class="co1">// response delay of the mouse, in ms</span><br /> <span class="kw1">int</span> threshold <span class="sy0">=</span> range<span class="sy0">/</span><span class="nu0">4</span><span class="sy0">;</span> <span class="co1">// resting threshold</span><br /> <span class="kw1">int</span> center <span class="sy0">=</span> range<span class="sy0">/</span><span class="nu0">2</span><span class="sy0">;</span> <span class="co1">// resting position value</span><br /> <span class="kw1">int</span> minima<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">{</span> <br /> <span class="nu0">1023</span><span class="sy0">,</span> <span class="nu0">1023</span><span class="br0">}</span><span class="sy0">;</span> <span class="co1">// actual analogRead minima for {x, y}</span><br /> <span class="kw1">int</span> maxima<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">{</span><br /> <span class="nu0">0</span><span class="sy0">,</span><span class="nu0">0</span><span class="br0">}</span><span class="sy0">;</span> <span class="co1">// actual analogRead maxima for {x, y}</span><br /> <span class="kw1">int</span> axis<span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">{</span><br /> xAxis<span class="sy0">,</span> yAxis<span class="br0">}</span><span class="sy0">;</span> <span class="co1">// pin numbers for {x, y}</span><br /> <span class="kw1">int</span> mouseReading<span class="br0">[</span><span class="nu0">2</span><span class="br0">]</span><span class="sy0">;</span> <span class="co1">// final mouse readings for {x, y}</span><br /> <br /> <br /> <span class="kw1">void</span> <span class="kw3">setup</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><br /> Mouse.<span class="kw1">begin</span><span class="br0">(</span><span class="br0">)</span><span class="sy0">;</span><br /> <span class="br0">}</span><br /> <br /> <span class="kw1">void</span> <span class="kw3">loop</span><span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><br /> <br /> <span class="co1">// read and scale the two axes:</span><br /> <span class="kw1">int</span> xReading <span class="sy0">=</span> readAxis<span class="br0">(</span><span class="nu0">0</span><span class="br0">)</span><span class="sy0">;</span><br /> <span class="kw1">int</span> yReading <span class="sy0">=</span> readAxis<span class="br0">(</span><span class="nu0">1</span><span class="br0">)</span><span class="sy0">;</span><br /> <br /> <span class="co1">// move the mouse:</span><br /> Mouse.<span class="me1">move</span><span class="br0">(</span>xReading<span class="sy0">,</span> yReading<span class="sy0">,</span> <span class="nu0">0</span><span class="br0">)</span><span class="sy0">;</span><br /> <span class="kw1">delay</span><span class="br0">(</span>responseDelay<span class="br0">)</span><span class="sy0">;</span><br /> <span class="br0">}</span><br /> <br /> <span class="coMULTI">/*<br /> reads an axis (0 or 1 for x or y) and scales the <br /> analog input range to a range from 0 to <range><br /> */</span><br /> <br /> <span class="kw1">int</span> readAxis<span class="br0">(</span><span class="kw1">int</span> axisNumber<span class="br0">)</span> <span class="br0">{</span><br /> <span class="kw1">int</span> distance <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="co1">// distance from center of the output range</span><br /> <br /> <span class="co1">// read the analog input:</span><br /> <span class="kw1">int</span> reading <span class="sy0">=</span> <span class="kw1">analogRead</span><span class="br0">(</span>axis<span class="br0">[</span>axisNumber<span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span><br /> <br /> <span class="co1">// of the current reading exceeds the max or min for this axis,</span><br /> <span class="co1">// reset the max or min:</span><br /> <span class="kw1">if</span> <span class="br0">(</span>reading <span class="sy0"><</span> minima<span class="br0">[</span>axisNumber<span class="br0">]</span><span class="br0">)</span> <span class="br0">{</span><br /> minima<span class="br0">[</span>axisNumber<span class="br0">]</span> <span class="sy0">=</span> reading<span class="sy0">;</span><br /> <span class="br0">}</span><br /> <span class="kw1">if</span> <span class="br0">(</span>reading <span class="sy0">></span> maxima<span class="br0">[</span>axisNumber<span class="br0">]</span><span class="br0">)</span> <span class="br0">{</span><br /> maxima<span class="br0">[</span>axisNumber<span class="br0">]</span> <span class="sy0">=</span> reading<span class="sy0">;</span><br /> <span class="br0">}</span><br /> <br /> <span class="co1">// map the reading from the analog input range to the output range:</span><br /> reading <span class="sy0">=</span> <span class="kw1">map</span><span class="br0">(</span>reading<span class="sy0">,</span> minima<span class="br0">[</span>axisNumber<span class="br0">]</span><span class="sy0">,</span> maxima<span class="br0">[</span>axisNumber<span class="br0">]</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> range<span class="br0">)</span><span class="sy0">;</span><br /> <br /> <span class="co1">// if the output reading is outside from the</span><br /> <span class="co1">// rest position threshold, use it:</span><br /> <span class="kw1">if</span> <span class="br0">(</span><span class="kw1">abs</span><span class="br0">(</span>reading <span class="sy0">-</span> center<span class="br0">)</span> <span class="sy0">></span> threshold<span class="br0">)</span> <span class="br0">{</span><br /> distance <span class="sy0">=</span> <span class="br0">(</span>reading <span class="sy0">-</span> center<span class="br0">)</span><span class="sy0">;</span><br /> <span class="br0">}</span> <br /> <br /> <span class="co1">// the Y axis needs to be inverted in order to </span><br /> <span class="co1">// map the movemment correctly:</span><br /> <span class="kw1">if</span> <span class="br0">(</span>axisNumber <span class="sy0">==</span> <span class="nu0">1</span><span class="br0">)</span> <span class="br0">{</span><br /> distance <span class="sy0">=</span> <span class="sy0">-</span>distance<span class="sy0">;</span><br /> <span class="br0">}</span><br /> <br /> <span class="co1">// return the distance for this axis:</span><br /> <span class="kw1">return</span> distance<span class="sy0">;</span><br /> <span class="br0">}</span></div></div> <div class='sourceblocklink'><a href='#' type='text/plain'>[Get Code]</a></div> </div> </p> <p class='vspace'></p><h4>See also</h4> <ul><li><a class='wikilink' href='MouseBegin.html'>Mouse.begin</a>() </li><li><a class='wikilink' href='MouseClick.html'>Mouse.click</a>() </li><li><a class='wikilink' href='MouseEnd.html'>Mouse.end</a>() </li><li><a class='wikilink' href='MousePress.html'>Mouse.press</a>() </li><li><a class='wikilink' href='MouseRelease.html'>Mouse.release</a>() </li><li><a class='wikilink' href='MouseIsPressed.html'>Mouse.isPressed</a>() </li></ul><p><a class='wikilink' href='index.html'>Reference Home</a> </p> <p class='vspace'></p><p><em>Corrections, suggestions, and new documentation should be posted to the <a class='urllink' href='http://arduino.cc/forum/index.php/board,23.0.html' rel='nofollow'>Forum</a>.</em> </p> <p class='vspace'></p><p>The text of the Arduino reference is licensed under a <a class='urllink' href='http://creativecommons.org/licenses/by-sa/3.0/' rel='nofollow'>Creative Commons Attribution-ShareAlike 3.0 License</a>. Code samples in the reference are released into the public domain. </p> </div> </div> <!--PageFooterFmt--> <div id="pagefooter"> ©Arduino | <a href='#'>Edit Page</a> | <a href='#'>Page History</a> | <a href='#' target='_blank'>Printable View</a> | <a href='http://arduino.cc/en/Site/AllRecentChanges'>All Recent Site Changes</a> </div> <!--/PageFooterFmt--> </div> </body> </html>