Arduino初心者熱烈大歓迎質問スレ part22
■ このスレッドは過去ログ倉庫に格納されています
Serial.readStringUntil()はhex扱えませんか?
0x05などの制御コードがcharでは文字化けしてしまいます >>689
IOエキスパンダーのライブラリに無かったら
自前でpulseIn関数作るしかないんじゃないの?
I2C経由で入力監視して変化するかtimeoutで抜ける数行で済むようなものだけど
I2Cのオーバーヘッドあるから精度落ちるかもね >>691
10進数読みならその0x05のENQは
ただの5として認識されそうではあるけど化けるのか
バイナリで読ませてstring(変数,HEX)で一旦変換した方が
扱いやすくはあるかもね
制御文字のライブラリとか案外ありそうだけど探してみるのも手
arduino control characterとかでググってみ それぞれ2個ずつもっている、arduino、 xbee、xbeeシールド、を差し替えxbeeシールド1を使った時にXCTUで認識できない事が部品の差し替えで分かりました。シールドが良くないことが何となく分かったのですがどこが悪いのか調べる方法はあるのでしょうか。 スケッチをBluetoothモジュールを使って書き込めますか? やったことないけどsppでつないであったらcomポート指定すれば行けそう。 英語の情報がありました!
シリアルポートとして使うんですね arduino UNOかDueで、メインループに影響を与えずにシリアル通信する方法はありませんか?
例えば、送信データをスタックに積んでおいて、別枠で順次シリアル送信する、みたいな。 ハードウェアシリアルの送信バッファが1バイトなんだから
そのスタックから送信バッファに入れる処理は避けられん
そしてハードウェアシリアルはそう実装してある 割り込みでスタック読んで送信すりゃいいじゃん
スタックに入れるのは必要な処理後 割り込んだら割り込み処理終わるまでメイン止まるんじゃないの? リングバッファー介して
Data Register Empty
Transmit Complete
のどっちかの割り込み使えば良いじゃん 2つのマイコンを使って外部メモリでデータを共有するしかないな >>706
共有できたとしてその情報やりとりするルーチン回したらメイン止まるんじゃないの? いや、最初からそのメモリ上で作業するってことやねん そのメインルーチンってさ
周期決めてねーのかよ?
周期の概念なくテキトーに質問してんだろ?
だから割り込みでメイン止まるとか抜かしやがる あれって最後までいったら即最初に戻ってまた走り出すんじゃなかったのかよ そういうのもあるけど、定期的な割込みでフラグ立てて、それを監視して立ったときだけ処理をすれば
単純な無限ループで定時性を持ったつくりにできる どうせBASICでBGM鳴らそうとしたら
音が途切れ途切れになって困る程度の
インタプリタ的処理脳しかないんだろう 周期決めても割り込みかかったら一緒じゃん。
だから割り込みっつーんだから。
RTOSみたいなosじゃないと厳密には無理なんじゃないかと。 デュアルコアのESP32ならコア0にメインやらせて同じメモリからコア1が読み取って送信とか出来るけども
>>700はUnoかDueって書いてるから>>701の通り そもそもメインループってなんや
loop関数のことか? >>701
やっぱりダメですかorz
20kS/sのA/Dデータを拾いたかったのですが、
何も考えずにシリアル送信は、帯域的にも、タイミング的にも厳しく、
DMAコントローラ的な何かがあればいける?と夢を見ましたorz マイコンが何MHzで動いてると思ってんだ?
20kS/s拾うのに200kHz食われたってメインループに影響するわけないだろ
テキトーに影響食らう作り方でしか作れないから、影響受けると思い込んでるだけだろ >>722は、20kサンプル/秒で取ったデータをシリアルで送れるかどうかで悩んでいるのだろな。 だからメインだろうが割り込みだろうが
処理を排他的に作る頭しかなけりゃ、それが限界だろう
だから割り込みかければメイン止まるとかアホ抜かす シリアル出力バッファにスタック(FILO)使うヤシが居ると聞いてw
20kS/sのADしたデータが各2バイトだとすると320kb/s
調歩同期とかのシリアルで出すには苦しいか
データシートでスペックみてみ ああ、2バイトだと上下見分けるための仕掛けも要るな
(送信単位が8bitの場合) 短い制御ループ時間の中でゆっくりシリアル通信する話だろ? >>722
その程度のデータのシリアル送信ならできる
プログラムのセンスがないだけ Serial.begin が 115200bpsまでで
10ビットのA/Dデータを毎秒2万、つまり 200000bps に足りてないので
Arduino の枠組みでは無理じゃねーの そもそもデフォルトのAnalogReadじゃ20kspsとれないし質問者もレジスタ直接叩けるでしょ
つまりArduinoの関数でやる必要はない
それに328PのADCって10bit精度なの15kspsまでだし高速化してるなら1byteでいいっしょ
そしたら160kbps以上あれば間に合うぜ
UARTでも何とか送れるんじゃないか とりあえず問題は解決しました。力技も甚だしいですが・・・
DueのNativeUSBの"仮想"COMポートの転送レートを
必要なレートまで上げて、馬鹿正直に送信するようにしました。
>>724
>>730
シリアルの転送レートが足りなくて、そこで処理時間を浪費してたんですよね。
基本的にマルチタスクなんて望むべくもないので、
普通にやったら影響を受けると思うんですが、いい方法がありますか?
単純計算でも帯域が足りないので、魔法が要りますが・・・
>>725
>>727-729
>>731
そうなんです。
転送レートが足りないので遅延で死んでましたorz
>>732
レジスタ叩くのはできるってレベルじゃないです(汗
掲示板とかの情報を漁って辛うじて、ですね。
もうちょっとちゃんとデータシートを読まないと。。。
ADCの速度でbit数が異なるのは知りませんでしたorz いや、自分で上8ビットだけつかえってことだよ
1バイトづつだけ転送に使い、MSBとその上は捨てる TSOだ、平たく言うとタイムシェアリングオペレーション!
TSOOSですべてTSO配下
物理メモリを論理メモリとして扱う。これです!
割り込みの概念がなくなる!かな? そもそも
高速センサー→Arduino→シリアル入力のなにか
Arduino経由する価値あんの?このシリアル入力のなにかってArduino以下な糞に
リアルタイムな高速データが本当に必要で有効活用できるのか? 質問です
パソコンとarduinoをシリアル通信させて、パソコンでキー入力するとarduinoが動作するものを作りました
しかし、キー入力を行えない状況になってしまい、パソコンからarduinoに命令をする代案を用意しなくてはならなくなったのですが、どのような方法がありますか?
元々は、パソコンでシリアルモニタに'a'と入力するとarduinoに配線したモータが回転する、というものでした もう一台Arduinoを用意して、そこにキーボードを付けて、元のArduinoとシリアル通信する。 補足すると、モータを動かすのを自動化しないといけないので、キーボードを打つという動作そのものを行えません
パソコンにシリアル通信プログラムを書く、というのは、例えば
serial.print('a');
と書けばarduino側にaと送信されるということですか? >>742
そういうこと
もちろんarduino言語ではないけどな >>743
ありがとうございます
その線で調べてみます 「モータを動かすのを自動化しないといけない」 わかる
「パソコンから信号を送らなければならない」 絶対必要条件なのか??? >>742
要するにWindowsのアプリ作れってことや そのアプリへの指示はどうするんだ?
入力デバイスがないのだろ? 人からの操作無しで自動で動くならパソコンと繋げる意味は…?
Arduinoにその動きも含めて書き込んでしまえば良いのでは >>742
PC側プログラムを Arduino ノリでやりたいなら、 Processing Arduino serial でぐぐれば良いよ
Arduino IDE と似たような画面でスケッチ書いてRunするだけだから簡単
PC側が serial.read するサンプルが多いけど、 write も普通にできる
あと、Arduino に bluetooth モジュールつければ Androidスマホの無料アプリで何種類かの文字送れる奴あるから操作できる
詳細は android arduino ラジコン操作 でぐぐる Arduino IDEはProcessingで作られてるんじゃなかった?
こっちのスケッチも.inoじゃなくて.pdeのままだった時代あったよな 発音「プロセッシング」だと思ってたけど「プロセシング」なんだね
アイドリングと同じイントネーションだった Arduino Duemilanoveってなんて読むの? アルドゥイーノ デュエミラノーヴェ
Uno=1, Due=2 Mila=1000 Nove=9
Duemilanove = 2009 表音文字なのに読み方がわからないなんて
アルファベットは糞欠陥文字だな 同時にいろいろやろうとするとArduinoの関数は落とし穴だらけだから難易度高いよ
普通にCで実現するくらいのスキルがないと無理 ardunoの関数ってソースあるんだっけ?
それが読める位でないと無理だな >>742
「自動」ってもっと具体的にどうしたいんだか書かないと誰にもわからないよ。
ただシーケンスを延々繰り返すだけなら、パソコン自体要らないだろう。 >>756
まずはラテン語を勉強してから文句を言おう ATmega1284の2つ目のシリアルって指定する時はもしかしてserial1? SSD1306のライブラリでフォント変えるとprintlnの一行目が変…
どうなってんの >>765
むしろこっちが聞きたいわw
どうなってんだよ >>766
今調べたらデフォのフォントと変えたフォントで表示の基準の位置?が違うらしい
adafruitのライブラリなんだけど何でこんな仕様なの… u8glibにしたらprintlnがCR LFって表示された
上手くいかんのう パソコンのケースファンをpwm制御して回す
要は扇風機を作ろうとしています
ボリュームスイッチを付けて風量を256段階切り替え出来る機能を付けようと思ってます
これだけだとマイコンを使う意義が薄いですが
aruduinoにACアダプターで12Vを入力しVinピンからケースファンへ給電していますが、何アンペア流していいのですか?
ケースファンを複数台付けて最大で10A位を目論んでいます >>772
中華Arduinoか?載ってるレギュレーターがSOT-223のAMS1117-5.0だろうから
データシートによるとCurrent Limit 900mAでThermal ResistanceがTja=90℃/Wとあるな
http://www.advanced-monolithic.com/pdf/ds1117.pdf
ヒートシンクはついてないだろうから計算にはTjaをそのまま使うとして
OPERATING JUNCTION TEMPERATURE RANGEが-40 to 125℃とあるから
室温が25℃の状態で上昇出来る温度は100℃だからTjaから100/90=1.11...Wまで
12V入力だとドロップ7Vなわけだから1.11.../7=0.15873A
そのままで150mAくらいだな クソデカヒートシンクつけて冷却ファンつけてガンガン冷やせば900mA ごめんめっちゃ勘違いしてた
5Vを給電してるわけじゃなくて12Vをそのままひっぱってるのか
>>773は無しで
それならたぶんピンソケットの定格であろう3Aくらいだと思う ピンヘッダの接触と基板のパターンどっちが細いかな?
俺ならあの接続に1Aすら流したくないけどな DCジャックからVinまでのパターンってなんか普通の信号線程度じゃない?
DCジャックを別に用意してそこからFANとArduinoに渡した方が良いと思うけど。 (12V10Aが供給できるACアダプターってどんなんだろう…ジャックの定格を越えてる気が…) 電子工作で1A流すのにビクビクしてる俺が通りますよ 14cmのバカでかいケースファンでさえ400mA定格なんだけど、
どんなんだったかと思ってまわしてみたらかなりの風量だ。
10Aってこれ25個分か、ホバリングでもさせるんかいなw >>772の件だとケースファンって言ってるからもしかしたら(電源の他は回転数だけ取れる)3ピンの方で電源ラインをPWMで電圧調整じゃないと行けなくね?
4ピンの回転数制御が可能なファンならただの信号線だから12V電源をスイッチングしてPWMでなくともいいかも知れないけど。
まあそれでも1つのファンで数アンペア流れることは無いけど。
自分も4ピンの方を弄りたいけど手持ちにそんないいマザボがないから12Vなのかロジック5Vなのか分からんのだよね。 どんだけの風が必要なんだよって話で、消費電力は換算しての例え話だからいいのさ。 話としては、Arduinotoとは並列に別の太い線で電流取ればいいんでね?ってことでもう済んでるでしょ。 電源は別で取って
コントロールだけアルデュイーノ
こんな感じじゃないの?
基板に10A無理じゃない?
仮にできても長持ちしなさそう 沢山の回答ありがとうございます
シールドを自作する予定でしたので、DCジャックを付けてaruduino経由させずに電源を取るようにします
仕事柄サーバーの廃棄品が出るのでそのファンがすごい電力食いなんです
木炭の火起こしには重宝しました
こんなの
https://i.imgur.com/NPhLpEq.jpg >>788
4.8Aのファンは初めて見たw
さぞかし爆音なのだろう ■ このスレッドは過去ログ倉庫に格納されています