Arduino IDEによるサンプルプログラム集

LED (DIGITAL)

前にならえをしているフィッシャーくん

int led1 = 6;        /* 6番ピンに led1 を割り当てる*/

void setup() {
  pinMode(led1, OUTPUT);     /* 出力  */
}

void loop() {
  digitalWrite(led1, HIGH);  /* led1 を ON */
  delay(500);                /* 0.5秒停止する*/
  digitalWrite(led1, LOW);  /* led1 を ON */
  delay(500);               /* 0.5秒停止する*/
}



DIDACTA
サンプルプログラム

スイッチ&LED - MICRO SWITCH (DIGITAL)

白フィッシャーくんにお辞儀している青フィッシャーくん
/*
   LED - switch
*/
 
int led1 = 6;    /* led1 を6番ピンに割り当てる  */
int sw1 = A0;     /*  sw1  を0番ピンに割り当てる */

void setup() {
  pinMode(led1, OUTPUT);   /*  出力  */
  pinMode(sw1, INPUT);    /*  入力  */
}

void loop() {
  if (digitalRead(sw1) == LOW)    /*   スイッチを押したとき  */
  {
    digitalWrite(led1, HIGH);     /*   led1 を ON  */
  }
  else                           /*    それ以外ならば  */
  {
    digitalWrite(led1, LOW);      /*  led1 を OFF   */
  }
}



DIDACTA
サンプルプログラム

LED (ANALOG)

上司の青フィッシャーくんに再敬礼している白フィッシャーくんとよくやったとほめている青フィッシャーくん
/*
  LED analog
*/
int out6 = 6 ;         /*  out6 を 6番ピンに割り当てる */
int br = 0;            /*  br を 0 にする */

void setup() {
  Serial.begin(9600);     /*    シリアル通信を初期化する  通信速度は9600bps     */
  pinMode(out6, OUTPUT);   /*     出力       */
}
void loop() {
  br = br + 1;                     /*  br  を +1する */
  Serial.println(br);             /*  br の値を シリアルモニタへ表示*/
  analogWrite(out6, br);           /*  out6 で br の値で アナログ出力  */
  delay(100);                      /*  0.1秒間停止する */
  if (br > 30)                     /*  br が 30 より大きくなったら  */
  {
    br = 0;                       /*  br  を 0へ*/
  }
}



DIDACTA
サンプルプログラム

LED&スイッチ - MICRO SWITHCH (ANALOG)

青フィッシャーくん再敬礼でお辞儀をしている白フィッシャーくん
/*
  LED analog -switch
*/
const int sw = A0;   /* sw を A0 に割り当てる */

int out6 = 6 ;      /* out6 を 6に割り当てる */
int br = 0;         /* br を 0にする  */

void setup() {
  Serial.begin(9600);     /*    シリアル通信を初期化する  通信速度は9600bps     */
  pinMode(sw, INPUT);      /*     入力       */
  pinMode(out6, OUTPUT);   /*     出力       */
}
void loop() {

  if (digitalRead(sw) == LOW)     /*   スイッチを押したとき */
  {
    br = br + 1;                 /*  br  を +1する */
    Serial.println(br);         /*  br の値を シリアルモニタへ表示*/
    analogWrite(out6, br);       /*  out6 で br の値で アナログ出力  */
    delay(100);                  /*  out6 で br の値で アナログ出力  */
    if (br > 30)                 /*  br が 30 より大きくなったら  */
    {
      br = 0;                    /*  br  を 0へ*/
    }
  }
  else                           /*  スイッチを押していないとき */
  {
    analogWrite(out6, 0);        /* out6 を   OFF  */
    br = 0;                      /* br  を 0にする */
  }
}



DIDACTA
サンプルプログラム

フォトトランジスタ1 - LED LIGHT (DIGITAL)

万歳をしているフィッシャーくん
/*
  PHOTO digital
*/
const int photo = A0;    /* photo を A0 に割り当てる */

int out6 = 6 ;           /* out6 を 6に割り当てる */

void setup() {
  Serial.begin(9600);     /*    シリアル通信を初期化する  通信速度は9600bps     */
  pinMode(photo, INPUT);   /*     入力       */
  pinMode(out6, OUTPUT);   /*     出力       */
}
void loop() {

  if (digitalRead(photo) == LOW)      /*   明るいとき */
  {
    digitalWrite(out6, 1);            /*  out6 ON  */
  }
  else                    /* 暗いとき */
  {
    digitalWrite(out6, 0);          /*  out6 OFF  */
  }
}



DIDACTA
サンプルプログラム

フォトトランジスタ2 - LED LIGHT (ANALOG)

変なポーズをとっているフィッシャーくん
/*
  PHOTO analog
*/
const int photo = A0;   /* photo を A0 に割り当てる */

int out6 = 6 ;         /* out6 を 6に割り当てる */
int out9 = 9 ;         /* out9 を 9に割り当てる */
int out4 = 4 ;         /* out4 を 4に割り当てる */
int br = 0;

void setup() {
  Serial.begin(9600);         /*    シリアル通信を初期化する  通信速度は9600bps     */
  pinMode(photo, INPUT);       /*     入力       */
  pinMode(out6, OUTPUT);       /*     出力       */
  pinMode(out9, OUTPUT);       /*     出力       */
  pinMode(out4, OUTPUT);       /*     出力       */
}
void loop() {
  br = analogRead(photo);         /*    br  へ photo  からのアナログの値を格納する     */
  Serial.println(br);            /*  シリアルモニタに br の値を 表示する    */
  if ( br > 700 && br < 900)      /*       600  <   br  <   800      */
  {
    digitalWrite(out6, 1);         /*   6-- ON      */
    digitalWrite(out9, 0);         /*    OFF      */
    digitalWrite(out4, 0);         /*    OFF      */
  }
  if ( br > 400 && br < 700)     /*       300  <   br  <   600      */
  {
    digitalWrite(out9, 1);         /*   9-- ON      */
    digitalWrite(out6, 0);         /*    OFF      */
    digitalWrite(out4, 0);         /*    OFF      */
  }
  if ( br < 400)                /*    100 より 小さいとき */
  {
    digitalWrite(out4, 1);        /*   4-- ON      */
    digitalWrite(out9, 0);        /*    OFF      */
    digitalWrite(out6, 0);         /*    OFF      */
  }

}



DIDACTA
サンプルプログラム

DCモーター1 (DIGITAL)

青フィッシャーくんにカツアゲされそうになっている白フィッシャーくん
/*
 * DC MOTOR
 */
 
int mot1 = 6;             /* mot1 を 6 に割り当てる */

void setup() {                
  pinMode(mot1, OUTPUT);      /*     出力       */
}

void loop() {
  digitalWrite(mot1, HIGH);         /*   mot1  を  ON      */
  delay(100);                       /*   0.1秒停止     */
  digitalWrite(mot1, LOW);          /*   mot1  を  OFF      */
  delay(2000);                      /*   02秒停止     */
}



DIDACTA
サンプルプログラム

DCモーター2 - ONE WAY ROTATION (DIGITAL)

青フィッシャーくんにカツアゲされようとしている白フィッシャーくん
/*
 * DC MOTOR - switch
 */
