Arduino(アルドゥイーノ) のライブラリの作り方


Arduino(アルドゥイーノ) IDE には ディレイ関数, シリアル入出力関数などはすでに備わっていますが 練習のために敢えて似たような関数を作りライブラリに登録してみます。

下記にのように、Delay.h、Delay.cpp、Usart0.h、Usart0.cpp の4つのライブラリファイルを作ってみました。
作り方は普通のC++ファイル [ + オブジェクトの宣言 ] です。

登録したライブラリを使うスケッチ
電源のオン後 (リセット後) START の文字列をシリアル出力します。(9600ボー)
PORT Bのbit0 ( pin8 )につないだLEDを500mSの間隔でオンオフします。
#include <Usart0.h>
#include <Delay.h>

void setup()
{
  DDRB = 0b00000001;        /* XTAL2 XTAL1 SCK   MISO  MOSI  ----- ----- LED   */
  DDRC = 0b00000000;        /* xxxxx RESET ----- ----- ----- ----- ----- ----- */
  DDRD = 0b00000000;        /* ----- ----- ----- ----- ----- ----- TXD   RXD   */
  PORTB = 0b00111110;
  PORTC = 0b00111111;
  PORTD = 0b11111100;

  u0.initUSART0(9600);

  u0.Send0("START\r");
}

void loop()
{
  PORTB ^= 0b00000001;
  de.delay_ms(500);
}




Delay.h
/************************/
/*  Delay.h             */
/*                      */
/*  V1.0 2015/08/15     */
/************************/

#ifndef __DELAY_H
#define __DELAY_H

class Delay{
public:
    void delay_us(unsigned short);
    void delay_ms(unsigned short);
};

extern Delay de;

#endif


Delay.cpp
/************************/
/*  Delay.cpp           */
/*                      */
/*  V1.0 2015/08/15     */
/************************/

#define F_CPU 16.0E6                /* 16 MHz */
#include <util/delay.h>
#include "Delay.h"

void Delay::delay_us(unsigned short t){
    while(t--)
        _delay_us(1);
}

void Delay::delay_ms(unsigned short t){
    while(t--)
        _delay_ms(1);
}

Delay de;


Usart0.h
/************************/
/*  Usart0.h            */
/*                      */
/*  V1.0 2015/08/15     */
/************************/

#ifndef __USART0_H
#define __USART0_H

class Usart0{
public:
    void initUSART0(long br);
    void Tx0(char data);
    void Send0(char *str);
};

extern Usart0 u0;

#endif


Usart0.cpp
/************************/
/*  Usart0.cpp          */
/*                      */
/*  V1.0 2015/08/15     */
/************************/

#include <avr/io.h>
#include "Usart0.h"

void Usart0::initUSART0(long br)
{
    switch(br){
    case 9600:
        UCSR0A = 0b00000010;    /* U2X0 = 1 */
        UBRR0 = 207;            /* U2X0 = 1, 9600ボー/16MHzクロック */
        break;
    case 19200:
        UCSR0A = 0b00000010;    /* U2X0 = 1 */
        UBRR0 = 103;            /* U2X0 = 1, 19200ボー/16MHzクロック */
        break;
    case 39800:
        UCSR0A = 0b00000010;    /* U2X0 = 1 */
        UBRR0 = 51;             /* U2X0 = 1, 38400ボー/16MHzクロック */
        break;
    case57600:
        UCSR0A = 0b00000010;    /* U2X0 = 1 */
        UBRR0 = 34;             /* U2X0 = 1, 57600ボー/16MHzクロック */
        break;
    }

    UCSR0B = 0b00001000;    /* 送信イネーブル */
    UCSR0C = 0b00000110;    /* 8ビット, パリティなし, ストップ・ビット1 */
}

/*
 *  1データ送信
 */
void Usart0::Tx0(char data)
{
    while((UCSR0A & 0b00100000) == 0)
        ;
    UDR0 = (unsigned char)data;
}

/*
 *  割り込みを使わないで, 文字列を送信
 */
void Usart0::Send0(char *str)
{
    while(*str != '\0'){
        Tx0(*str);
        str++;
    }
}

Usart0 u0;


画面1のように、スケッチブックの保存場所を好みの場所に決めておく。

set_kankyou.jpg

画面1



画面2のように、スケッチ → ライブラリを使用 → Add Library と進み、ファイル名にライブラリファイルの入っている フォルダ名 (私の場合は MyLibarduion_cpp ) を書き、開くをクリックすると登録される → ユーザー提供 MyLibarduion_cpp

set_lib.jpg

画面2



画面3のように、AVR4 → Arduion → libraries → MyLibArduino_cpp ホルダーにライブラリファイルは登録される。デバック時にこの ファイルを書き換えても良い。

dir.jpg

画面3


真空管
戻る