検索コード

レッスン14/31-5: Arduinoコーディング map() 例2

レッスン14/31-5: Arduinoコーディング map() 例2

このチュートリアルでは、Arduinoのmap()関数を使用して、analogWrite()で必要な生の0〜255の範囲ではなく、パーセント値(0〜100%)を使ってLEDの明るさを制御する方法を説明します。これは、任意のバイト値ではなくパーセントで考えることができるため、コードを簡素化し、はるかに直感的にする基本的なテクニックです。

組み立て済みのSunfounderカー

このスキルは、センサーの読み取り値や制御信号をスケーリングする必要があるあらゆるプロジェクトに不可欠です。例えば、次のような用途に使用できます:

  • ポテンショメータの読み取り値に基づいてLEDの明るさやモーターの速度を制御する。
  • 温度センサーの出力(例:0〜1023)を摂氏または華氏の範囲に変換する。
  • ジョイスティックのアナログ入力をマッピングしてサーボモーターの位置を制御する。
  • パーセント値を使用してデバイスの電力レベルを設定するシンプルなユーザーインターフェースを作成する。

このレッスンの終わりまでに、読みやすく調整しやすい、よりクリーンで保守しやすいコードを書けるようになります。

ハードウェア/部品

このプロジェクトは最小限の部品セットを使用するため、初心者に最適です。必要なものは次のとおりです:

  • Arduinoボード(例:Uno)。
  • LED。
  • 220オームの抵抗。
  • ジャンパーワイヤー。
  • ブレッドボード(任意ですが推奨)。

配線ガイド

このプロジェクトの配線は、ビデオ(ビデオの20:47)で示されているように非常に簡単です。LEDは220オームの電流制限抵抗を介してArduinoのピン3に接続されています。

LEDのアノード(長い方の脚)を抵抗を介してピン3に接続します。LEDのカソード(短い方の脚)をArduinoのグランド(GND)ピンに接続します。

コードの説明

この例では、LEDの明るさの制御を簡素化するユーザー定義関数に焦点を当てています。コードは、コードを直感的にする鍵となるpwmValue()というカスタム関数を中心に構築されています。

コードの設定可能な部分を分解してみましょう:

int LEDpin = 3; //LED用のピンを定義

この行は、LEDが接続されているArduinoピンを定義します。数字の3は、ArduinoボードのPWM対応ピンであれば他の番号に変更できます。

プロジェクトの核心は、カスタム関数pwmValue()です。この関数は入力としてパーセント値を受け取り、analogWrite()で使用される0〜255の範囲に変換します。ここでmap()関数がその役割を果たします。

int pwmValue(int percent)
{
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
}

この関数を使用するには、希望する明るさのパーセントを指定して呼び出すだけです。関数はanalogWrite()に適した値を返します。例えば、pwmValue(60)153を返します。これは255の60%に相当します。この関数には、入力パーセントが0〜100の範囲内であることを確認する安全チェックも含まれており、範囲外の場合は0を返します。

setup()関数では、これがどのように使用されるかを確認できます:

int b=5;//60%の明るさ
Serial.println( pwmValue(b)   );//シリアルモニターに出力
analogWrite(LEDpin, pwmValue(b));// LEDを60%の明るさで点灯

ここで、変数bは希望する明るさのパーセントに設定されています。関数pwmValue(b)は、マッピングされた値をシリアルモニターに出力するためと、LEDの明るさを設定するために使用されます。LEDの明るさを変更するには、bの値を変更するだけです。map()関数が必要な計算をすべて処理します。

ライブプロジェクト/デモンストレーション

ビデオでは、発表者がb変数の値を変更してコードをArduinoにアップロードすることでプロジェクトをデモンストレーションしています。b60に設定されている場合、コードはそれを153にマッピングし、LEDは60%の明るさで点灯します。b90に変更すると229にマッピングされ、LEDが著しく明るくなります。100に設定すると255にマッピングされ、最大の明るさになります。このデモンストレーションは、map()関数を使用して直感的なパーセント値でLEDを制御できる方法を明確に示しており、シリアルモニターはピンに送信されている正確な0〜255の値を確認します(ビデオの21:29)。

このビデオの関連プロジェクト

チャプター

  • [00:00] Millisとmap関数の紹介
  • [01:19] Millisとは何か、なぜ使用するのか
  • [05:46] アクションを実行するためのイベントでのMillisの使用
  • [08:35] プッシュボタンを使用したMillisの例2
  • [12:14] 2回のボタン押下をチェックするMillisの例3
  • [17:20] map()関数の紹介
  • [19:47] パーセントをLEDの明るさにマッピングするコード例
  • [20:47] map()関数のライブデモンストレーション
  • [22:41] マッピングを処理するカスタム関数の作成

画像

Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
Sunfounder car assembled
920-Lesson 14/31-5: Arduino coding map() example 2
言語: C++
/*
Lesson 14/31-5: Arduino coding map( ) example-2
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
 
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been download from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
int LEDpin = 3; //defind pin for LED
                   
 
 void setup() {
    Serial.begin(9600);//initialzie serial monitor with 9600 baud
    pinMode(LEDpin, OUTPUT);//set pin as output
    int b=5;//60% brightness

    Serial.println( pwmValue(b)   );//print it on serial monitor
    analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness   
 }

 void loop() {

 
 }

/*
 * pwmValue(int percent)
 * @param precent is value between 0 to 100
 * @return it returns the mapped value from 0 to 255
 * written by Ahmad Shamshiri on Dec 9, 2022
 * 
 */
 int pwmValue(int percent)
 {
  if(percent >=0 && percent <=100)
  {
    return map(percent, 0,100,  0,255);
  }else
  {
    return 0;
  }
 } //pwmValue end
 

リソースと参考文献

ファイル📁

ユーザーマニュアル