به نام خدا

<p><strong>آموزش</strong> <a class="wikilink" href="http://arduino.ir/Tutorial"> مثال ها</a> | <a class="wikilink" href="http://arduino.ir/Tutorial/Foundations"> اطلاعات پایه</a> | <a class="wikilink" href="http://arduino.ir/Hacking">فوت وفن ها</a> | <a class="wikilink" href="http://arduino.ir/Tutorial/Links">پیوندها</a> </p> <p class="vspace"></p> <p><em>Examples > Digital I/O</em> </p> <p class="vspace"></p> <h3>Debounce</h3> <p>این مثال شرح می دهد که چطور یک ورودی را <strong>--- (debounce)</strong> کنیم، مفهوم Debounce این است که جهت حصول اطمینان از اینکه دکمه قطعاً فشرده شده است، ورودی را در یک دوره زمانی کوتاه دو بار بررسی کنیم. بدون انجام عمل Debounce یک بار فشردن کلید می تواند در کد به صورت چندبار فشردن تشخیص داده شود. از تابع millis() جهت رهگیری زمان در موقعی که کلید فشرده شده است، استفاده می شود. </p> <p class="vspace"></p> <h3>سخت افزار مورد نیاز</h3> <ul>

	<li>برد آردوینو </li>
	<li>سوییچ یا کلید دو وضعیتی </li>
	<li>مقاومت 10 کیلو اهمی </li>
	<li>بردبورد </li>
	<li>سیم بردبوردی </li>

</ul> <p class="vspace"></p> <h3>مدار</h3> <div>

	<img src=" alt=" title /></div>

<p class="vspace"></p> <p><span style="font-size:83%">این تصویر با استفاده از نرم افزار <a class="urllink" href="http://www.fritzing.org" rel="nofollow">Fritzing</a> ایجاد شده است. برای مثال های بیشتر مدار به صفحه <a class="urllink" href="http://fritzing.org/projects/" rel="nofollow">پروژه های Fritzing </a>مراجعه نمایید. </span></p> <p class="vspace"></p> <h3>شماتیک</h3> <p><span style="font-size:83%">برای بزرگ شدن تصویر روی آن کلیک کنید.</span> </p> <p class="vspace"></p> <div>

	<a class="urllink" href=" rel=nofollow">
	<img height="400px" src=" alt=" title /></a></div>

