Arduino側のプログラム(スケッチ)
#include <Servo.h> unsigned long mytime = 0; unsigned long hittime; unsigned long duration; boolean sensorBool = false;//センサ計測制御用 boolean servoUp = false;//servo上下のBool int input_value;//A1入力値 Servo myservo;//サーボ設定 int kaisu = 0; // 角度のカウンタ max10で使うのは8がいい int power;//サーボ動作速度 unsigned long startTime;//タイマー用 int servoTime; void stageReset() { myservo.write(0);//最大斜度にする(リセット) delay(5000);//最大斜度になるのを待つ //約4度傾けて水平にする servoUp = true; power = 180; startTime = millis(); servoTime = 3200; kaisu = 4;//4度にセット } void setup() { Serial.begin(9600); myservo.attach(9, 1000, 2000); mytime = millis(); stageReset();//ステージ水平にする } void mysend() { Serial.println(duration);//シリアルに計測時間送る } void loop() { //回転間隔計測 input_value = analogRead(1); if (sensorBool) { if (input_value < 70) {//3.3V is under 70 is read sw ON sensorBool = false; hittime = millis(); duration = hittime - mytime; mysend(); mytime = hittime; } } else if (!sensorBool) { if (input_value > 300) { sensorBool = true; } } //サーボ動作 if (servoUp) { if (millis() > startTime + servoTime) { servoUp = false; } myservo.writeMicroseconds(map(power, 0, 255, 1500, 2000)); } else if (!servoUp) { myservo.writeMicroseconds(map(0, 0, 255, 1500, 2000)); } } void serialEvent() { if (Serial.available() > 0) { byte var = Serial.read(); var = var - 0x30;//16進数でくるので16進数のゼロひく switch (var) { case 1://stage UP if(kaisu > -1){ servoUp = true; power = 180; startTime = millis(); servoTime = 700; kaisu--; } break; case 2://stage Down if(kaisu < 8){ power = -180; servoUp = true; servoTime = 700; startTime = millis(); kaisu++; } break; } } }