少し複雑にしたスケッチである。
障害物までの距離を測りながら動く。
距離はつないだパソコンの画面で見える。
ほとんどを変数化してvoid setup()の前にグローバル変数とした。
だから、値は変えられる。
まとめてあるので、探し回る必要もない。ただ変数名が何を示すのかを覚える必要がある。
本当は説明文が必要である。(//以降は説明文だ。
voidの中で使う変数はローカル変数で他のvoidでは使えない。
----------------------------------------------
#include <Stepper.h>
const int sPin1 = 4;
const int sPin2 = 8;
int mati0 = 500;
int hayasa0 = 180;//速さ、整数倍で360
int kaitensu = 100; //1回転のステップ数 整数倍で360
int nagasa0 = 100;
int tuusin = 9600;
Stepper myStepper0(kaitensu, sPin1, sPin1 + 1, sPin1 + 2, sPin1 + 3);
Stepper myStepper1(kaitensu, sPin1, sPin2 + 1, sPin2 + 2, sPin2 + 3);
//---------------------
int TRIG = 3;
int ECHO = 2;
double duration = 0;
double distance = 0;
double speed_of_sound = 331.5 + 0.6 * 25; // 25℃の気温の想定
//---------------------
void setup() {
//------------------------
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite( TRIG, HIGH );
delayMicroseconds( 10 );
digitalWrite( TRIG, LOW );
duration = pulseIn( ECHO, HIGH ); // 往復にかかった時間が返却される[マイクロ秒]
//-------------------------------
myStepper0.setSpeed(hayasa0);
myStepper1.setSpeed(hayasa0);
pinMode(ECHO, INPUT );
pinMode(TRIG, OUTPUT );
Serial.begin(tuusin);
}
void loop() {
for (int i = 0; i <= nagasa0; i++) {
digitalWrite(TRIG, LOW);
delayMicroseconds(1);
digitalWrite( TRIG, HIGH );
delayMicroseconds( 1 );
digitalWrite( TRIG, LOW );
duration = pulseIn( ECHO, HIGH ); // 往復にかかった時間が返却される[マイクロ秒]
duration = duration / 2; // 往路にかかった時間
distance = duration * speed_of_sound / 10000;
Serial.print("Distance:");
Serial.print(distance);
Serial.println(" cm");
//******************
if (distance < 10) {
myStepper0.step(kaitensu);
myStepper1.step(kaitensu);
}
else if (distance < 10) {
myStepper0.step(kaitensu);
myStepper1.step(kaitensu);
}
delay(mati0);
for (int i = 0; i <= nagasa0; i++) {
//if (duration > 0) {
duration = duration / 2; // 往路にかかった時間
distance = duration * speed_of_sound * 100 / 1000000;
Serial.print("Distance:");
Serial.print(distance);
Serial.println(" cm");
//}
myStepper0.step(-kaitensu);
myStepper1.step(kaitensu);
}
delay(mati0);
}
}