به نام خدا

<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>تشخیص تغییر وضعیت کلید (تشخیص لبه)</h3> <p> زمانی که با یک

<a class="wikilink" href="http://arduino.ir/Tutorial/Button">کلید فشاری</a> کار می کنید، اغلب احتیاج دارید که برخی عملیات ها را بر اساس این که کلید چند بار فشرده شده است، انجام دهید. جهت انجام این کار، لازم است بدانید وضعیت کلید چه زمانی از حالت off به حالت on تغییر کرده است، و تعداد دفعاتی که این تغییر وضعیت اتفاق افتاده است را بشمارید.

این عمل را <strong> تشخیص تغییر وضعیت </strong> یا <strong>تشخیص لبه </strong> می نامیم. </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><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> <p> سه عدد سیم را به برد آردوینو متصل کنید. نخستین سیم توسط یک مقاومت pull-down (در اینجا 10 کیلو اهمی) از یک پایه کلید فشاری، به زمین می رود. سیم دوم، به یک پین ورودی/خروجی دیجیتال (در اینجا پین 2) متصل می شود. این پین وضعیت کلید را می خواند.

 </p>

<p class="vspace"></p> <p> زمانی که کلید فشاری باز (فشرده نشده) است، هیچ اتصالی بین دو پایه کلید فشاری وجود ندارد. بنابراین پین (از طریق یک مقاومت pull-down) به زمین متصل است. و ما آن را LOW می خوانیم. زمانی که کلید بسته (فشرده) است، اتصالی را بین دو پایه خود ایجاد می کند و پین به ولتاژ وصل می شود. بدین ترتیب ما یک ورودی HIGH را می خوانیم. (پین همچنان به زمین متصل است، اما مقاومت در برابر جریان جاری مقاومت می کند، بنابراین مسیر حداقل مقاومت به سمت +5 ولت است.)

so the path of least resistance is to +5V.) </p> <p class="vspace"></p> <p> اگر شما پین ورودی/خروجی دیجیتال را از همه جا قطع کنید، LED به طور بی نظم چشمک می زند. این رویداد به این دلیل است که ورودی شناور است - به این معنی که به ولتاژ یا زمین وصل نیست. این پین به طور تصادفی HIGH یا LOW را بر می گرداند. به همین دلیل است که شما به یک مقاومت pull-dwn در مدار نیاز دارید.

 </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> <p> اسکچ زیر، به طور پیوسته وضعیت کلید را می خواند. سپس وضعیت کلید را با وضعیتش در آخرین زمان در تابع Loop برنامه مقایسه می کند. اگر وضعیت کنونی کلید با آخرین وضعیت آن متفاوت بود و وضعیت کنونی کلید HIGH بود، کلید از وضعیت خاموش به وضعیت روشن در می آید. سپس اسکچ شمارنده کلید فشاری (buttonPushCounter) را افزایش می دهد. </p> <p class="vspace"></p> <p> به علاوه، اسکچ مقدار شمارنده را چک می کند، و اگر مقدار آن یکی از مضارب عدد چهار بود، LED متصل به پین 13 را روشن می کند. در غیر این صورت، آن را خاموش می نماید.

 </p>