int mot1 = 6;                    /* mot1 を 6 に割り当てる */

int sw = A0;                   /* sw を A0 に割り当てる */

void setup() {                
  pinMode(mot1, OUTPUT);         /*     出力       */
  pinMode(sw, INPUT);            /*     入力       */
}

void loop() {
  if (digitalRead(sw) == LOW)       /* スイッチを押したとき */
  {
  digitalWrite(mot1, HIGH);          /*   mot1  を  ON      */
  }
  else                              /* スイッチを押していないとき */
  { 
  digitalWrite(mot1, LOW);            /*   mot1  を  OFF      */
  }
}



DIDACTA
サンプルプログラム

DCモーター3 - TWO WAYS ROTATION (DIGITAL)

車の上に乗っている白フィッシャーくんと並んで座っている青フィッシャーくん
/*
 * DC MOTOR - switch x 2
 */
 
int mot1 = 6;               /* mot1 を 6 に割り当てる */
int mot2 = 9;               /* mot2 を 9 に割り当てる */

int sw1 = A0;              /* sw1 を A0 に割り当てる */
int sw2 = A1;              /* sw2を A1 に割り当てる */
void setup() {                
  pinMode(mot1, OUTPUT);        /*     出力       */
  pinMode(mot2, OUTPUT);        /*     出力       */
  pinMode(sw1, INPUT);         /*     入力       */
  pinMode(sw2, INPUT);         /*     入力       */

  digitalWrite(mot1, LOW);      /*   mot1  を  OFF      */
  digitalWrite(mot2, LOW);      /*   mot2  を  OFF      */
}

void loop() {
  // switch 1
  if (digitalRead(sw1) == LOW)      /* sw1を押したとき */
  {   
  digitalWrite(mot1, HIGH);           /*   mot1  を  ON      */
  digitalWrite(mot2, LOW);            /*   mot2  を  OFF      */
  }
  else                               /* sw1を押していないとき */ 
  {
  digitalWrite(mot1, LOW);        /*   mot1  を  OFF      */
  }
  // switch 2
  if (digitalRead(sw2) == LOW)      /* sw2を押したとき */
  {
  digitalWrite(mot2, HIGH);         /*   mot2  を  ON      */
  digitalWrite(mot1, LOW);          /*   mot1  を  OFF      */
  }
  else                               /* sw2を押していないとき */
  {
  digitalWrite(mot2, LOW);         /*   mot2  を  OFF      */
  }  
}



DIDACTA
サンプルプログラム

DCモーター4 - SPEED CONTROL (ANALOG)

白フィッシャーくんの背中を押している青フィッシャーくん
/*
   DC MOTOR - ANALOGUE
*/

int mot1 = 6;             /* out6 を 6に割り当てる */
int mot2 = 9;             /* out9 を 9に割り当てる */
int spe = 0;              /*  速度の値 */
void setup() {
  pinMode(mot1, OUTPUT);       /*     出力       */
  pinMode(mot2, OUTPUT);       /*     出力       */
  digitalWrite(mot1, LOW);      /*   mot1   OFF      */
  digitalWrite(mot2, LOW);      /*   mot2   OFF      */
}

void loop() {

  for (int n = 60 ; n < 200; n = n + 50)    /*   60  ~ 200 まで を 50ずつループ       */
  {
    analogWrite(mot2, n);           /*    mot2   を  nの値でアナログ出力    */
    delay(2000);                    /*    2秒間停止     */
    digitalWrite(mot2, LOW);        /*    mot2   を  OFF        */

    /*    速い    */
    digitalWrite(mot1, HIGH);       /*   mot1 を    デジタル出力      ON*/
    delay(80);                      /*  (80ミリ秒) 0.08秒止まる  */
    digitalWrite(mot1, LOW);        /*   mot1 を    デジタル出力      OFF */
    delay(500);                     /*  (500ミリ秒) 0.5秒止まる  */
  }
}



DIDACTA
サンプルプログラム

赤外線センサー1 (DIGITAL)

車の上に乗っている白フィッシャーくんと並んで座っている青フィッシャーくん
//
// IR - DIGITAL
//
int led1 = 6;              /* out6 を 6に割り当てる */
int led2 = 9;              /* out9 を 9に割り当てる */

int sen1 = A1;                /* sen1 を A1に割り当てる */
int sen2 = A0;                /* sen2 を A0に割り当てる */
int pw = 10;                  /* pw  を 10 に割り当てる    */

void setup() {
  Serial.begin(9600);     /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(led1, OUTPUT);        /*     出力       */
  pinMode(led2, OUTPUT);        /*     出力       */
  pinMode(pw, OUTPUT);          /*     出力       */
  pinMode(sen1, INPUT);        /*     入力       */
  pinMode(sen2, INPUT);        /*     入力       */

  /*  出力   */
  digitalWrite(led1, LOW);        /*  OFF  */
  digitalWrite(led2, LOW);        /*  OFF  */
  digitalWrite(pw, HIGH);          /*  ON  */
}

void loop() {
  if (digitalRead(sen1) == HIGH)      /*   sen1   が HIGH のとき     (表面が白の時)  */
  {
    digitalWrite(led1, HIGH);         /*  ON  */
  }
  else          /*(表面が黒の時) */
  {
    digitalWrite(led1, LOW);          /*  OFF  */
  }
  if (digitalRead(sen2) == HIGH)      /* sen2  ON  (表面が白の時) */
  {
    digitalWrite(led2, HIGH);         /*  ON  */
  }
  else            /*(表面が黒の時) */
  {
    digitalWrite(led2, LOW);           /*  OFF  */
  }
}



DIDACTA
サンプルプログラム

赤外線センサー2 (ANALOG)

ボンネットに腰を掛けて空を見上げている白フィッシャーくんとそれを見ている青フィッシャーくん
//
// IR - ANALOGUE - DISTANCE TO WHITE BOARD
//
int led1 = 6;            /* out6 を 6に割り当てる */
int led2 = 9;            /* out9 を 9に割り当てる */

int sen1 = A1;           /* sen1 を A1に割り当てる */
int sen2 = A0;           /* sen2 を A0に割り当てる */
int pw = 10;            /* pw  を 10 に割り当てる    */

void setup() {
  Serial.begin(9600);           /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(led1, OUTPUT);          /*     出力       */
  pinMode(led2, OUTPUT);          /*     出力       */
  pinMode(pw, OUTPUT);            /*     出力       */
  pinMode(sen1, INPUT);           /*     入力       */
  pinMode(sen2, INPUT);           /*     入力       */

  /*   出力   */
  digitalWrite(led1, LOW);           /*  OFF  */
  digitalWrite(led2, LOW);           /*  OFF  */
  digitalWrite(pw, HIGH);            /*  ON   */
}

void loop() {
  if (analogRead(sen1) > 500)       /*  500  より 小さいとき  */
  {
    digitalWrite(led1, HIGH);         /*  ON  */
  }
  else
  {
    digitalWrite(led1, LOW);         /*  OFF  */
  }
  if (analogRead(sen2) > 500)       /*  500  より 小さいとき  */
  {
    digitalWrite(led2, HIGH);     /*  ON  */
  }
  else
  {
    digitalWrite(led2, LOW);        /*  OFF  */
  }
}



