<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=Arduino%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%BE%85%E6%A9%9F%E3%81%A8%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC</id>
	<title>Arduinoの基礎 - 待機と時間計測 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=Arduino%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%BE%85%E6%A9%9F%E3%81%A8%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Arduino%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%BE%85%E6%A9%9F%E3%81%A8%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC&amp;action=history"/>
	<updated>2026-09-08T01:56:04Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=Arduino%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%BE%85%E6%A9%9F%E3%81%A8%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC&amp;diff=12800&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == Arduinoにおいて、delay関数およびmillis関数は、以下に示すように区別される。&lt;br&gt; &lt;br&gt; * delay関数 *: プログラムの実行を一時停止させる待機関数。 * millis関数 *: 待機時間を計測するための時間計測関数 *: ただし、millis関数は待機を行わない。 &lt;br&gt;&lt;br&gt;  == delay関数とmillis関数の違い == ==== delay関数のデメリット ==== * ブロッキング処理 *: delay関数を…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=Arduino%E3%81%AE%E5%9F%BA%E7%A4%8E_-_%E5%BE%85%E6%A9%9F%E3%81%A8%E6%99%82%E9%96%93%E8%A8%88%E6%B8%AC&amp;diff=12800&amp;oldid=prev"/>
		<updated>2024-12-24T02:15:29Z</updated>

		<summary type="html">&lt;p&gt;ページの作成:「== 概要 == Arduinoにおいて、delay関数およびmillis関数は、以下に示すように区別される。&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; * delay関数 *: プログラムの実行を一時停止させる待機関数。 * millis関数 *: 待機時間を計測するための時間計測関数 *: ただし、millis関数は待機を行わない。 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;  == delay関数とmillis関数の違い == ==== delay関数のデメリット ==== * ブロッキング処理 *: delay関数を…」&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 概要 ==&lt;br /&gt;
Arduinoにおいて、delay関数およびmillis関数は、以下に示すように区別される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* delay関数&lt;br /&gt;
*: プログラムの実行を一時停止させる待機関数。&lt;br /&gt;
* millis関数&lt;br /&gt;
*: 待機時間を計測するための時間計測関数&lt;br /&gt;
*: ただし、millis関数は待機を行わない。&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== delay関数とmillis関数の違い ==&lt;br /&gt;
==== delay関数のデメリット ====&lt;br /&gt;
* ブロッキング処理&lt;br /&gt;
*: delay関数を使用する場合、その間は他の処理が一切実行できない。&lt;br /&gt;
*: 例えば、delay(1000)を実行する場合は1秒間プログラムが完全に停止する。&lt;br /&gt;
*: &amp;lt;br&amp;gt;&lt;br /&gt;
* マルチタスクの困難さ&lt;br /&gt;
*: 複数のアニメーションを同時に動かす場合は対応できない。&lt;br /&gt;
*: ボタン入力等の他の処理も受け付けられない。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== millis関数のメリット ====&lt;br /&gt;
* ノンブロッキング処理&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 unsigned long previousMillis = 0;&lt;br /&gt;
 const long interval = 1000;  // 1秒間隔&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
    unsigned long currentMillis = millis();&lt;br /&gt;
 &lt;br /&gt;
    if (currentMillis - previousMillis &amp;gt;= interval) {&lt;br /&gt;
       previousMillis = currentMillis;&lt;br /&gt;
 &lt;br /&gt;
       // アニメーション更新処理&lt;br /&gt;
       updateAnimation();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // 他の処理も並行して実行可能&lt;br /&gt;
    checkButtonPress();&lt;br /&gt;
    updateOtherAnimations();&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* 複数のタイミング制御&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
 unsigned long prevMillisAnim1 = 0;&lt;br /&gt;
 unsigned long prevMillisAnim2 = 0;&lt;br /&gt;
 &lt;br /&gt;
 const long intervalAnim1 = 50;   // 50[ms]間隔&lt;br /&gt;
 const long intervalAnim2 = 100;  // 100[ms]間隔&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
    unsigned long currentMillis = millis();&lt;br /&gt;
 &lt;br /&gt;
    // アニメーション1の更新&lt;br /&gt;
    if (currentMillis - prevMillisAnim1 &amp;gt;= intervalAnim1) {&lt;br /&gt;
       prevMillisAnim1 = currentMillis;&lt;br /&gt;
       updateAnimation1();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    // アニメーション2の更新&lt;br /&gt;
    if (currentMillis - prevMillisAnim2 &amp;gt;= intervalAnim2) {&lt;br /&gt;
       prevMillisAnim2 = currentMillis;&lt;br /&gt;
       updateAnimation2();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* 正確なタイミング制御&lt;br /&gt;
*: delay関数は処理時間による誤差が蓄積されやすい。&lt;br /&gt;
*: millis関数は実際の経過時間に基づいて制御することが可能。&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
特に、アニメーションや複数の処理を同時に行う場合は、&amp;lt;code&amp;gt;millis&amp;lt;/code&amp;gt;関数を使用することが推奨される。&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki&lt;br /&gt;
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板&lt;br /&gt;
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux&lt;br /&gt;
|image=/resources/assets/MochiuLogo_Single_Blue.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
[[カテゴリ:Arduino]]&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
	</entry>
</feed>