Arduino初心者熱烈大歓迎質問スレ part24
■ このスレッドは過去ログ倉庫に格納されています
>>502
>コマンド文字列が途切れる
その心配、どういう場面で必要?
入力者が心臓発作で死んだときとかか? >>503
setTimeoutって引数はlongだろう?
ひと文字打つのに2147483.647秒以上かかるって死人以外に考えられんよなあw
まあ、ターミナル・ソフトの設定方法すら自分で調べてみようとせずに、
その前提で物を語り、他人に押し付けてくるあたり、人間性に欠陥があるとしか思えんから死人より迷惑だがな。>>ID:Q1ifHZDO >>503
例えば文字列で「on」という命令を一文字ずつ送ったときに
「o」と「n」の二つの文字列に解釈されて
命令が無効になってしまう
以下のコードは>>494の書いたことをもとに実装したものだが、
「on」+SENDでは通るが
「o」+SEND+「n」+SENDでは通らない
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.setTimeout(2);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available()>0)
{
String str = Serial.readStringUntil(';');
if(str.equals("on"))
{
Serial.println("ACCEPT");
}else{
Serial.println("DENY");
}
}
} 普通に質問です。
PCのスピーカーにダイソーの300円スピーカーをつないでいるのですが、
よく電源を切り忘れます。
そこで、音声乳力があれば即座に電源ON、
音声乳力が数分間なければ電源OFF、
電源OFF時はマイコンをスリープさせておいて、外部割り込みINT0、INT1の2,3ピンで
スリープ解除させたいです。
2,3はデジタルピンですが、PCにの音声乳力を感知できるのでしょうか?
また、オペアンプなど必要になるのでしょうか? >>506
基本事項を学び直してから出直しなさい。
いろいろおかしすぎて説明できません。 >>507
音声がマイコンのON/OFFの閾値を超えてるかどうかですね。
そのスピーカーで調べてみてください。 >>505
>setTimeoutって引数はlongだろう?
長いtimeoutを設定すると、timeout が発生するまで戻ってこないのではないの?
いつコマンドが送られてくるかわからない場合に長いtimeoutを設定して、
loop内でreadStringUntil()を呼んだら、 readStringUntil() が loopを独り占めだね! >>503
前提として、timeout を長く設定していいと考える人と、そうでない人の違いじゃないですかね。
なにかにつけ、なんだか罵倒だけして詳しく語ろうとしない人ってコミュニケーションが成立しないので困ります。
詳しく語れば、自分のボロも出ますので、メリットありますよ。 >>509
そもそもターミナルの改行設定に関係していると思ってる時点で
とても恥ずかしい勘違いをしていると思う
いま話しているのはシリアル通信の話で、このサンプルに
CRもLFも出てきていない
このスケッチは改行なしの設定を前提にしている 罵倒するヒマがあれば >>514みたいに伝える努力をする方がいいのにね。
仲悪くなくコミュニケーションする方がスキルアップができると思うのだ。 >>501
>ターミナル・ソフトの使い方も知らずにSerial.readを語ってたのか
えー? 俺が>>499で書いた
「行単位で送信する方法がわからないよ」
を見て
「ターミナル・ソフトの使い方も知らずに」になるの?
ターミナルソフトの使い方がわからないんじゃなくて、TeraTermで行単位で送信する方法がわからない、って話なんだけどな。
何かのソフトはまあたいていの状況でうまく使えている場合に、ある操作、設定がわからないときに
「そのソフトの使い方もしらずに」とは言わないよな。
これは、
「Arduinoのシリアルモニタみたいな、1行ごとの送信という流儀なら、
timeout を小さく設定していても readStringUntil() でも問題は生じにくい、って話」
に乗っかったことなんだ。
CRもLFも関係ないのだけど。 >>475の通り、コマンドなんか一文字で渡せば必要十分で
Timeoutを伸ばすより副作用だって少ないわけで
無駄話だってのは承知している
でもなんていうか、職業プログラマとしていうけども
「これを使えばらくちん!」って知識を覚えるのは楽しいけれども
仕事に本当に役立つのは
「そのらくちんなツールに裏切られる条件」のほうなんだよ!( ノД`)
だからついつい熱が入ってしまうんだよな >>465はプログラムを作る上で知っておかなければならないごく自然な疑問だと思うのだが。
それに対する反応が理解できないなあ。
どうやったらそんなに遅く入力できるのかといった次元の話ではなく、プログラミングでは
起こり得る全ての状態に対して動作を決めておく必要があるのだと思うけど。 >>517
応用が効かないとか、ひとつ憶えになったら自分を苦しめるとかありますね。
>>518
>どうやったらそんなに遅く入力できるのかといった次元の話
それは、Timeoutを無制限に長くしていい、という前提というか、文化のもとでの
考え方なんでしょね。 >>ID:Q1ifHZDO
>>512を読めば、あなたがreadStringUntil()の使い方すら調べていないことが明らか。
なので他のレスもまともに取り合う価値は無く、これ以上は時間の無駄と判断します。
>>514
あなたは未だにあの動かないスケッチの話をしてたんですか。
それは失礼しました。 >>512
面白いねえこの人
readStringUntil()がなぜUntilとついててでなぜ引数が必要なのか考えないんだね
何でSerial.read, Serial.readString, Serial.readStringUntilという一連の関数があるの? 真夜中発表の練習問題の答えってもう出たんだっけ?乗り遅れたか >>521
全然話が違うよ。
>>512で言ってるのは、 readStringUntil() の引数文字が来るかどうかじゃないんだけどわかってないな。
readStringUntil() を呼び出したときに、たとえば、何も文字が送られてこないケースだよ。 いや
俺も楽しみにしていたがトンズラした模様
にしても>>429のブログで完結してるのにここの連中はよくやるw
もういいからStream.cpp読めよと >523は IDが変わったけど、俺です。
>>520も>>521と同じような錯覚してるな。きっと。
>>512に対して
「指定した終端文字が送られてきたら戻ってくるのがreadStringUntil()だ」
という視点に固まってしまってるような気がする。 横からだけど
>readStringUntil() を呼び出したときに、たとえば、何も文字が送られてこないケースだよ。
それは呼び出す以前に処理しておくべきの問題。
あんたの前提が変だから永久に話がかみ合わない。 >>525
>「指定した終端文字が送られてきたら戻ってくるのがreadStringUntil()だ」
>という視点に固まってしまってるような気がする。
だってそうだもの。
そうでないならその関数は不要、readStringでいい。 わざわざメモリさいて終端コード指定してreadStringUntil()の機能を前提としないなら無意味。 >>526
>それは呼び出す以前に処理しておくべきの問題。
そうなんだよな。
たとえば、Arduino側から何かに対してデータをリクエストして、プロトコルにおいて
「リクエスト受信後○○m秒以内に、コレコレのレスポンスを返す」
というふうに決められているケースでは、タイムアウト付きでreadStreamUntil()は簡潔に使える。
でも汎用のコマンド待ち受け用に使うのにはあまり良い選択じゃない、と思うんだ。 >そうでないならその関数は不要、readStringでいい。
いやいや、readString() も文字が送られてこないケースでは、いたずらにtimeout待ちをしてしまいます。 ターミナルのCRとかLFとかでいろいろ言ってた人は、理解の行き違いに気づいてくれたかな。 そもそもそういうケースで使うものです。
あなたが勘違いしてるだけでreadStreamUntil()の引数の意味は他に無いです。
老婆心ながら、人としての印象保ちたければ、話をこれ以上そらさない方がいいですよ。 文字が送られてきてもtimeout待ちをするんですけどね。readString() >>533
これ、発端はArduinoからリクエストするわけではない、コマンド待ちの応用に
readStringUntil()でよし、って話なったんですよ。 >>534
こいつ、無能なくせにへこたれないなw
身近にいなくて幸せだわ。 >>490の疑問については ID:SUuf8O1Y さんのおかげで>>529で解決しました。ありがとう。
ここですね使いどころは。
マシン相手のレスポンス受信なら、途中で途切れるリスクは(人間+ターミナル相手に比べると)
低いから>>506のような心配も軽いわけだし。 >>509の>>506に対する評価はどういう理由なのか謎。
せっかくのソースなんだし、どこがどうだ、って話をすればいいのにな。
俺は、試行の趣旨からいって、readStringUntil()を呼ぶ前に、受信バッファのチェック
しているのは、悪くないと思う。 >>539
そりゃあ良かったじゃないか。
何がどう解決したのかさっぱり分からんが、良かった良かった。
次からはReferenceちゃんと読めよ。 >>540
いろいろ前提が不明だね。
送り側の終端コードの設定が不明だしSENDって何だよって話もある。 >>541
っていうか、ソースコード見て議論してるよ。 >>542
SENDは同一IDの>>502を見れば、Arduinoのシリアルモニタの送信ボタンだと思われますよ。
俺の環境だと日本語表示にしてるので「送信」ですけど。
わさとタイムアウトさせたときの検証だから、そのソースの中のreadStringUnit()
の引数文字にはたぶん意味なし。 >>543
>ソース見て議論
それどのレス?
ここまでソース見てない議論ばかりでしょうに >>544
それ、おかしい。
”;”となってるから全部通らないはず。
シリアル・モニターで終端に”;”なんて選べない。 >>546
ソース見てればわかると思うのですが、指定した終端文字が来なくてもタイムアウトで
終わるんです。この実験はタイムアウトさせてるわけなので。
readStringUntil()の当該部分のソースですが、次のようになっています。
-------------------------------------------
while (c >= 0 && c != terminator)
{
ret += (char)c;
c = timedRead();
}
-------------------------------------------
timedRead()は、文字を受け取ることができずにタイムアウトすると、-1を返します。 >>542
セミコロンを終端文字にしたのは、シリアルモニターの設定は改行なしにして
実験するので、timeoutを20秒とかにのばした時に途中で切り上げるには
別の文字じゃないと都合が悪いから。
SENDは送信ボタンの意です。 >>549 ご本人登場ですか、乙
じゃ
>例えば文字列で「on」という命令を一文字ずつ送ったときに
>「o」と「n」の二つの文字列に解釈されて
>命令が無効になってしまう
はどういう意味っていうか前提? >>546
CRやLFを入れると、送信ボタンを押したときに必ずそれらがついてしまう。
oとnを別々に送信したい場合は、改行なしにしておかないと
o\rn\rとか送信されちゃう。
タイムアウトを20秒にした時でも、セミコロンにしておけば
o+SEND+n+SEND+;+SENDで
タイムアウト発生前にonを送信できます。
(セミコロンは自動で除去されます)。 >>548
わざわざありがとうw
それは私でもそう書くので…。 他人が書いたソースコードを読み切るのって難しいものです。
読めよオラオラって感じの人自身も読み切れてないことも多いと思うんですよ。
そんな感じの人がちゃんと読めてなかったら恥ずかしい思いをするかもしれません。
一緒に読み解こうぜ、って感じで取り組めたらいいですね! >>550
タイムアウトの値を20000にした時と、2にしたときで、それぞれ
1)o+SEND+n+SEND
2)on+SEND
の動作を比較してみてください。
シリアルモニターの改行コードは改行なしに設定してください。
20000の場合は20秒待たなければいけないので、待てない場合は
入力可能な最低限の時間まで短くするか、最後に;+SENDしてください。
2にした場合には、oのあとnを入れる前にタイムアウトが発生し、
oだけが判定処理に送られてしまうので、DENYになります。
次の判定時にはnしかバッファに残っていないので、やはりDENYになります。 >>554
そりゃ、スケッチの挙動はその通りなんだろうけど、2msにする必然性を知りたいですわ。
何故そんな極端な設定にしてまで、その結果生じる不都合を想定する必要があるのかってこと。
普通じゃそんなこと起こらないでしょ? >>555
2msにした理由は、>>494が書いたことがもとになっています。
実際、2)のように2文字同時に送った場合
2msでもACCEPTになるわけで、短すぎるわけではないです。
電子工作ではバイナリのサイズも問われるので、
あまり予防的な処理に注力すべきではない、というのも
理解できます。
ですがI/Fの部分は他人との分業も多く発生するわけで、
仕事なら仕様書を書かないといけないケースも出てきます。
これをやられたらマズい、というのは、把握しておくべきかと。 全然関係ない話なんだけど。
ブレッドボードみてたら、これにLCDつけて
適当な配線をいろいろ生やして
時限爆弾解除ゲームとか作れないかな・・・とか・・・
寝ます。 >>556
申し訳ないですが、何言ってるのか全然分からないです。
2msにしてタイムアウトになる場合について聞いてるんですけど?
なぜそんなに短くする必要があるのかと。
>2にした場合には、oのあとnを入れる前にタイムアウトが発生し、
>oだけが判定処理に送られてしまうので、DENYになります。
と書かれている件です。 えーっと、ターミナルソフトの設定で、まとめて送信する設定にした場合と、
1文字ずつ送信する設定にした場合がごっちゃに語られてて、意味が全くわからないです。
そもそも、どちらの場合ももっと長い時間設定でいいんじゃないかと思います。
短くする意味を知りたいです。 >>557
あ、もう結構です。
どうでもいいことだと思えてきたので、上のレスもすべて取り下げます。
おやすみなさい。 個人的には、Arduino限定じゃないですが、キーボードやシリアルから
期待する書式の文字列を取得する関数を作るときは、それをコールしたときに
・その時点で取得できていたら、その文字列を返す
・その時点で取得できてなかったら、即もどってくる
って感じにしています。
2m秒にしてあるのは、そういうことができればなあ、という目的なんじゃないですかね。 > >2にした場合には、oのあとnを入れる前にタイムアウトが発生し、
> >oだけが判定処理に送られてしまうので、DENYになります。
> と書かれている件です。
>>554の、「2にした場合」を「2)の場合」と読んでしまうと混乱してしまいます。
「2m秒にした場合」ですね。たぶん。
それならDENYになる理由がわかると思います。 >>561
それなら今度はreadStringUntil()を使う意味が無い
なぜreadStringUntil()を使ったスケッチを出してきた?
ずっと傍観してるけど、もう永久にループだなw
自分で何が問題か気付くまで放置するしかないなこの人は
>>562
はあ、日本語が通じてない模様w
2msにしてタイムアウトする理由じゃなくて、
なぜ明らかにタイムアウトしてしまうような設定にするかを聞いてるんだと思う
>なぜそんなに短くする必要があるのかと。
>そもそも、どちらの場合ももっと長い時間設定でいいんじゃないかと思います。
>短くする意味を知りたいです。 たぶんねえArduino側じゃなくて、ターミナルソフトの設定が出来ないんだと思うよ、この人
だから無意味にスケッチをこねくり回してる
>>468, >>499, >>516
そうでもなけりゃreadStringUntil()の存在意義を全く理解してないかどちらか
いずれにしても私の理解の範疇には無いわ >>563
>なぜreadStringUntil()を使ったスケッチを出してきた?
あとから来た人にはわからないかもしれないですが >>537で書いた通りですよ。
話がループしているのは、コマンド待ち用途にreadStringUntil() を勧める話が
あったことを認識していないからじゃないですかね。
>なぜ明らかにタイムアウトしてしまうような設定にするかを聞いてるんだと思う
それは>>556で説明されています。 >>564
実際のところ、通信まわりは自前で作ることが多いので、readStringUntil()の使いどころは、
ピンときませんでした。>>539で書いた通りですよ。
>readStringUntil()の存在意義を全く理解してないかどちらか
>いずれにしても私の理解の範疇には無いわ
これはすごいですね。
「readStringUntil()の存在意義を全く理解してない」ことはあなたの理解の範疇にないぐらい
あり得ないことなんですね!それぐらいreadStringUntil()の存在意義は理解されて当たり前のことである、と。
readStringUntil() の存在意義、使いどころ、使わない方がいいところなどを教えていただけませんか?
よく分かっている人の説明は勉強になりますよ。 というわけなので、
readStringUntil()を使い、ターミナルソフトをその仕様に合わせれば済み
ハイ終了。 >>567
>>429でそれを理解した質問者はもうとっくに居ないのに
理解力が無い連中は140スレも消化してまだ屁理屈たれながら堂々巡り
なかなか大変ですw >>564
それたぶん図星だね。
にしても、>>516の
>何かのソフトはまあたいていの状況でうまく使えている場合に、ある操作、設定がわからないときに
>「そのソフトの使い方もしらずに」とは言わないよな。
は泣く所だぞ、ティッシュなしには読めないw
ちゃかしちゃいかん。 なんでこんなぐだぐだやってんの?
長々とやってる割にecho backの有無も出ていないようだけど >>570
なんでってお前、理解力が無い奴ばかりだからに決まっとろうが
分かりきったこと聞くなや
で、echo backがどうしたって? ブルドーザー工作基本セット買ってきて
組み立て終わってスレ覗いたら
まだやっててワロタw
あげくターミナルソフトの使い方がわかってないとか
よくわからんいちゃもんつけられてるしw
しょせんハードウェア同士で一対一でシリアル通信するのに
CR/LFもエコーバックもねえよw
Arduinoとパソコン通信()でもするつもりかよw
やりたきゃやればいいけど、やらなくても別に誰にも迷惑かけないだろw
バイトストリームが流れてきてバッファが受け止めてくれてる、
もともとただそれだけだろうよ、シリアル通信ってw
送信側と受信側での取り決めに齟齬がなければ何でもいい、そうだろ?
だもんでこっちは初心者らしく、ステッピング&DCモーターモジュールと
ESP32-DevKitでWiFiリモート制御にチャレンジしようと思いまーす!
たーのしー! とりあえずシリアル通信云々の流れ飽きたからよそでやってくれない? コンポジット出力はArduino本体だけで出来るん? カメラのビデオ出力(コンポジットの黄色いやつ)を無線で飛ばしてテレビに映したーい
RF 315/433MHzとか、2.4GHzのnRF24L01とか、bluetoothとかで送受信できる? >>578
これでおk
電波法については知らん
https://www.あmazon.co.jp/dp/B005HMM5MM/ref=cm_sw_r_cp_apa_i_muSdDbCT1QSE6 >>579
そうそう!これです!
これを手持ちのパーツで作りたいのです!
これってどういう仕組なんだろう・・・ >2.4 ghz アナログワイヤレス 7 インチカラーモニター
>動作周波数: 2400-2483.5 mhz 標準: 2370 mhz
>伝送距離: 50 メートル
>圧縮フォーマット: MPEG 4 ビデオ
>送信周波数: 18 dBm
>伝送速度: 12 Mbps
>FHSS: 周波数ホッピングスペクトラム拡散
>ホッピング率: 1200/S
2.4GHz帯っていうのは検索で出ました
Mpeg4の圧縮伸張とか、8ビットマイコンじゃ無理だわ・・・ >>575
お前が来なきゃいいだけだろ、真正の馬鹿 >>581
ESP32にカメラの付いたモジュールもあるが
こういうのはRaspberry-Piだな AdafruitのHUZZAH32ってESP32モジュールが
リチウムポリマー充電対応で便利みたいだね
自走するロボットとかだとArduinoをバッテリー駆動しなきゃ
いかんのだけど、電源の確保って思ったより大変みたいで 屋外で6時間に1回5分だけリレーを動作(灌漑ポンプを動かしたい)させたいんだけどArduino(Aliexpressの格安互換機)って屋外においておくと腐食する?
長期間屋外においてる人がいたらその対策とか教えて欲しい
あと100VからUSBの5Vに変換して使う予定だけど、万が一の暴走や発火を考えてヒューズとか使ったほうがいい?
やってる人いたらアドバイス貰えるとありがたい バイクに2年ぐらい取り付けてるけど、特に問題ないなー
ACアダプターにヒューズ入ってるからいらないんじゃね? >>585
腐食とか気にするんならコーティング剤とか売ってるよ >>585
一度は切れたログ取りのために普通のヒューズ入れておいて切れたら内容によってはリセッタブルヒューズでもいいだろうし
まぁどこまで何を考えるのか目的がわからないけど
構成によってはwdtも設定したほうがいいだろうし
arduinoってwdtのライブラリとかあるのか知らないけどw >>585
水廻りだとヤバイんじゃね
手ごろなタッパ入れて配線のとこはホットボンドで密閉推奨
ガーデンライト3年経過してもきれいだった
ちょっとでもスキマあると虫が侵入するので注意な >>585
ヒューズは100V側に0.2Aをいれたほうがいいと思う
5V-2Aと仮定して >>585
中途半端な密閉は湿気入って結露したりでろくな事がない。作ったやつで山頂からデータ飛ばしてるのがあるんだけど中華ナノで2リットルペットボトルを被せてるだけなんだがノーメンテで3年目。
wdt設定してるが今のところ一度も落ちずに連続稼働中。 初心者質問です。やさしく教えてください。
3~5接点のロータリースイッチ5個ほど同時に使いたいのですが、他のスイッチとの兼ね合いでピン数節約の為アナログ入力を使おうかと思ってます。
可変抵抗器をイメージしてこんな回路で組んでます。
https://imgur.com/YfrGDLm
ロータリースイッチ一個につき一回路使い、アナログ入力範囲に応じてスイッチ位置を判定しようかと思うのですが、どんな問題が考えられるでしょうか?
ネット調べるとこんな回路が紹介されていたので私の回路では何か問題があるのかとおもうのですが。。。
https://synapse.kyoto/tips/ResDiv/page001.html >>592
とりあえず思ったのはスイッチを操作して遷移中の値が不定である
人間から見たら一瞬でカチッとなっててもマイコンから見たら相当な時間、想定されない信号が入力される
んで、そのスイッチがノンショーティングタイプなのかショーティングタイプなのかで対策が変わってくる >>592
問題ないと思う。
アナログ入力は時間かかることだけ
わかっていれば。 >>592
ディジタル入力なのにアナログを使うのはちょっと気持ち悪い
私なら74HC148あたりを使うかな
スイッチ複数押したらどうなる? >>595
ロータリースイッチは複数押せないだろう >>593
ショーティングタイプの時は、遷移時低抵抗側、ノンショーティングタイプの場合、遷移時最低抵抗ポジションですね。
ショーティングタイプの方がよさそうですね。
>>594
用途上問題無い気がしますが注意してみてみます。
>>595
596さんの言う通り問題無さ気です。
初心者には汎用ロジックIC?はハードル高いです。
マトリックス回路で補完しようかとも思ったのですが、配線が面倒なので今回は抵抗分圧方式でトライしてみます。
皆さん、ご回答有難う御座いました。
最近ギスギスしてたので不安だったのですが、みなさん優しくてホッとしました。 >>599
Arduinoを使うけどプログラミングはする気無い
って最初に書くべきだな
普通はそう思わないからさw >>599
どっちも微妙に違う
ショーティングタイプのときは遷移時は並列抵抗になるから中途半端な電圧になる
ノンショーティングのときはその回路だと最低抵抗ではなくハイインピーダンスになる ■ このスレッドは過去ログ倉庫に格納されています