DIDACTA
サンプルプログラム

温度センサー (ANALOG)

落ち込んでいる白フィッシャーくんを励ましている青フィッシャーくん
/*
   TERMO -ANALOGUE
*/
int pled = 4;         /* pled を 4に割り当てる */
int led1 = 6;         /* led1 を 6に割り当てる */
int sen = A5;         /* sen を A5に割り当てる */
int sw = A2;          /* sw を A2に割り当てる */

int in = 0;       /*  sen で 入ってきた値  */

void setup() {
  Serial.begin(9600);          /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(pled, OUTPUT);         /*     出力       */
  pinMode(led1, OUTPUT);         /*     出力       */
  pinMode(sen, INPUT);           /*     入力       */
  pinMode(sw, INPUT);            /*     入力       */
}

void loop() {

   in = analogRead(sen);    
  Serial.println(i);

  if (digitalRead(sw) == LOW)         /*  スイッチ ONの時 */
  {
    digitalWrite(pled, HIGH);             /*   pled ON    */
  }
  else
  {
    digitalWrite(pled, LOW);               /*   pled ON    */
  }

  if (analogRead(sen) < 130)         /* sen の値が 800  より 小さいとき  */
  {
    digitalWrite(led1, HIGH);         /*   led1  ON    */
  }
  else
  {
    digitalWrite(led1, LOW);          /*   led1  OFF    */
  }
}



DIDACTA
サンプルプログラム

磁気センサー (DIGITAL)

座っている白フィッシャーくんと手を握り合っている青フィッシャーくん
/*
   MAGNET
*/

int led1 = 6;                     /* led1 を 6に割り当てる */

int mag1 = A0;                    /* mag1  を A0に割り当てる */

void setup() {
  pinMode(led1, OUTPUT);       /*     出力       */
  pinMode(mag1, INPUT);        /*     入力       */
}

void loop() {
  if (digitalRead(mag1) == LOW)           /*    磁石を近づけた時  */
  {
    digitalWrite(led1, HIGH);           /*   led1  ON    */
  }
  else
  {
    digitalWrite(led1, LOW);           /*   led1  OFF    */
  }
}



DIDACTA
サンプルプログラム

カラーセンサー1 - COLORS

ケーブルを乗り越えるために手を貸しているフィッシャーくん
//
// COLOR - ANALOG
//
int led1 = 6;               /* led1 を 6に割り当てる */
int led2 = 9;               /* led2 を 9に割り当てる */
int led3 = 4;               /* led3 を 4に割り当てる */
int sen1 = A0;              /* sen1 を A5に割り当てる */
int pw = 10;                /* pw を 10 に割り当てる */
void setup() {
  Serial.begin(9600);            /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(led1, OUTPUT);      /*     出力       */
  pinMode(led2, OUTPUT);      /*     出力       */
  pinMode(led3, OUTPUT);      /*     出力       */
  pinMode(pw, OUTPUT);        /*     出力       */
  pinMode(sen1, INPUT);        /*     入力       */

  /*   出力  */
  digitalWrite(led1, LOW);        /*  OFF    */
  digitalWrite(led2, LOW);        /*  OFF    */
  digitalWrite(led3, LOW);        /*  OFF    */
  digitalWrite(pw, HIGH);         /*  ON     */
}
void loop() {
  Serial.println(String(analogRead(sen1)));        /*  シリアルモニタに表示 */ 
  if (analogRead(sen1) > 870)             /*  870  よりも  sen1  の値が大きいとき */
  {
    digitalWrite(led3, HIGH);        /*   led3 ON    */
  }
  else
  {
    digitalWrite(led3, LOW);           /*   led3 OFF    */
  }
  if (analogRead(sen1) > 820 && analogRead(sen1) < 840)        /*    820 < sen1 < 840   のとき */   
  {
    digitalWrite(led2, HIGH);             /*   led2 ON    */
  }
  else
  {
    digitalWrite(led2, LOW);              /*   led2 OFF    */
  }
  if (analogRead(sen1) > 850 && analogRead(sen1) < 870)              /*    8600 < sen1 < 870  のとき */  
  {
    digitalWrite(led1, HIGH);       
  }
  else
  {
    digitalWrite(led1, LOW);        /*   led1 OFF    */
  }
}



DIDACTA
サンプルプログラム

カラーセンサー2 - BLACK LINE

車を誘導していてる青フィッシャーくんと話しかけている白フィッシャーくん
// 
// COLOR - ANALOG
// BLACK LINE
//

int led1 = 6;                   /* led1 を 6に割り当てる */
int sen1 = A0;                  /* sen1 を A5に割り当てる */       
int pw = 10;                    /* pw を 10 に割り当てる */

void setup() {
  Serial.begin(9600);          /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */             
  pinMode(led1, OUTPUT);        /*     出力       */ 
  pinMode(pw, OUTPUT);          /*     出力       */
  pinMode(sen1, INPUT);           /*     入力       */
  
      /*  出力   */
  digitalWrite(led1, LOW);           /*  OFF    */
  digitalWrite(pw, HIGH);            /*  ON     */
}

void loop() {
  Serial.println(String(analogRead(sen1)));         /*  シリアルモニタに表示 */
  if (analogRead(sen1) > 800)                        /*  870  よりも  sen1  の値が大きいとき  (黒線) */    
  {  
  digitalWrite(led1, HIGH);                       /*  ON     */
  }
  else
  {
  digitalWrite(led1, LOW);                     /*  OFF    */
  }  
}



DIDACTA
サンプルプログラム

超音波センサー1 (DIGITAL)

久しぶりの再会に喜んでいるフィッシャーくん
 /*
ULTRASONIC SENSOR 
 */
const int trigPin = A0;              /* trigPin を A0に割り当てる */
const int echoPin = A1;              /* echoPin を A1に割り当てる */
int out6 = 6 ;                       /* out6 を 6 に割り当てる */

long duration, cm, inches;        /*    long型の変数を宣言  */

void setup() {
  pinMode(trigPin, OUTPUT);                  /*     出力       */ 
  pinMode(echoPin, INPUT);                   /*     入力       */
  
  pinMode(out6, OUTPUT);                      /*     出力       */ 
  }
void loop() {
  
  digitalWrite(trigPin, LOW);              /* trigPin  - OFF    */
  
  delayMicroseconds(5);             /*   5マイクロミリ秒 停止   */
  digitalWrite(trigPin, HIGH);      /*    ON        */ 
  delayMicroseconds(10);            /*   10マイクロミリ秒 停止   */
  digitalWrite(trigPin, LOW);       /*    OFF        */ 

  /*   echoPin    を INPUT  にする    */
  pinMode(echoPin, INPUT);              
  duration = pulseIn(echoPin, HIGH);            /*       ピンに入力されるパルスを検出します  パルスがHIGHになっている時間(duration)を調べます */
  
  /*    距離の計算 */
  cm = (duration/2)/29.1;
  if (cm < 5)      /*  距離(cm) が 5 より 小さいとき    */
  { 
    digitalWrite(out6, 1);       /*  ON    */
  
  }
  else
  {
    analogWrite(out6, 0);          /*  OFF   */
  }
}



