Arduino IDEの使い方【LEDを光らせよう(Lチカ)】

Arduino NANO V3でLEDをチカチカ点滅させてみよ~う。
 
最初はマイコンボード上のD13ピンにつながっているLEDをチカチカ点滅させるのが単純で~す。

Lチカさせるための部品たちは!?

1.絶対必要なマイコンボード?。
おらっちは小型の物が欲しかったからArduino NANO V3を選びましたが、これから電子工作する方ははんだ付け不要な使いやすいArduino UNO R3のマイコンボードが良さそうです?。
 
2.マイコンボードで色々遊ぶには・・・?
マイコンボードのD13端子に接続させているLED1個を光らせるLチカ実験の場合は特に何も買う必要はなく実験可能です?。

ですが複数のLEDを光らせる場合はマイコンボード以外にLED、抵抗器、部品を設置するブレッドボード、端子同士を接続させるジャンパーワイヤーなどが必要になります?。

現在LED、抵抗器などをお持ちでない方はマイコンボードや他に実験できる部品などが付属させている電子工作入門キットがよさそうです??。

こちらの電子工作入門キットは、Arduino UNO R3マイコンボード、ブレッドボード、ジャンパーワイヤー、LED、抵抗器などがセットになっているのでセット買いがお得かも~??。

Lチカさせるための準備

以下の画像のようにマイコンボードをUSBケーブルを使ってパソコンさんに接続します?。
 
次は前記事でインストールしたarduino IDEを立ち上げます?。
ショートカットアイコンをダブルクリック~??。
 
はじめてマイコンボードをパソコンにUSB接続すると、ウィザード画面が開くので、インストールしたプログラムファイル内のArduinoのフォルダの中にある「drivers」というフォルダ指定してくださちゃいです?。
 
実行すると勝手にドライバーがインストールされます?注意:USBを接続する前にArduino IDEをインストールしてくださいです。CH340のチップの場合は別にドライバーをインストールする必要があります?。

プログラムを買いし!?いや開始~

Arduino IDEが立ち上がると同じみのこの画面が?。
 
上記からプログラムをこんな風に書きますです✍Arduinoで使う関数、定数などはここで詳しく説明されてますよ?。
 
次はパソコンとArduinoマイコンボードとの通信であるシリアルポートのCOMポート番号を設定しまっちゅ?✋。
どのCOMポートがArduinoで使われているのかわからない場合はデバイスマネージャを開らくとわかります?。
 
ポート(COM、LPT)を開いて確認✋。
 
私のNANO V3は代替チップのCH340になっていますが、通常はArduino ***と書かれているポートを上記のシリアルポートで選択するみたいです☺。
 
次にマイコンボードのボード設定をします。おらっちのはNANO V3ですが購入されたボードに合わせて選択すればOKみたいです?。
 
はてはてやっとプログラム(スケッチ)を書き込める準備ができたのでオレンジ点枠の部分をクリックするとマイコンボードにスケッチが書き込まれます✍?。
 
やっほ~っと無事にマイコンボードにスケッチが書き込みされました✍?。
 
ほい?こんな感じにLEDが点滅してるです?単純でしょ♪。
こちらは複数のLEDをブレッドボードに設置して、オチンコやではなくパチンコ屋のように面白く光らせてみちゃった動画です~?。
 
じわっとプログラムコード
/* -------------------------------------------------- */
 * Lchika Program                                     *
 * -------------------------------------------------- *
 *        CPU: Arduino NANO V3 CPU Board              *
 * C Compiler: GCC WINAVR                             *
 *  File Name:                                        *
 *     Author: March                                  *
 *    Created: 2017/10/27                             *
 *        URL: http://super-evolution.com/            *
/ --------------------------------------------------- */

/* ----------------------------------------- *
 * Define                                    *
/ ------------------------------------------ */
#define LED_ON_STEP       (true)
#define LED_OFF_STEP      (false)

#define INTRRUPTCUT_ON \
  noInterrupts( ); LedPwmCount100us = 0; LedInterruptControl = false; interrupts( )
#define INTRRUPTCUT_OFF \
  noInterrupts( ); LedPwmCount100us = 0; LedInterruptControl = true; interrupts( )
#define LED_SETUP \
  noInterrupts( ); PortNunmer = Portpin; LedPwmCount100usDuty = Duty; interrupts( )
  