<p class="vspace"></p> <h3>کد</h3> <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 />

  State change detection (edge detection)<br />     <br />  Often, you don't need to know the state of a digital input all the time,<br />  but you just need to know when the input changes from one state to another.<br />  For example, you want to know when a button goes from OFF to ON.  This

				is called<br />

 state change detection, or edge detection.<br />  <br />  This example shows how to detect when a button or button changes from off

				to on<br />

 and on to off.<br />     <br />  The circuit:<br />  * pushbutton attached to pin 2 from +5V<br />  * 10K resistor attached to pin 2 from ground<br />  * LED attached from pin 13 to ground (or use the built-in LED on<br />    most Arduino boards)<br />  <br />  created  27 Sep 2005<br />  modified 30 Aug 2011<br />  by Tom Igoe<br />

				<br />
				This example code is in the public domain.<br />

    <br />  http://arduino.ir/Tutorial/ButtonStateChange<br />  <br />  */</span><br />

				<br />
				<span class="co1">// this constant won't change:</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 pin that the pushbutton is attached to</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 pin that the LED is attached to</span><br />
				<br />
				<span class="co1">// Variables will change:</span><br />
				<span class="kw1">int</span> buttonPushCounter <span class="sy0">
				=</span> <span class="nu0">0</span><span class="sy0">;</span>  
				<span class="co1">// counter for the number of button presses</span><br />
				<span class="kw1">int</span> buttonState <span class="sy0">=</span>
				<span class="nu0">0</span><span class="sy0">;</span>        
				<span class="co1">// current state of the button</span><br />
				<span class="kw1">int</span> lastButtonState <span class="sy0">=</span>
				<span class="nu0">0</span><span class="sy0">;</span>    
				<span class="co1">// previous state of the button</span><br />
				<br />
				<span class="kw1">void</span> <span class="kw3">setup</span><span class="br0">()</span>
				<span class="br0">{</span><br />

  <span class="co1">// initialize the button pin as a input:</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="co1">// initialize the LED as an output:</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 />

  <span class="co1">// initialize serial communication:</span><br />   <span class="kw1">Serial</span>.<span class="kw1">begin</span><span class="br0">(</span><span class="nu0">9600</span><span class="br0">)</span><span class="sy0">;</span><br />

				<span class="br0">}</span><br />
				<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 pushbutton input pin:</span><br />   buttonState <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">// compare the buttonState to its previous state</span><br />   <span class="kw1">if</span> <span class="br0">(</span>buttonState

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

    <span class="co1">// if the state has changed, increment the

				counter</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 />

      <span class="co1">// if the current state is HIGH

				then the button</span><br />

      <span class="co1">// wend from off to on:</span><br />       buttonPushCounter<span class="sy0">++;</span><br />       <span class="kw1">Serial</span>.<span class="kw1">println</span><span class="br0">(</span><span class="st0">"on"</span><span class="br0">)</span><span class="sy0">;</span><br />       <span class="kw1">Serial</span>.<span class="kw1">print</span><span class="br0">(</span><span class="st0">"number

				of button pushes:  "</span><span class="br0">)</span><span class="sy0">;</span><br />

      <span class="kw1">Serial</span>.<span class="kw1">println</span><span class="br0">(</span>buttonPushCounter<span class="br0">)</span><span class="sy0">;</span><br />     <span class="br0">}</span> <br />     <span class="kw1">else</span> <span class="br0">{</span><br />       <span class="co1">// if the current state is LOW

				then the button</span><br />

      <span class="co1">// wend from on to off:</span><br />       <span class="kw1">Serial</span>.<span class="kw1">println</span><span class="br0">(</span><span class="st0">"off"</span><span class="br0">)</span><span class="sy0">;</span>

				<br />

    <span class="br0">}</span><br />   <span class="br0">}</span><br />   <span class="co1">// save the current state as the last state, </span>

				<br />

  <span class="co1">//for next time through the loop</span><br />   lastButtonState <span class="sy0">=</span> buttonState<span class="sy0">;</span><br />

				<br />

  <br />   <span class="co1">// turns on the LED every four button pushes by </span>

				<br />

  <span class="co1">// checking the modulo of the button push counter.</span><br />   <span class="co1">// the modulo function gives you the remainder of

				</span><br />

  <span class="co1">// the division of two numbers:</span><br />   <span class="kw1">if</span> <span class="br0">(</span>buttonPushCounter

				<span class="sy0">%</span> <span class="nu0">4</span>
				<span class="sy0">==</span> <span class="nu0">0</span><span class="br0">)</span>
				<span class="br0">{</span><br />

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

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

  <span class="br0">}</span> <span class="kw1">else</span>

				<span class="br0">{</span><br />

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

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

  <span class="br0">}</span><br />   <br />

				<span class="br0">}</span></div>
		</div>
		<br>
		<br>
		<div class="sourceblocklink" align="left" dir="ltr">
			<a href="http://arduino.cc/en/Tutorial/ButtonStateChange?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/BlinkWithoutDelay">BlinkWithoutDelay</a> 
	- چشمک زدن یک چراغ بدون استفاده از تابع <span dir="ltr"> delay() </span> . 
 </li>
	<li><a class="wikilink" href="http://arduino.ir/Tutorial/Blink">Blink</a> 
	- یک LED را روشن و خاموش کنید.
 </li>

</ul> </div>