DIDACTA
サンプルプログラム

超音波センサー2 (ANALOG)

手を取り合って喜んでいるフィッシャーくん
 /*
ULTRASONIC SENSOR 
 */
const int trigPin = A0;             /* trigPin を A0に割り当てる */
const int echoPin = A1;             /* echoPin を A1に割り当てる */
int out6 = 6 ;                      /* out6 を 6 に割り当てる */

long duration, cm, inches;            /*    long型の変数を宣言  */
void setup() {
  Serial.begin(9600);                 /*  シリアルモニタに表示 */
  pinMode(trigPin, OUTPUT);           /*     出力       */ 
  pinMode(echoPin, INPUT);            /*     入力       */
  
  pinMode(out6, OUTPUT);               /*     出力       */ 
  }
void loop() {
  
  digitalWrite(trigPin, LOW);        /* trigPin  - OFF    */
  delayMicroseconds(5);              /*   5マイクロミリ秒 停止   */
    
  digitalWrite(trigPin, HIGH);       /*  デジタル出力  ON        */ 
  
  delayMicroseconds(10);             /*   10マイクロミリ秒 停止   */
  digitalWrite(trigPin, LOW);        /*   デジタル出力   OFF        */ 


   /*   echoPin    を INPUT  にする    */
  pinMode(echoPin, INPUT);                 /*       ピンに入力されるパルスを検出します  パルスがHIGHになっている時間(duration)を調べます */
  duration = pulseIn(echoPin, HIGH);
   /*    距離の計算  */
  cm = (duration/2)/29.1;
  
  Serial.println(cm);                  /*    シリアルモニタに出力   */  
  if (cm < 30)                         /*  距離(cm) が 30 より 小さいとき    */
  { 
    analogWrite(out6, cm);             /*  ON    */  
  }
  else
  {
    analogWrite(out6, 0);              /*  OFF   */
  }
}



DIDACTA
サンプルプログラム

サーボモーター

ボンネットの上に腰を掛けている青フィッシャーくんと会話している白フィッシャーくん
/*
  SERVO TEST
 */
 
#include <Servo.h>        /*    Servo.h  を include する      */

Servo Servo1;             
int iz1 = 5;                      /*    iz1     を   5に割り当てる    */

void setup() {                
  Serial.begin(9600);                     /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */             
  pinMode(iz1, OUTPUT);                  /*     出力       */ 
  Servo1.attach(iz1);                    /*      サーボモーターの信号ピンを指定          */
}
void loop() {
   Servo1.write(15);                                     /*   サーボモーターを 0度の位置まで動かす    */
   
   digitalWrite(iz1, LOW);        /*   OFF    */
   delay(1000);                /*  0.5秒停止   */
   
   Servo1.write(45);                                   /*   サーボモーターを 45度の位置まで動かす    */
     
   digitalWrite(iz1, LOW);       /*   OFF    */
   delay(1000);                /*  0.5秒停止   */
   Servo1.write(90);                                     /*   サーボモーターを 90度の位置まで動かす    */
   
   digitalWrite(iz1, LOW);    /*   OFF    */
   delay(1000);                /*  0.5秒停止   */
}



DIDACTA
サンプルプログラム

シリアル通信1 - TX COMMUNICATION (UART) (HARD)

雑談しているフィッシャーくん
// RECEIVE    光る側

int led1 = 4;                     /*   led1     を   4に割り当てる    */
int led2 = 8;                     /*   led2     を   8に割り当てる    */

void setup() {
  Serial.begin(9600);           /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */             
  pinMode(led1, OUTPUT);         /*     出力       */ 
  pinMode(led2, OUTPUT);         /*     出力       */ 
  /*  出力   */
  digitalWrite(led1, LOW);           /*     出力       */ 
  digitalWrite(led2, LOW);           /*     出力       */ 
}

void loop() { 
   if (Serial.available() > 0) {    /*  シリアルポートにデータが着ていたら  */
      char ul = Serial.read();      /*  シリアルの入力を受け取る   */
      String inval = String(ul);     /*  型変換   */
      Serial.println(inval);        /*    シリアルモニタに出力    */
      if ( inval == "A")                  /*       A    なら      */
      {
          digitalWrite(led1, HIGH);         /*     ON   */
          delay(200);                         /*     0.2秒間停止   */
          digitalWrite(led1, LOW);          /*     OFF   */
      }
      if ( inval == "B")                /*       B    なら      */
      {
          digitalWrite(led2, HIGH);         /*     ON   */
          delay(200);                         /*     0.2秒間停止   */
          digitalWrite(led2, LOW);          /*     OFF   */
      }      
      inval = "";           /*     空にする   */
  }
  delay(100);       /*     0.1秒間停止   */
}

//---------------------------------------------

// SEND     送信側

int inPin0 = A0;                        /*   inPin0     を   A0に割り当てる    */
int inPin1 = A1;                        /*   inPin0    を     A1に割り当てる    */
int val = 0;                      /*   val  という   int型の変数の初期化     */

void setup()
{
  Serial.begin(9600);             /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  delay(100);                       /*    01秒間停止    */
  pinMode(inPin0, INPUT);           /*     入力       */
  pinMode(inPin1, INPUT);           /*     入力       */
}

void loop()
{
  digitalWrite(inPin0, HIGH);          /*     ON   */
  digitalWrite(inPin1, HIGH);          /*     ON   */
  delay(50);                                       /*    00.5秒間停止    */

  if (digitalRead(inPin1) == LOW)       /* ioPin1 を押したら  */
  {
    Serial.print("A");            /*   A   を送る     */
    delay(500);                                    /*    0.5秒間停止    */
  }
  if (digitalRead(inPin0) == LOW)       /* ioPin0 を押したら  */
  {
    Serial.print("B");         /*   B   を送る     */
    delay(500);                                   /*    0.5秒間停止    */
  }
}



DIDACTA
サンプルプログラム(送信側)
サンプルプログラム(受信側)

シリアル通信2 - TX COMMUNICATION (UART) (SOFT)

歌っている白フィッシャーくんとライトのボタンを押している青フィッシャーくん
// RECEIVE    光る側
#include <SoftwareSerial.h>           /*   SoftwareSerial.h   をインクルードする   */

int led1 = 4;     /*   led1     を   4に割り当てる    */
int led2 = 8;     /*   led2     を   8に割り当てる    */

SoftwareSerial mySerial(A4, A5);      /*   mySerial を作成  */

void setup() {
  Serial.begin(9600);          /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  mySerial.begin(9600);        /* SoftwareSerial.begin()を実行することも必要  */
  pinMode(led1, OUTPUT);        /*    出力   */ 
  pinMode(led2, OUTPUT);        /*    出力   */ 
    /*  出力  */
  digitalWrite(led1, LOW);      /*    OFF    */ 
  digitalWrite(led2, LOW);      /*    OFF    */ 
}