<p class="vspace"></p> <h3>کد</h3> <p>کد زیر بر اساس <a class="urllink" href="http://www.ladyada.net/learn/sensors/tilt.html" rel="nofollow"> نسخه debounce خانم Limor Fried</a> نوشته شده است، اما در واقع معکوس مثال او عمل می کند. در مثال ایشان، سوییچ زمانی که بسته است LOW ، و زمانی که باز است HIGH را بر می گرداند. اما در اینجا، زمانی که سوییچ فشرده شده است HIGH، و زمانی که فشرده نشده است LOW را بر می گرداند. </p> <p class="vspace"></p> <div class="code">

	<p class="vspace"></p>
	<p></p>
	<div class="sourceblock " id="sourceblock1">
		<div class="sourceblocktext">
			<div class="arduino" align="left" dir="ltr">
				<span class="coMULTI">/* <br />

 Debounce<br />  <br />  Each time the input pin goes from LOW to HIGH (e.g. because of a push-button<br />  press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's<br />  a minimum delay between toggles to debounce the circuit (i.e. to ignore<br />  noise).  <br />  <br />  The circuit:<br />  * LED attached from pin 13 to ground<br />  * pushbutton attached from pin 2 to +5V<br />  * 10K resistor attached from pin 2 to ground<br />  <br />  * Note: On most Arduino boards, there is already an LED on the board<br />  connected to pin 13, so you don't need any extra components for this example.<br />  <br />  <br />  created 21 November 2006<br />  by David A. Mellis<br />  modified 30 Aug 2011<br />  by Limor Fried<br />  modified 28 Dec 2012<br />  by Mike Walters<br />  <br />  This example code is in the public domain.<br />  <br />  http://www.arduino.cc/en/Tutorial/Debounce<br />  */</span><br />

				<br />
				<span class="co1">// constants won't change. They're used here to
				</span><br />
				<span class="co1">// set pin numbers:</span><br />
				const <span class="kw1">int</span> buttonPin <span class="sy0">=</span>
				<span class="nu0">2</span><span class="sy0">;</span>   
				<span class="co1">// the number of the pushbutton pin</span><br />
				const <span class="kw1">int</span> ledPin <span class="sy0">=</span>
				<span class="nu0">13</span><span class="sy0">;</span>     
				<span class="co1">// the number of the LED pin</span><br />
				<br />
				<span class="co1">// Variables will change:</span><br />
				<span class="kw1">int</span> ledState <span class="sy0">=</span>
				<span class="kw2">HIGH</span><span class="sy0">;</span>        
				<span class="co1">// the current state of the output pin</span><br />
				<span class="kw1">int</span> buttonState<span class="sy0">;</span>            
				<span class="co1">// the current reading from the input pin</span><br />
				<span class="kw1">int</span> lastButtonState <span class="sy0">=</span>
				<span class="kw2">LOW</span><span class="sy0">;</span>  
				<span class="co1">// the previous reading from the input pin</span><br />
				<br />
				<span class="co1">// the following variables are long's because 
				the time, measured in miliseconds,</span><br />
				<span class="co1">// will quickly become a bigger number than can 
				be stored in an int.</span><br />
				<span class="kw1">long</span> lastDebounceTime <span class="sy0">
				=</span> <span class="nu0">0</span><span class="sy0">;</span> 
				<span class="co1">// the last time the output pin was toggled</span><br />
				<span class="kw1">long</span> debounceDelay <span class="sy0">=</span>
				<span class="nu0">50</span><span class="sy0">;</span>   
				<span class="co1">// the debounce time; increase if the output flickers</span><br />
				<br />
				<span class="kw1">void</span> <span class="kw3">setup</span><span class="br0">()</span>
				<span class="br0">{</span><br />

  <span class="kw1">pinMode</span><span class="br0">(</span>buttonPin<span class="sy0">,</span>

				<span class="kw2">INPUT</span><span class="br0">)</span><span class="sy0">;</span><br />

  <span class="kw1">pinMode</span><span class="br0">(</span>ledPin<span class="sy0">,</span>

				<span class="kw2">OUTPUT</span><span class="br0">)</span><span class="sy0">;</span><br />
				<br />

  <span class="co1">// set initial LED state</span><br />   <span class="kw1">digitalWrite</span><span class="br0">(</span>ledPin<span class="sy0">,</span>

				ledState<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><br />

  <span class="co1">// read the state of the switch into a local variable:</span><br />   <span class="kw1">int</span> reading <span class="sy0">=</span>

				<span class="kw1">digitalRead</span><span class="br0">(</span>buttonPin<span class="br0">)</span><span class="sy0">;</span><br />
				<br />

  <span class="co1">// check to see if you just pressed the button </span>

				<br />

  <span class="co1">// (i.e. the input went from LOW to HIGH),  and you've

				waited </span><br />

  <span class="co1">// long enough since the last press to ignore any noise: 

				</span><br />
				<br />

  <span class="co1">// If the switch changed, due to noise or pressing:</span><br />   <span class="kw1">if</span> <span class="br0">(</span>reading

				<span class="sy0">!=</span> lastButtonState<span class="br0">)</span>
				<span class="br0">{</span><br />

    <span class="co1">// reset the debouncing timer</span><br />     lastDebounceTime <span class="sy0">=</span> <span class="kw1">

				millis</span><span class="br0">()</span><span class="sy0">;</span><br />

  <span class="br0">}</span> <br />   <br />   <span class="kw1">if</span> <span class="br0">((</span><span class="kw1">millis</span><span class="br0">()</span>

				<span class="sy0">-</span> lastDebounceTime<span class="br0">)</span>
				<span class="sy0">></span> debounceDelay<span class="br0">)</span>
				<span class="br0">{</span><br />

    <span class="co1">// whatever the reading is at, it's been there

				for longer</span><br />

    <span class="co1">// than the debounce delay, so take it as the

				actual current state:</span><br />
				<br />

    <span class="co1">// if the button state has changed:</span><br />     <span class="kw1">if</span> <span class="br0">(</span>reading

				<span class="sy0">!=</span> buttonState<span class="br0">)</span>
				<span class="br0">{</span><br />

      buttonState <span class="sy0">=</span> reading<span class="sy0">;</span><br />

				<br />

      <span class="co1">// only toggle the LED if the new

				button state is HIGH</span><br />

      <span class="kw1">if</span> <span class="br0">(</span>buttonState

				<span class="sy0">==</span> <span class="kw2">HIGH</span><span class="br0">)</span>
				<span class="br0">{</span><br />

        ledState <span class="sy0">=</span>

				<span class="sy0">!</span>ledState<span class="sy0">;</span><br />

      <span class="br0">}</span><br />     <span class="br0">}</span><br />   <span class="br0">}</span><br />   <br />   <span class="co1">// set the LED:</span><br />   <span class="kw1">digitalWrite</span><span class="br0">(</span>ledPin<span class="sy0">,</span>

				ledState<span class="br0">)</span><span class="sy0">;</span><br />
				<br />

  <span class="co1">// save the reading.  Next time through the loop,</span><br />   <span class="co1">// it'll be the lastButtonState:</span><br />   lastButtonState <span class="sy0">=</span> reading<span class="sy0">;</span><br />

				<span class="br0">}</span></div>
		</div>
		<br>
		<br>
		<div class="sourceblocklink" align="left" dir="ltr">
			<a href="http://arduino.cc/en/Tutorial/Debounce?action=sourceblock&num=1" type="text/plain">
			[دریافت کد]</a></div>
	</div>
	<p></p>
	<p class="vspace"></p>

</div> <p class="vspace"></p> <h3>به لینک های زیر مراجعه کنید:</h3> <ul>

	<li><a class="wikilink" href="http://arduino.ir/Reference/PinMode"><span dir="ltr">pinMode()</span></a>
	</li>
	<li><a class="wikilink" href="http://arduino.ir/Reference/DigitalWrite"><span dir="ltr">digitalWrite()</span></a>
	</li>
	<li><a class="wikilink" href="http://arduino.ir/Reference/DigitalRead"><span dir="ltr">digitalRead()</span></a>
	</li>
	<li><a class="wikilink" href="http://arduino.ir/Reference/If"><span dir="ltr">if()</span></a>
	</li>
	<li><a class="wikilink" href="http://arduino.ir/Reference/Millis"><span dir="ltr">millis()</span></a>
	<p class="vspace"></p>
	</li>
	<li>
	<a class="wikilink" href="http://arduino.ir/Tutorial/DigitalReadSerial">DigitalReadSerial</a> 
	- یک سوییچ را خوانده و وضعیت آن را به عنوان خروجی، در محیط Serial Monitor نرم 
	افزار آردوینو چاپ کنید. </li>
	<li><a class="wikilink" href="http://arduino.ir/Tutorial/Blink">Blink</a> 
	- یک LED را روشن و خاموش کنید. </li>
	<li>
	<a class="wikilink" href="http://arduino.ir/Tutorial/ButtonStateChange">Button 
	State Change</a> - شمارش تعداد فشرده شدن یک دکمه </li>

</ul> </div>