#define SLIT4_PIN 13 #define SLIT3_PIN 12 #define SLIT2_PIN 10 #define SLIT1_PIN 11 #define LEDG_PIN 9 #define LEDY_PIN 8 #define LEDR_PIN 7 #define BASE_PIN 6 // #define STAGEL_PIN 5 // #define STAGER_PIN 4 #define COUNT_PIN 2 //割り込み用ピン #define angle_pin 0 #define vol_pin 1 #define cur_pin 2 #define mvol_pin 3 // 割り込みループで使用する関数でモータ回転数をカウントする変数 volatile unsigned int mcount; void setup() { pinMode(SLIT1_PIN,INPUT); pinMode(SLIT2_PIN,INPUT); pinMode(SLIT3_PIN,INPUT); pinMode(SLIT4_PIN,INPUT); pinMode(LEDG_PIN,OUTPUT); pinMode(LEDY_PIN,OUTPUT); pinMode(LEDR_PIN,OUTPUT); pinMode(BASE_PIN,INPUT); // pinMode(STAGEL_PIN,INPUT); // pinMode(STAGER_PIN,INPUT); pinMode(COUNT_PIN,INPUT); Serial.begin(9600); } // 割り込み処理 void m_count() { mcount = mcount + 1; } //メインループ void loop() { int voltage; int mvoltage; int current; int angle; unsigned long vol; unsigned long cur; unsigned long mvol; int n; unsigned long t1; unsigned long t2; unsigned long tt; int slit1; int slit2; int slit3; int slit4; int cancel; //********右旋回 登り坂 ゲート1 ********************************************************************* // while(1){ // if(digitalRead(STAGER_PIN) == HIGH) break ; // } slit1 = digitalRead(SLIT1_PIN) ; slit2 = digitalRead(SLIT2_PIN) ; if (slit1 == HIGH && slit2 == HIGH){ // ゲート信号OKなので測定可能 //準備 vol = 0; mvol = 0; cur = 0; n = 0; mcount = 0; digitalWrite(LEDG_PIN, HIGH); //入口スリット while (slit1 == HIGH) { // 入口スロットの通過を待つ slit1 = digitalRead(SLIT1_PIN) ; digitalWrite(LEDG_PIN, HIGH); } t1 = millis(); // 入口スロットの通過時刻 attachInterrupt(0,m_count,FALLING); // 割り込みを有効にする digitalWrite(LEDY_PIN, HIGH); //出口スリット while (slit2 == HIGH) { // 出口スロットの通過を待つ。この間に電圧と電流を測定する voltage = analogRead(vol_pin); current = analogRead(cur_pin); mvoltage = analogRead(mvol_pin); vol = vol + voltage; mvol = mvol + mvoltage; cur = cur + current; n = n + 1; slit2 = digitalRead(SLIT2_PIN); } t2 = millis(); // 出口スロットの通過時刻 detachInterrupt(0); // 割り込みを無効にする angle = analogRead(angle_pin); //傾斜台の角度を読む cancel = digitalRead(BASE_PIN) ; //キャンセルボタンをチェックする if (cancel == LOW){ angle = 9999; } //出力処理 tt = t2 - t1; String buf = String(vol)+","+String(cur)+","+String(mvol)+","+String(mcount)+","+String(n)+","+String(tt)+","+String(angle)+",U,"+ ",E"; Serial.println(buf); digitalWrite(LEDY_PIN, LOW); delay(500); } else { digitalWrite(LEDR_PIN, HIGH); //ゲート不良の信号 delay(500); digitalWrite(LEDR_PIN, LOW); } //********右旋回 下り坂 ゲート2******************************************************************** // while(1){ // if(digitalRead(STAGER_PIN) == HIGH) break ; // } slit3 = digitalRead(SLIT3_PIN) ; slit4 = digitalRead(SLIT4_PIN) ; if (slit3 == HIGH && slit4 == HIGH){ //準備OK vol = 0; mvol = 0; cur = 0; n = 0; mcount = 0; digitalWrite(LEDG_PIN, HIGH); //入口スリット while (slit3 == HIGH) { // 入口スロットの通過を待つ slit3 = digitalRead(SLIT3_PIN) ; digitalWrite(LEDG_PIN, HIGH); } t1 = millis(); // 入口スロットの通過時刻 attachInterrupt(0,m_count,FALLING); // 割り込みを有効にする digitalWrite(LEDY_PIN, HIGH); //出口スリット while (slit4 == HIGH) { // 出口スロットの通過を待つ。この間に電圧と電流を測定する voltage = analogRead(vol_pin); current = analogRead(cur_pin); mvoltage = analogRead(mvol_pin); vol = vol + voltage; mvol = mvol + mvoltage; cur = cur + current; n = n + 1; slit4 = digitalRead(SLIT4_PIN); } t2 = millis(); // 出口スロットの通過時刻 detachInterrupt(0); // 割り込みを無効にする angle = analogRead(angle_pin); //傾斜台の角度を読む cancel = digitalRead(BASE_PIN) ; //キャンセルボタンをチェックする if (cancel == LOW){ angle = 9999; } //出力処理 tt = t2 - t1; String buf = String(vol)+","+String(cur)+","+String(mvol)+","+String(mcount)+","+String(n)+","+String(tt)+","+String(angle)+",D,"+ ",E"; Serial.println(buf); digitalWrite(LEDY_PIN, LOW); delay(500); } else { digitalWrite(LEDR_PIN, HIGH); //ゲート不良の信号 delay(500); digitalWrite(LEDR_PIN, LOW); } //********左旋回 下り坂 ゲート1 ********************************************************************* // while(1){ // if(digitalRead(STAGEL_PIN) == HIGH) break ; // } slit1 = digitalRead(SLIT1_PIN) ; slit2 = digitalRead(SLIT2_PIN) ; if (slit1 == HIGH && slit2 == HIGH){ // ゲート信号OKなので測定可能 //準備 vol = 0; mvol = 0; cur = 0; n = 0; mcount = 0; digitalWrite(LEDG_PIN, HIGH); //入口スリット while (slit2 == HIGH) { // 入口スロットの通過を待つ slit2 = digitalRead(SLIT2_PIN) ; digitalWrite(LEDG_PIN, HIGH); } t1 = millis(); // 入口スロットの通過時刻 attachInterrupt(0,m_count,FALLING); // 割り込みを有効にする digitalWrite(LEDY_PIN, HIGH); //出口スリット while (slit1 == HIGH) { // 出口スロットの通過を待つ。この間に電圧と電流を測定する voltage = analogRead(vol_pin); current = analogRead(cur_pin); mvoltage = analogRead(mvol_pin); vol = vol + voltage; mvol = mvol + mvoltage; cur = cur + current; n = n + 1; slit1 = digitalRead(SLIT1_PIN); } t2 = millis(); // 出口スロットの通過時刻 detachInterrupt(0); // 割り込みを無効にする angle = analogRead(angle_pin); //傾斜台の角度を読む cancel = digitalRead(BASE_PIN) ; //キャンセルボタンをチェックする if (cancel == LOW){ angle = 9999; } //出力処理 tt = t2 - t1; String buf = String(vol)+","+String(cur)+","+String(mvol)+","+String(mcount)+","+String(n)+","+String(tt)+","+String(angle)+",D,"+ ",E"; Serial.println(buf); digitalWrite(LEDY_PIN, LOW); delay(500); } else { digitalWrite(LEDR_PIN, HIGH); //ゲート不良の信号 delay(500); digitalWrite(LEDR_PIN, LOW); } //********左旋回 登り坂 ゲート2******************************************************************** // while(1){ // if(digitalRead(STAGEL_PIN) == HIGH) break ; // } slit3 = digitalRead(SLIT3_PIN) ; slit4 = digitalRead(SLIT4_PIN) ; if (slit3 == HIGH && slit4 == HIGH){ //準備OK vol = 0; mvol = 0; cur = 0; n = 0; mcount = 0; digitalWrite(LEDG_PIN, HIGH); //入口スリット while (slit4 == HIGH) { // 入口スロットの通過を待つ slit4 = digitalRead(SLIT4_PIN) ; digitalWrite(LEDG_PIN, HIGH); } t1 = millis(); // 入口スロットの通過時刻 attachInterrupt(0,m_count,FALLING); // 割り込みを有効にする digitalWrite(LEDY_PIN, HIGH); //出口スリット while (slit3 == HIGH) { // 出口スロットの通過を待つ。この間に電圧と電流を測定する voltage = analogRead(vol_pin); current = analogRead(cur_pin); mvoltage = analogRead(mvol_pin); vol = vol + voltage; mvol = mvol + mvoltage; cur = cur + current; n = n + 1; slit3 = digitalRead(SLIT3_PIN); } t2 = millis(); // 出口スロットの通過時刻 detachInterrupt(0); // 割り込みを無効にする angle = analogRead(angle_pin); //傾斜台の角度を読む cancel = digitalRead(BASE_PIN) ; //キャンセルボタンをチェックする if (cancel == LOW){ angle = 9999; } //出力処理 tt = t2 - t1; String buf = String(vol)+","+String(cur)+","+String(mvol)+","+String(mcount)+","+String(n)+","+String(tt)+","+String(angle)+",U,"+ ",E"; Serial.println(buf); digitalWrite(LEDY_PIN, LOW); delay(500); } else { digitalWrite(LEDR_PIN, HIGH); //ゲート不良の信号 delay(500); digitalWrite(LEDR_PIN, LOW); } }