void loop() { 
   if (mySerial.available() > 0) {          /*  シリアルポートにデータが着ていたら  */  
      char ul = mySerial.read();            /*  シリアルの入力を受け取る   */
      String inval = String(ul);            /*  型変換   */
      Serial.println(inval);                /*    シリアルモニタに出力    */
      if ( inval == "A")            /*       A    なら      */
      {
          digitalWrite(led1, HIGH);       /*     ON   */
          delay(200);                        /*    0.2秒間停止   */
          digitalWrite(led1, LOW);         /*     OFF   */
      }
      if ( inval == "B")            /*       B    なら      */
      {
          digitalWrite(led2, HIGH);       /*     ON   */
          delay(200);                        /*    0.2秒間停止   */
          digitalWrite(led2, LOW);         /*     OFF   */
      }      
      inval = "";        /*     空にする   */
  }
  delay(100);          /*     0.1秒間停止   */
}

//------------------------------------------ 

// SEND               送信側
#include <SoftwareSerial.h>
int inPin0 = A0;                /*   inPin0     を   A0に割り当てる    */
int inPin1 = A1;                /*   inPin0     を   A1に割り当てる    */
int val = 0;        /*   val  という   int型の変数の初期化     */

SoftwareSerial mySerial(A4, A5); // RX, TX

void setup()
{
  Serial.begin(9600);            /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  mySerial.begin(9600);        /* SoftwareSerial.begin()を実行することも必要  */
   /*   入力    */
  pinMode(inPin0,INPUT);         /*     入力       */
  pinMode(inPin1,INPUT);         /*     入力       */
}

void loop() 
{
  digitalWrite(inPin0, HIGH);       /*     ON   */
  digitalWrite(inPin1, HIGH);       /*     ON   */
  delay(50);                          /*    00.5秒間停止    */
  
  if (digitalRead(inPin1) == LOW)             /* ioPin1 を押したら  */
{
     Serial.print("A");                 /*   A をシリアルモニタに出力     */
     mySerial.print("A");               /*   A   を送る     */
     delay(500);                       /*    0.5秒間停止    */
}   
   if (digitalRead(inPin0) == LOW)
{
     Serial.print("B");                 /*   B をシリアルモニタに出力     */
     mySerial.print("B");               /*   B   を送る     */
     delay(500);                        /*    0.5秒間停止    */
} 
}



DIDACTA
サンプルプログラム(送信側)
サンプルプログラム(受信側)

エンコーダーモーター1 - STEP - LESS PRECISE

落ち込んでいる青フィッシャーくんと高笑いしている白フィッシャーくん
//
// ENCODER MOTOR
//
int mot1 = 10;           /*  mot1   を 10 に割り当てる    */
int mot2 = 11;           /*  mot2   を 11 に割り当てる    */
int led1 = 6;            /*  led1   を 6  に割り当てる    */
int sen1 = A0;           /*  sen1   を A0 に割り当てる    */
int sw1 = A2;           /*  sw1   を A2 に割り当てる    */
int pw = 4;               /*  pw    を 4 に割り当てる    */
int br = 0;               /*  br  という変数を初期化    */
int steps = 70;           /*  steps という変数を 70で初期化   */

void setup() {
  Serial.begin(9600);            /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(mot1, OUTPUT);        /*  出力  */
  pinMode(mot2, OUTPUT);        /*  出力  */
  pinMode(led1, OUTPUT);        /*  出力  */
  pinMode(pw, OUTPUT);          /*  出力  */
  pinMode(sen1, INPUT);           /*   入力  */
  /* 出力 */
  digitalWrite(mot1, LOW);      /*  OFF  */
  digitalWrite(mot2, LOW);      /*  OFF  */
  digitalWrite(led1, LOW);      /*  OFF  */
  digitalWrite(pw, HIGH);       /*  ON   */
}
void loop() {
  if (digitalRead(sw1) == LOW)     /*   スイッチを押したとき   */
  {
    br = 0;                                       /*   br を 0 にする  */
    delay(100);                                   /*   0.1秒間停止   */
    digitalWrite(led1, HIGH);     /*  LED  ON  */
    analogWrite(mot1, 80);        /*  mot1  に アナログの値で 80 */
  }
  Serial.println(br);             /*  シリアルモニタに出力  */
  if (digitalRead(sen1) == 1 && br < (steps + 1))    /*  sen1 が 1  かつ   br の値よりも setepsに1加えた値が大きいとき  */
  {
    br = br + 1;                            /*  br  に +1 する  */
    delay(10);                     /*    0.1秒間停止  */
  }
  if (br > steps)                  /*     br の値が steps よりも大きいとき     */
  {
    digitalWrite(led1, LOW);         /*  OFF   */
    digitalWrite(mot1, LOW);         /*  OFF   */
  }
}



DIDACTA
サンプルプログラム

エンコーダーモーター2 - HALF STEP - BETTER PRECISION

何かを見ているフィッシャーくん
//
// ENCODER MOTOR
//
int mot1 = 10;           /*  mot1   を 10 に割り当てる    */
int mot2 = 11;           /*  mot2   を 11 に割り当てる    */
int led1 = 6;            /*  led1   を 6  に割り当てる    */
int sen1 = A0;           /*  sen1   を A0 に割り当てる    */
int sw1 = A2;             /*  sw1   を A2 に割り当てる    */
int pw = 4;               /*  pw    を 4 に割り当てる    */
int br = 0;               /*  br  という変数を初期化    */
int tip = 0;              /*  tip という変数の初期化     */ 
int steps = 144;          /*  steps という変数を 144 で初期化  */

void setup() {
  Serial.begin(9600);         /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  pinMode(mot1, OUTPUT);      /*  出力  */
  pinMode(mot2, OUTPUT);      /*  出力  */
  pinMode(led1, OUTPUT);      /*  出力  */
  pinMode(pw, OUTPUT);        /*  出力  */
  pinMode(sen1, INPUT);       /*  入力  */
    /*  出力  */
  digitalWrite(mot1, LOW);    /*  OFF  */
  digitalWrite(mot2, LOW);    /*  OFF  */
  digitalWrite(led1, LOW);    /*  OFF  */
  digitalWrite(pw, HIGH);     /*  OFF  */
}
void loop() {
  if (digitalRead(sw1) == LOW)      /* スイッチを押したとき  */
  {
    br = 0;                         /*  br  を 0にする  */
    delay(100);                     /*  ON  */
    digitalWrite(led1, HIGH);
    analogWrite(mot1, 80);          /*   mot1 に アナログの値 80 で 出力   */
  }
  if (br < (steps + 1))       /*  brの値が stepに1を加えた値よりも大きければ   */
  {
    if (digitalRead(sen1) == 1 && tip == 0)      /*   sen1 が1 かつ  tipが 0のとき   */
    {
      br = br + 1;        /*    br  を +1する   */
      tip = 1;            /*    tip を 1 に する  */
    }
    else if (digitalRead(sen1) == 0 && tip == 1)        /*  sen1 が 0 かつ tipが 1のとき    */
    {
      br = br + 1;        /*    br  を +1する   */
      tip = 0;            /*    tip を 1 に する  */
    }
  }
  if (br > steps)           /*  sen1 が 0 かつ tipが 1のとき    */
  {
    digitalWrite(led1, LOW);      /*  OFF  */
    digitalWrite(mot1, LOW);      /*  OFF  */
  }
}



