前提
arduino IDEでTeensy4.1につながっているセンサーの値をfor文で1000回とり、シリアルモニタにそのデータをすべて表示させようとしています
Teensy4.1にはvinから5V電源を入れており、そのうえでusbを指しています
プログラム面は一切変えていないのですが、突然シリアルモニタがスタートしなくなりました
実現したいこと
- [ ]シリアルモニタにデータを表示させる
発生している問題・エラーメッセージ
プログラムをTeensyに書き込むことは出来るのですが、シリアルモニタがうまく動きません
該当のソースコード
Arduino言語(C++)
1#include<Wire.h> //I2Cライブラリ 2 3int a = 0; //ステートマシン用 4int i = 0; //センサの値の回数を数える(ディスプレイ用) 5int ii = 0; //センサの値の回数を数える(マジで100回数える) 6int c[100]; //脳筋作業をするかしないか選択 7float d = 0; //センサの値(小数ありをいれるとこ) 8int x; //displayの座標 9int y; //displayの座標 10int k = 0; //回数管理 11 12float pd_value[100]; //センサの値 13int pd_ratio[100]; //センサの値の割合 14 15/*ピンの名前を設定********************************************/ 16const int to_switch = 14; //スタート用トグルスイッチ 17const int ta_switch = 15; //タクトスイッチ 18 19//motor1 20const int M1_ENABLE = 0; //PWM(パワー設定) 21const int M1_PAHSE = 1; //digitl(正転、逆転設定) 22//motor2 23const int M2_ENABLE = 2; //PWM(パワー設定) 24const int M2_PAHSE = 3; //digitl(正転、逆転設定) 25//motor3 26const int M3_ENABLE = 4; //PWM(パワー設定) 27const int M3_PAHSE = 5; //digitl(正転、逆転設定) 28//motor4 29const int M4_ENABLE = 28; //PWM(パワー設定) 30const int M4_PAHSE = 29; //digitl(正転、逆転設定) 31 32void setup(void) { 33 Serial.begin(115200); // シリアル通信の準備をする 34 while (!Serial); // 準備が終わるのを待つ 35 Serial.println("プログラム開始"); // シリアル通信でメッセージをPCに送信 36 37 pinMode(13, OUTPUT); //Lチカ 38 pinMode(27, OUTPUT); //ラインLED 39 pinMode(to_switch, INPUT); // トグルスイッチ(スタート用) 40 pinMode(ta_switch, INPUT); //タクトスイッチ(計測用) 41 42 pinMode(26,OUTPUT); //A(ラインマルチプレクサでピン選択) 43 pinMode(25,OUTPUT); //B(ラインマルチプレクサでピン選択) 44 pinMode(24,OUTPUT); //C(ラインマルチプレクサでピン選択) 45 pinMode(23,INPUT); //ic1のセンサー値 46 47} 48 49void loop(void) { 50 if(a == 0) //一番最初にくるところ(リセットステート) 51 { 52 digitalWrite(M1_PAHSE,LOW); //正転 53 analogWrite(M1_ENABLE,0); //PWM Speed Control 54 digitalWrite(M2_PAHSE,LOW); //正転 55 analogWrite(M2_ENABLE,0); //PWM Speed Control 56 digitalWrite(M3_PAHSE,LOW); //正転 57 analogWrite(M3_ENABLE,0); //PWM Speed Control 58 digitalWrite(M4_PAHSE,LOW); //正転 59 analogWrite(M4_ENABLE,0); //PWM Speed Control 60 61 i = 0; //センサの値の回数を数える(ディスプレイ用) 62 ii = 0; //センサの値の回数を数える(マジで100回数える) 63 k = 0; //回数管理 64 65 66 digitalWrite(13,HIGH); //Lチカ 67 digitalWrite(27,HIGH); //ラインLEDオン 68 69 //一番右のラインセンサを選択 70 digitalWrite(26,LOW); //A(ラインマルチプレクサでピン選択) 71 digitalWrite(25,HIGH); //B(ラインマルチプレクサでピン選択) 72 digitalWrite(24,HIGH); //C(ラインマルチプレクサでピン選択) 73 74 if(digitalRead(to_switch) == 1) //ボタンがオンになったら計測を開始する 75 { 76// digitalWrite(M1_PAHSE,HIGH); //正転 77// analogWrite(M1_ENABLE,255); //PWM Speed Control 78// digitalWrite(M2_PAHSE,HIGH); //正転 79// analogWrite(M2_ENABLE,255); //PWM Speed Control 80// digitalWrite(M3_PAHSE,HIGH); //正転 81// analogWrite(M3_ENABLE,255); //PWM Speed Control 82// digitalWrite(M4_PAHSE,HIGH); //正転 83// analogWrite(M4_ENABLE,255); //PWM Speed Control 84// delay(1000); //一秒待つ(モーターが全速力で回るまでまつため) 85 a = 10; //計測スタート 86 } 87 } 88 else if(a == 10) //スタートボタンが押されたら 89 { 90 for(int i=0; i<=1000; i++) 91 { 92 pd_value[i] = analogRead(23); 93 }; 94 a = 20; //データを表示 95 } 96 else if(a == 20) //集めたデータを表示 97 { 98 for(int i=0; i<=1000; i++) 99 { 100 Serial.println(pd_value[i]); 101 }; 102 a = 30; 103 } 104 else if(a == 30) 105 { 106 if(digitalRead(ta_switch) == LOW) 107 { 108 a = 20; //計測データをみる 109 }; 110 } 111 112 if(digitalRead(to_switch) == 0) 113 { 114 a = 0; //すべてをリセット 115 } 116}
試したこと
-簡単なシリアルモニタを動かすプログラムを入力→シリアルモニタは作動
int counter = 0; // counterという名前の変数を用意して、0をセットする void setup() { // 起動後、この中の内容が上から順に1回実行される Serial.begin(115200); // シリアル通信の準備をする while (!Serial); // 準備が終わるのを待つ Serial.println("プログラム開始"); // シリアル通信でメッセージをPCに送信 // 最後まで実行された後はloop関数に移行する } void loop() { // setup関数が終了すると、この中の内容が上から順に何度も実行されつづける Serial.print("カウンターの値 "); // シリアル通信でメッセージをPCに送信 Serial.println(counter); // シリアル通信でカウンターの値をPCに送信 counter = counter + 1; // カウンターの値を1増やす delay(1000); // 1000ミリ秒(1秒)待機 // 最後まで実行された後はloop関数の先頭に戻る }
-シリアルモニタが表示されないコードの"while (!Serial);"をコメントアウト→それ以降のプログラムは動くようになるが、シリアルモニタは表示されない
-パソコンを再起動
補足情報(FW/ツールのバージョンなど)
ですので、私はシリアルモニタの準備が永遠にできていないと思うのですが実際は何が原因なのでしょうか?
解決方法を教えていただけるとありがたいです
ようしくお願いします!!
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/08/26 05:18