質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

1903閲覧

ArduinoIDEのシリアルモニタが動作中に停止してそれ以降動かなくなる

abh

総合スコア2

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2023/03/01 10:38

実現したいこと

プログラミング初心者です.お助け下さい.
Raspberry Pi picoで温度制御するプログラムをArduinoIDEで開発したいです.
確認用のシリアルモニタが停止するので原因と改善策が知りたいです.

前提

使用ボード:Raspberry Pi pico
コード編集と書き込み:ArduinoIDE ver.1.8.16 (windows)
制御方法:PI制御
温度測定:K型熱電対モジュールAdafruit_MAX31855
出力:GPIO21(SSROUT)

状況

コンパイルしてシリアルモニタを開くと数ループ分表示がされた後何も表示しなくなります.
それ以降ケーブルを抜いてIDEの再起動とコンパイルを実施してもシリアルモニタが動くことが無い状態です.
シリアルモニタのみならず出力ピンも固まったままです.(LEDにて確認)
コンパイラエラーなどは発生しませんでした.

該当のソースコード

C++いけっ,糞コード

1#include<Adafruit_MAX31855.h> 2#include<SPI.h> 3#define TAR 59 4#define SSROUT 21 5#define CLK 18 6#define CS 17 7#define DO 16 8Adafruit_MAX31855 thermocouple(CLK, CS, DO); 9 10double u_t = 0; 11double temperature = thermocouple.readCelsius(); 12double p_ratio = 0; 13double s = 0; 14double s_time = 0; 15double d_former = (TAR - 20); 16double d_now = 0; 17static const double kp = 2.7; 18static const double ki = 0.005; 19 20void sendTemperature() { 21 Serial.print("T="); 22 temperature = thermocouple.readCelsius(); 23 Serial.println(temperature); 24} 25double proportional(double temp, double target) { 26 if ((target - temp) < 0) { 27 return 0; 28 } else { 29 p_ratio = (target - temp) / target * kp; 30 } 31 if ( p_ratio > 1) { 32 p_ratio = 1; 33 } 34 Serial.print("p_ratio = "); 35 Serial.println(p_ratio); 36 return p_ratio; 37} 38double integral(double temp, double target) { 39 d_now = (target - temp); 40 Serial.print("d_now = "); Serial.print(d_now); 41 Serial.print(" d_former = "); Serial.print(d_former); 42 s += (d_former + d_now) * ki / 2; 43 d_former = d_now; 44 Serial.print(" int. time = "); 45 Serial.println(s); 46 return s; 47} 48void setup() { 49 pinMode(SSROUT, OUTPUT); 50 Serial.begin(9600); 51 while (Serial.available())char t = Serial.read(); 52} 53 54void loop() { 55 sendTemperature(); 56 //Serial.println(Serial.available()); 57// s_time = integral(temperature, TAR); 58 u_t = proportional(temperature, TAR) *1000+integral(temperature,TAR); 59 if (u_t >= 1000) { 60 u_t = 1000; 61 } 62 Serial.println(u_t); 63 digitalWrite(SSROUT, HIGH); 64 delay((int)u_t); 65 digitalWrite(SSROUT, LOW); 66 delay((int)(1000 - u_t)); 67}

試したこと

PCの受信バッファが最大であることを確認
バッファクリアのためのコード挿入
Hello worldの繰り返し表示はうまくいきました.

本題とあんま関係ないお願い

コードに改善すべき点等ありましたら教えて頂きたいです.よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2023/03/02 02:24

数ループ分表示された出力を質問文に追記してください
thkana

2023/03/02 04:51

> コンパイルしてシリアルモニタを開くと数ループ分表示がされた後何も表示しなくなります. というのは、「コンパイル/書き込んで動作させると毎回そうなる」という意味でよいですか? 「数ループ分」は毎回同じ回数ですか? ばらつきがありますか? 極端にはあちこちにSerial.println(__LINE__); delay(10);でも入れて、どこで止まるのかみてみては。 (見た感じではthermocouple.readCelsius();の中身はわかりませんが「止まる」要素はなさそうな) > ケーブルを抜いてIDEの再起動とコンパイルを実施してもシリアルモニタが動くことが無い こちらの文を読むと、そのpicoは全く何も出来ない故障状態になったということのようにも思われますがどうなのでしょう。 「シリアルモニタ」はUSBシリアルが切れると接続が切れ、自動では復帰しません。「IDEを再起動」しているのなら大丈夫なはずですが、シリアルモニタを一旦閉じて開くとどうなるでしょう。 別途話が出ていますが、Teratermは(確か4.99以降?)USBシリアルに自動再接続するので、確認用にはこちらの方がよいかも知れません(ただし書き込み時に切断しておかないとシリアルを握ってしまう)
ozwk

2023/03/02 06:38

止まったように見えそうな点で言えば delayに負のint値を入れると符号なしに解釈されるので 長時間delayされそうだなと
thkana

2023/03/02 08:18

> コードに改善すべき点等ありましたら教えて頂きたいです 本人が糞とか言っているうちは見る気になりません。つまり自分で改善の余地があると言っているわけで、では先にそれをやってから他人に投げてください。
guest

回答1

0

ベストアンサー

シリアルモニタが止まるのなら、Teratermなんかでシリアルのモニタすればいいだけの話だけど、
シリアル通信が止まってしまってるだけ、ってことはないでしょうか

投稿2023/03/01 12:28

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abh

2023/03/06 09:10

回答ありがとうございました. teratermでモニタしたら動きました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問