DIDACTA
サンプルプログラム

無線通信 - NRF24L01

タイヤで背筋を伸ばしている白フィッシャーくんと驚いている青フィッシャーくん
#include <SPI.h>                                    /*  SPI.h を インクルード     */
#include <nRF24L01.h>                               /*  nRF24L01.h インクルード   */
#include <RF24.h>                                   /*  nRF24L01.h インクルード   */

RF24 radio(2, 7);                                   /*    コンストラクタ を呼び出し 2, 7 をピンの番号に設定  */
const byte address[6] = "00001";                    /* adress という 配列を作る  */
boolean button_state = 0;                           /* ボタンの状態をみる変数  */
int led = 3;                                         /* led   を 3 に割り当てる  */
int sig = 4;                                        /* sig   を 4 に割り当てる  */
String dane = "";                                   /*  dane  という 空の変数を   */

void setup() {
  pinMode(led, OUTPUT);                               /*  出力   */
  pinMode(sig, OUTPUT);                               /*  出力   */
  Serial.begin(9600);                                /*    シリアル通信を初期化する  通信速度は9600bps  (確認用)  */
  radio.begin();                                      /*  通信を始める */
  radio.openReadingPipe(0, address);                  /*  読み込み用のパイプを開く */
  radio.setPALevel(RF24_PA_MIN);       
  radio.startListening();
}
void loop()
{
  if (radio.available())              /* データを読み込んで 真なら*/
  {
    char text[1] = "";                       /*  text[1]  を 空にする  */
    radio.read(&text, sizeof(text));    /*   文字を読み込む   */
    dane = String(text[0]);           /*   型変換     */
    Serial.println(dane);           /*    シリアルモニタに出力    */
    if (dane == "C")                 /*    C  なら   */
    {
      digitalWrite(led, HIGH);         /*   ON   */
      delay(250);                     /*  0.25秒停止  */
      digitalWrite(led, LOW);         /*   OFF   */
      delay(250);                     /*  0.25秒停止  */
    }
    if (dane == "Z")                /*    Z  なら   */
    {
      digitalWrite(sig, HIGH);          /*   ON   */
      delay(250);                       /*  0.25秒停止  */
      digitalWrite(sig, LOW);           /*   OFF   */
      delay(250);                       /*  0.25秒停止  */
    }
  }
}

--------------------------------------------------------------

#include <SPI.h>          /*  SPI.h を インクルード     */
#include <nRF24L01.h>     /*  nRF24L01.h インクルード   */
#include <RF24.h>        /*  nRF24L01.h インクルード   */

RF24 radio(2, 7);       /*  radioを作成  */
const byte address[6] = "00001";     /* adress という 配列を作る  */
int button_pin0 = 0;                 /* button_pin0   を 0 に割り当てる  */
int button_pin = 1;                  /*  button_pin1   を 1 に割り当てる  */ 
boolean button_state0 = 0;           /* ボタンの状態をみる変数  */  
boolean button_state = 0;            /* ボタンの状態をみる変数  */
void setup() {
  pinMode(button_pin0, INPUT);      /*   入力  */
  pinMode(button_pin, INPUT);       /*   入力  */
  radio.begin();                 
  radio.openWritingPipe(address);               /*  書き込み用のパイプを開く */
  radio.setPALevel(RF24_PA_MAX);               
  radio.stopListening();          
}
void loop()
{
  button_state0 = digitalRead(button_pin0);         /*    ボタンの状態を変数に格納   */
  button_state = digitalRead(button_pin);           /*    ボタンの状態を変数に格納   */
  if (button_state == LOW)                          /*    button_state が LOW なら   */
  {
    const char text[] = "Z";                      /*    Z  なら   */
    radio.write(&text, sizeof(text));             /*    文字送信する      z   */
  }
  if (button_state0 == LOW)                       /*   button_state0 が LOW なら   */
  {
    const char text[] = "C";                      /*    C  なら   */
    radio.write(&text, sizeof(text));             /*    文字送信する      z   */
  }
  delay(500);

}



DIDACTA
サンプルプログラム(送信側)
サンプルプログラム(受信側)

LED - Audio sensor

//*******************************************
// LED - ON - OFF
//*******************************************
int ledb = 11;
int ain = A0;
int br = 0;
int brmax = 0;
int nrclap = 0;
int id1 = 0;
int id2 = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ledb, OUTPUT);  
  pinMode(ain, INPUT);
}

void maksi()
{
  for (int n=0;n<500;n++)
  {
    br = analogRead(ain);
    if (br > brmax) {
      brmax = br;
    }
    delay(1);
  }
}

void loop() {
  maksi();
  Serial.println("max: "+String(brmax));
  brmax = brmax + 30;
  id1 = 0;
  while(true) {
        nrclap=0;
        for(int i = 0; i < 50; i++)
        {
          br = analogRead(ain);
          if (br > brmax){
              br = 0;
              if (id1 == 1){
                  delay(300);
                  id1 = 0;
                  digitalWrite(ledb, HIGH);                  
                }              
              else if (id1 == 0){
                  delay(300);
                  id1 = 1;
                  digitalWrite(ledb, LOW);                 
                }              
                delay(100);
                digitalWrite(ain, LOW);
          }
          delay(10);
        }
  }
}



DIDACTA
サンプルプログラム

GPS + LCD ディスプレイ 16x2


#include <TinyGPS++.h> // need this library
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> // library 1.2.1
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
LiquidCrystal_I2C lcd(0x25, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int b = 0;

TinyGPSPlus gps;
SoftwareSerial mojSerial(2, 7);

void setup()
{
  Serial.begin(9600);
  mojSerial.begin(9600);
  lcd.begin(16,2);
  lcd.backlight();
}

void loop()
{
   while (mojSerial.available())
    if (gps.encode(mojSerial.read()))
      displayInfo();

   if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println("No GPS detected");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("No GPS detected");
    while(true);
  }
}

void displayInfo()
{
  if (gps.time.isUpdated()){
    if (gps.time.second() == b) return; // PRINT VALUES EVERY 1 SEC
    if (gps.location.isValid())
    {
      // TO MONITOR 
      Serial.print("Latitude: ");
      Serial.println(gps.location.lat(), 6);
      //int la = gps.location.lat()
      Serial.print("Longitude: ");
      Serial.println(gps.location.lng(), 6);
      Serial.print("Altitude: ");
      Serial.println(gps.altitude.meters());
      
      // TO LCD
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("LA:");
      lcd.setCursor(4, 0);
      lcd.print(gps.location.lat(),6);
      lcd.setCursor(0, 1);
      lcd.print("LO:");
      lcd.setCursor(4, 1);
      lcd.print(gps.location.lng(),6);
    }
    else
    {
      Serial.println("Location: Not Available");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Location: N/A");
    }

    // TO MONITOR
    Serial.print("Date: "); 
    if (gps.date.isValid())
    {
      Serial.print(gps.date.month());
      Serial.print("/");
      Serial.print(gps.date.day());
      Serial.print("/");
      Serial.println(gps.date.year());
    }
    else
    {
      Serial.println("Not Available");
    }
    Serial.println();
    Serial.println();
  }
}