/* ----------------------------------------- *
/ Variable                                   *
/ ------------------------------------------ */
unsigned char   LedPwmCount100us      = 0;
unsigned char   LedPwmCount100usFrzq  = 100;
unsigned char   LedPwmCount100usDuty  = 0;
unsigned char   PortNunmer = 0;
boolean         LedInterruptControl = false;

/* ------------------------------------------------ *
/ Program Code                                      *
/ ------------------------------------------------- */

/* ----------------------------------------- *
/ タイマー0 100ms割込                        *
/ ------------------------------------------ */
ISR( TIMER2_COMPA_vect, ISR_BLOCK )
{
  static unsigned char DutyBuff, PortBuff;
  
  if( LedInterruptControl == false ){ return; }
  
  if( LedPwmCount100us == 0 ){
    DutyBuff = LedPwmCount100usDuty;
    PortBuff = PortNunmer;
  }
  
  if( LedPwmCount100us > LedPwmCount100usFrzq ){
    LedPwmCount100us = 0;
    if( DutyBuff == 0 ){ digitalWrite(PortBuff, LOW); }
    else{ digitalWrite(PortBuff, HIGH); }
  } else if( LedPwmCount100us > DutyBuff ){
    digitalWrite(PortBuff, LOW);
    LedPwmCount100us++;
  } else{
    LedPwmCount100us++;
  }
  
  return;
}

/* ----------------------------------------- *
/ Zinwari On PWM Control Program             *
/ ------------------------------------------ */
static void ZinwariLedControl(
    uint8_t Portpin, boolean Singflg, uint8_t Pwmvalue, uint16_t Steptime, uint16_t Maxtime )
{
  if( Singflg == LED_ON_STEP )
  {
    for(int8_t Duty=0; Duty<Pwmvalue; Duty++){
      LED_SETUP;
      if( Duty == Pwmvalue ){ delay( Maxtime ); INTRRUPTCUT_ON; }
      else{ INTRRUPTCUT_OFF; delay( Steptime ); }
    }
    digitalWrite(Portpin, HIGH);
  }
  else
  {
    for(int8_t Duty=Pwmvalue; -1<Duty; Duty--){
      LED_SETUP;
      if( Duty == 0 ){ delay( Maxtime );  INTRRUPTCUT_ON; }
      else{ INTRRUPTCUT_OFF; delay( Steptime ); }
    }
    digitalWrite(Portpin, LOW);
  }
  
  return;
}

/* ----------------------------------------- *
/ Start Up SetUp Progam                      *
/ ------------------------------------------ */
void setup( )
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  
  // TIMER2 WaitTimer 10KHz(100us)設定
  TCNT2     = 0x00;
  OCR2A     = (25-1);       // FREQ値
  TCCR2A    = 0b00000010;   // 比較一致タイマ/カウンタ解除(CTC)動作
  TIFR2     = 0b00000010;   // TIMER0 FLG=0
  TIMSK2    = 0b00000010;   // TIMER0 割り込み許可
  TCCR2B    = 0b00000100;   // TIMER0 START(4us) / 64

  return;
}

/* ----------------------------------------- *
/ Main Loop                                  *
/  ----------------------------------------- */
void loop( )
{
  // ジワットLED点滅
  ZinwariLedControl(
    2,         // ポート番号
    LED_ON_STEP,// 点灯選択
    100,        // 最大PWM値(最大100%)
    3,          // 1ステップの変化時間
    10          // LO&最大PWM値時の一定保持時間
  );
  ZinwariLedControl( 3, LED_ON_STEP,  100, 3, 10 );
  ZinwariLedControl( 4, LED_ON_STEP,  100, 3, 10 );
  ZinwariLedControl( 5, LED_ON_STEP,  100, 3, 10 );
  ZinwariLedControl( 6, LED_ON_STEP,  100, 3, 10 );

  ZinwariLedControl( 2, LED_OFF_STEP, 100, 1, 10 );
  ZinwariLedControl( 3, LED_OFF_STEP, 100, 1, 10 );
  ZinwariLedControl( 4, LED_OFF_STEP, 100, 1, 10 );
  ZinwariLedControl( 5, LED_OFF_STEP, 100, 1, 10 );
  ZinwariLedControl( 6, LED_OFF_STEP, 100, 1, 10 );
  delay( 100 );
  
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  delay( 400 );
  
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, HIGH);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(6, LOW);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  delay( 400 );

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  delay( 500 );
}
おまけのどうだぁパンツではなく動画です?。
中々面白かったでごじゃる~でニンニン。