DIDACTA
サンプルプログラム

GPS + LCDディスプレイ2 16x2


#include <TinyGPS++.h> // need this library
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h> // library 1.2.1
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
LiquidCrystal_I2C lcd(0x25, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int b = 0;

TinyGPSPlus gps;

SoftwareSerial mojSerial(2, 7);

void setup()
{
  Serial.begin(9600);
  mojSerial.begin(9600);
  lcd.begin(16,2);
  lcd.backlight();
}

void loop()
{
   while (mojSerial.available())
   if (gps.encode(mojSerial.read()))
      displayInfo();
   if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println("No GPS detected");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("No GPS detected");
    while(true);
  }
}

void displayInfo()
{
  if (gps.time.isUpdated()){
    if (gps.time.second() == b) return; // PRINT VALUES EVERY 1 SEC
    if (gps.location.isValid())
    {
      // TO MONITOR
      Serial.print("Latitude: ");
      Serial.println(gps.location.lat(), 6);
      Serial.print("Longitude: ");
      Serial.println(gps.location.lng(), 6);
      Serial.print("Altitude: ");
      Serial.println(gps.altitude.meters());
      // TO LCD
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("la:");
      lcd.setCursor(3, 0);
      lcd.print(gps.location.lat(),2);
      lcd.setCursor(8, 0);
      lcd.print("lo:");
      lcd.setCursor(11, 0);
      lcd.print(gps.location.lng(),2);
    }
    else
    {
      Serial.println("Location: Not Available");
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Location: N/A");
    }
    
    Serial.print("Date: ");
    if (gps.date.isValid())
    {
      Serial.print(gps.date.month());
      Serial.print("/");
      Serial.print(gps.date.day());
      Serial.print("/");
      Serial.println(gps.date.year());
    }
    else
    {
      Serial.println("Not Available");
    }

    Serial.print("Time: ");
    if (gps.time.isValid())
    {
      //lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("Time:");
      lcd.setCursor(5, 1);
      
      if ((gps.time.hour() + 2) < 10) {Serial.print(F("0")); lcd.print("0");}
      Serial.print(gps.time.hour() + 2);
      Serial.print(":");
      
      lcd.print((gps.time.hour() + 2));
      lcd.setCursor(7, 1);
      lcd.print(":");
      lcd.setCursor(8, 1);
      
      if (gps.time.minute() < 10){Serial.print(F("0")); lcd.print("0");}
      Serial.print(gps.time.minute());
      Serial.print(":");

      lcd.print(gps.time.minute());
      lcd.setCursor(10, 1);
      lcd.print(":");
      lcd.setCursor(11, 1);
      
      if (gps.time.second() < 10){Serial.print(F("0")); lcd.print("0");}
      Serial.print(gps.time.second());
      Serial.print(".");
      b = gps.time.second();

      lcd.print(gps.time.second());
      
      if (gps.time.centisecond() < 10) Serial.print(F("0"));
      Serial.println(gps.time.centisecond());
    }
    else
    {
      Serial.println("Not Available");
      lcd.clear();
      lcd.setCursor(1, 0);
      lcd.print("Time: N/A");
    }
    Serial.println();
    Serial.println();
  }
}



DIDACTA
サンプルプログラム

I2C通信

/*
 * TEST I2C - PCF8574 - 5V
 */
#include <Wire.h> 
int val = 0;
int rez = 0;
int led1 = 4;
int led2 = 11;
void setup() { 
  Wire.begin(); 
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);  
}

void loop() {
  Wire.requestFrom(0x20, 1); 
  rez = 0;
  while(Wire.available()) 
  {
    int c = Wire.read(); // receive a byte as character
    rez = 255 - c;
    Serial.println(rez);
    if (rez == 1) {       
       digitalWrite(led1, HIGH);
    }
    else
    {
       digitalWrite(led1, LOW); 
    } 
    if (rez == 2) {       
       digitalWrite(led2, HIGH);
    }
    else
    {
       digitalWrite(led2, LOW); 
    }
  }
 delay(50);  
}



DIDACTA
サンプルプログラム

遮断機 - Photo sensor + Micro Switch

/*
   LED TEST Uno-F/T + switch
*/

int m1a = 3;                  /*  m1a   を 3 に割り当てる    */
int m1b = 5;                  /*  m1b   を 5 に割り当てる    */

int led1 = 9;                 /*  led1  を 9 に割り当てる    */

int photo = A5;               /*  photo を A5 に割り当てる    */
int sw1 = A2;                /*  sw1   を A2 に割り当てる    */
int sw2 = A0;                /*  sw2   を A0 に割り当てる    */

void setup() {
  pinMode(m1a, OUTPUT);         /*   出力   */
  pinMode(m1b, OUTPUT);         /*   出力   */
  pinMode(led1, OUTPUT);        /*   出力   */
  pinMode(sw1, INPUT);         /*   入力   */
  pinMode(sw2, INPUT);         /*   入力   */
  pinMode(photo, INPUT);        /*   入力   */
  /*  出力   */
  digitalWrite(led1, HIGH);     /*  ON  */
  digitalWrite(m1a, LOW);       /*  OFF */
  digitalWrite(m1b, LOW);       /*  OFF */
}

void loop() {
  if (digitalRead(photo) == HIGH)             /*  ON  */
  {
    digitalWrite(m1a, HIGH);                /*  ON */
    digitalWrite(m1b, LOW);                 /*  OFF */
    while (digitalRead(sw1) == HIGH)        /*  sw1  が  1 のとき  */
    {
    }
    digitalWrite(m1a, LOW);                 /*   OFF  */
    digitalWrite(m1b, LOW);                 /*   OFF  */
    delay(2000);                            /*    2秒間停止する   */
    digitalWrite(m1a, LOW);                 /*   OFF  */
    digitalWrite(m1b, HIGH);                /*   ON  */
    while (digitalRead(sw2) == HIGH)              /*   sw2   が  1 のとき  */
    {
    }
    digitalWrite(m1a, LOW);               /*   OFF  */
    digitalWrite(m1b, LOW);               /*   OFF  */
  }

}



DIDACTA
サンプルプログラム

カー + 超音波センサー

/*
  ULTRASONIC SENSOR 
 */
const int trigPin = 0;                
const int echoPin = 1;

int led1 = 3 ;                    /*  led1   を 3 に割り当てる    */
int led2 = 5 ;                    /*  led2   を 5 に割り当てる    */
int mot2a = 6 ;                   /*  mot2a  を 6 に割り当てる    */
int mot2b = 9 ;                   /*  mot2b  を 9 に割り当てる    */
int mot1a = 10 ;                  /*  mot1a  を 10 に割り当てる    */
int mot1b = 11 ;                  /*  mot1b  を 11 に割り当てる    */

int brz = 96;                 /*  brz  という変数を 96    */
int svj = 16;                 /*  svj  という変数を 16    */
    
long duration, cm, inches;            /*   long型で  duratio cm inches  という変数を作る   */
int broj;                             /*   broj という変数を作る     */
void setup() {
  pinMode(trigPin, OUTPUT);                 /*  出力 */
  pinMode(echoPin, INPUT);                  /*  入力 */
  pinMode(led1, OUTPUT);                    /*  出力 */
  pinMode(led2, OUTPUT);                    /*  出力 */
  pinMode(mot1a, OUTPUT);                   /*  出力 */
  pinMode(mot1b, OUTPUT);                   /*  出力 */
  pinMode(mot2a, OUTPUT);                   /*  出力 */
  pinMode(mot2b, OUTPUT);                   /*  出力 */
  }
void loop() {

  digitalWrite(trigPin, LOW);             /*   OFF   */
  delayMicroseconds(5);                   /*  5 マイクロミリ秒  */
  
  digitalWrite(trigPin, HIGH);             /*  ON    */
  delayMicroseconds(10);                   /*  10 マイクロミリ秒  */
  digitalWrite(trigPin, LOW);              /*   OFF  */
 
  pinMode(echoPin, INPUT);                 /* 入力 にする   */
  duration = pulseIn(echoPin, HIGH);          /*  duration という変数に pulseIN  の値を代入する  */

  cm = (duration/2)/29.1;                  /*  cm  に 計算した値を代入する  */
  if (cm < 10)                             /*  cm の値が 10 よりも 小さければ  */
  { 
    digitalWrite(led1, svj);               /*  svj の値で デジタル出力  */
    digitalWrite(led2, 0);                 /*  OFF  */
    analogWrite(mot1a, 0);                 /*  OFF  */
    analogWrite(mot1b, brz);               /*  brz の値で デジタル出力  */
    analogWrite(mot2a, 0);                 /*  OFF  */
    analogWrite(mot2b, brz);               /*  brz の値で デジタル出力  */
    delay(500);                            /*  0.5秒間停止する   */
    digitalWrite(led1, 0);                 /*  OFF   */
    broj = random(100);                    /*  broj  と いう変数 に ランダムの値を代入する  */
    if (broj > 49)                         /*  brz の値が 49 より 大きいとき  */
    {    
      analogWrite(mot1a, brz);             /*  brz の値で デジタル出力  */
      analogWrite(mot1b, 0);               /*  OFF   */
      analogWrite(mot2a, 0);               /*  OFF   */
      analogWrite(mot2b, brz);             /*  brz の値で デジタル出力  */
    }
    else
    {
      analogWrite(mot1a, 0);              /*  OFF  */
      analogWrite(mot1b, brz);            /*  brz の値で デジタル出力  */
      analogWrite(mot2a, brz);            /*  brz の値で デジタル出力  */
      analogWrite(mot2b, 0);              /*  OFF  */
    }
    delay(200);    
  }
  else
  {
    analogWrite(led2, svj);               /*  svj の値で デジタル出力  */
    analogWrite(mot1a, brz);              /*  brz の値で デジタル出力  */
    analogWrite(mot1b, 0);                /*  OFF  */
    analogWrite(mot2a, brz);              /*  brz の値で デジタル出力  */
    analogWrite(mot2b, 0);                /*  OFF  */
  }
}



DIDACTA
サンプルプログラム

I2C通信 - LCD 2 x 16

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
                      /*   Wire.h   を インクルードする     */
					  
// Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
LiquidCrystal_I2C lcd(0x25, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
int min = 0;                       /*   Wire.h   を インクルードする     */

void setup()
{
    lcd.begin(16,2);
    lcd.backlight();
    lcd.setCursor(0, 0);
    lcd.print("Seconds:");
    lcd.setCursor(0, 1);
    lcd.print("Minute:");    
    lcd.setCursor(9, 1);
    lcd.print(min);
}
void loop()
{
  for (int x = 0;x < 60;x++)                /*   0 から 60 まで 1づつ繰り返し処理  */
  {
    lcd.setCursor(9, 0);                     /*  カーソルの位置のセット   */
    lcd.print(x);                            /*  x    をLCD画面に出力する   */
    delay(1000);                            /*   1秒間停止する  */
    lcd.setCursor(9, 0);                     /*  カーソルの位置のセット   */
    lcd.print("  ");                        /*  LCDの画面に出力  */
  }
    min = min + 1;                      /*    min を +1 して代入する  */
    lcd.setCursor(9, 1);                 /*  カーソルの位置のセット   */
    lcd.print(min);                     /*  min    をLCD画面に出力する   */
}



DIDACTA
サンプルプログラム

ステップモーター

/*
 * STEP motor testing
 */

int o1 = 3; // red
int o2 = 5; // blue
int o3 = 6; // green
int o4 = 9; // black
int tip1 = A5; // switch 1
int tip2 = A4; // switch 2

int vr = 5; // speed

void setup() { 
    pinMode(o1, OUTPUT);
    pinMode(o2, OUTPUT);
    pinMode(o3, OUTPUT);
    pinMode(o4, OUTPUT);
    pinMode(tip1, INPUT);  
    pinMode(tip2, INPUT); 
}

void loop() {
  delay(250);
  if (digitalRead(tip1) == LOW) // FULL STEP
  {
    for (int n=0;n<12;n++) // 96 steps
    {
    digitalWrite(o1, HIGH);
    digitalWrite(o3, HIGH); 
    delay(vr); 
    digitalWrite(o1, LOW);
    digitalWrite(o3, LOW);     

    digitalWrite(o1, HIGH);
    digitalWrite(o4, HIGH); 
    delay(vr);
    digitalWrite(o1, LOW);
    digitalWrite(o4, LOW);      

    digitalWrite(o2, HIGH);
    digitalWrite(o4, HIGH);
    delay(vr);
    digitalWrite(o2, LOW);
    digitalWrite(o4, LOW); 

    digitalWrite(o2, HIGH);
    digitalWrite(o3, HIGH);
    delay(vr);
    digitalWrite(o2, LOW);
    digitalWrite(o3, LOW); 
  }         
  } 
  if (digitalRead(tip2) == LOW) // HALF STEP
  { 
    for (int n=0;n<12;n++) // 96 steps or 192 half-steps
    {
    digitalWrite(o1, HIGH);
    digitalWrite(o3, HIGH);
    delay(vr);
    digitalWrite(o1, LOW);
    digitalWrite(o3, LOW); 

    digitalWrite(o1, HIGH);
    delay(vr); 
    digitalWrite(o1, LOW);      

    digitalWrite(o1, HIGH);
    digitalWrite(o4, HIGH);
    delay(vr);  
    digitalWrite(o1, LOW);
    digitalWrite(o4, LOW); 

    digitalWrite(o4, HIGH);
    delay(vr); 
    digitalWrite(o4, LOW);       

    digitalWrite(o2, HIGH);
    digitalWrite(o4, HIGH);
    delay(vr); 
    digitalWrite(o2, LOW);
    digitalWrite(o4, LOW);     

    digitalWrite(o2, HIGH);
    delay(vr); 
    digitalWrite(o2, LOW);       

    digitalWrite(o2, HIGH);
    digitalWrite(o3, HIGH);
    delay(vr);
    digitalWrite(o2, LOW);
    digitalWrite(o3, LOW);          

    digitalWrite(o3, HIGH); 
    delay(vr); 
    digitalWrite(o3, LOW);   
    }     
  }  
}



DIDACTA
サンプルプログラム