Arduino初心者熱烈大歓迎質問スレ part26

レス数が1000を超えています。これ以上書き込みはできません。
0001774ワット発電中さん2020/01/16(木) 12:45:18.22ID:Re+Ydp+z
http://www.arduino.cc/

【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
 詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね

前スレ

Arduino初心者熱烈大歓迎質問スレ part25
http://rio2016.5ch.net/test/read.cgi/denki/1568358922/

過去スレ


Arduino初心者熱烈大歓迎質問スレ part24
https://rio2016.5ch.net/test/read.cgi/denki/1554776918/
Arduino初心者熱烈大歓迎質問スレ part23
https://rio2016.5ch.net/test/read.cgi/denki/1541233445/
Arduino初心者熱烈大歓迎質問スレ part22
https://rio2016.5ch.net/test/read.cgi/denki/1534549073/
Arduino初心者熱烈大歓迎質問スレ part21
https://rio2016.5ch.net/test/read.cgi/denki/1527252804/
Arduino初心者熱烈大歓迎質問スレ part20
https://rio2016.5ch.net/test/read.cgi/denki/1514503488/
Arduino初心者熱烈大歓迎質問スレ part19
http://rio2016.2ch.net/test/read.cgi/denki/1500745528/
Arduino初心者熱烈大歓迎質問スレ part18
http://rio2016.2ch.net/test/read.cgi/denki/1485192244/
Arduino初心者熱烈大歓迎質問スレ part17
http://rio2016.2ch.net/test/read.cgi/denki/1471967293/

0952774ワット発電中さん2020/03/26(木) 07:49:22.97ID:WEmszck/
割り込みって
現状を維持して
割り込み処理が終わったら再開だよね?

0953774ワット発電中さん2020/03/26(木) 08:09:20.51ID:dtY8+1+8
>>949
ずっとセンサーの値を取得してて3秒毎にLCD表示してたりしてます
今は停止中だけど3G回線でクラウドに3分毎にデータ送信してたりするので
タイミングがぶつからないようにしなきゃならないです…
しばらく放置してたら3ヶ月通信無しって事で データSIMが
自動解約されてましたw
ネット繋がってればdatetimeとか使えるからアレなんですけど…
>>951
そう…2つ使ったらかなりやれること増えますね…
でも1台でやれるとこまでやってみたいです

0954774ワット発電中さん2020/03/26(木) 08:59:25.45ID:ToI4vXt0
>>948
OSがメモリマネジメントしてないから
現代的OSとアプリの関係ではなくDOSアプリ作るようなもんだけど、若者にはイメージ伝わらないよね

0955774ワット発電中さん2020/03/26(木) 10:27:28.20ID:hhAEwYS3
>>953
メイン
・lcdtime>30 で表示処理
・表示終わったらlcdtime=0
通信など
ループ

割り込み 0.1秒
・lcdtime++
・モーター作動ならmotertime++
・motertime>300 ならモーター停止
・モーター作動処理

割り込み使うまでも無いレベルだが、やるとすればこんな感じ

0956774ワット発電中さん2020/03/26(木) 12:37:04.26ID:BXmKgQyd
初心者です
質問があります

Leonardo のリセットボタンを押してもLのledが一切光らないのは異常ですか?
Boorloaderの異常ではないかと公式サイトにあったのですが、先日買ったときからこの調子です

書き込もうとしても、コンパイル後に書き込み開始されるとcomポートが認識されなくなります。書き込みまでは正常で、書き込み開始後にデバイスマネージャーから突然消えます。
ポートやボードの設定は合ってます。

書き込み前にリセットボタンを押しておいて、書き込み開始後に離すことで認識させることはできたのですが、いざ書き込もうとしてもprogrammer is not respondingとなり、一切スケッチが書き込めません。

買ってから一度も使えておらず、返品を考えています。ご教授願います。

0957774ワット発電中さん2020/03/26(木) 14:02:02.02ID:BKXHT26C
>>953
3秒毎に表示、3分毎に送信ってのは
マイコンにしてみたら手持無沙汰もいいとこ
暇で暇で鼻くそほじってるわw

0958774ワット発電中さん2020/03/26(木) 14:07:43.03ID:O13boCV3
>割り込みだとメインループを中断して割り込んでしまうので…
>あっ…実は割り込み使ったことないんです…
>使ったことないので先入観で出来ないと思っちゃったのかな…
>うーんやっぱりマルチタスクっぽい動作は無理なのかな…
何だコイツ?

0959774ワット発電中さん2020/03/26(木) 14:09:35.03ID:eKrVFTRM
WS2812Bのテープ
https://www.aliexpress.com/item/33038968774.html

これの0.5m 30 IP30を注文したけど、本当に30個あるのかな
0.5m 30買った人のレビュー写真みたら15個っぽいけど・・・
https://ae01.alicdn.com/kf/U81c6dc705b2d4edaaf117bc3a24dd79cJ.jpg

0960774ワット発電中さん2020/03/26(木) 14:09:55.33ID:eKrVFTRM
>>959
誤爆スマソ

0961774ワット発電中さん2020/03/26(木) 14:31:36.08ID:dtY8+1+8
>>952
はい…僕もその認識で 割り込みが入ったらメインループは
一時停止で割り込みの処理が終わったら再開だと思ってたんですが…

0962774ワット発電中さん2020/03/26(木) 14:55:02.82ID:FGL/Cdny
>>952 >>961
それであってる。
マルチコアとかの特殊なアーキテクチャーでなければ、CPUは普通は1つの命令しか同時には実行できない。
複数の処理が平行に途切れなく実行されてるように見えるかどうかはプログラムの工夫にかかっている。

0963774ワット発電中さん2020/03/26(木) 14:58:59.86ID:dwU2Zz9+
>>956
返品して下さい。

0964774ワット発電中さん2020/03/26(木) 15:28:15.65ID:4KaAx12q
>>961
どういうタイミングで何がやりたいかフローチャートにでも書いてから出直して
それ無しに何を語っても無意味

0965774ワット発電中さん2020/03/26(木) 15:40:35.14ID:BXmKgQyd
>>963
ありがとうございます
返品しました。

0966774ワット発電中さん2020/03/26(木) 16:11:00.58ID:dtY8+1+8
>>964
割り込み無しで簡略化して書いてみます
int val = sensor.value;
int total_val = 0;

void loop() {
 lcd.print(val);
 total_val += val;
 delay(3000);

if (total_val > 100) { // センサー値合計が100を超えたら…
 digitalWrite(2, HIGH); // 30秒間モーターをONしたい
***ここで30秒間モーターを動かし終わるまで待たずに
  回しっぱなしでloopの頭に戻りたい そして30秒後に
  自動的にモーターは停止したい***

と、書いていて気づいたのですがモーター回転中もセンサー合計値が
蓄積していくとすぐにまたif文に掛かりそうで ループを一時中断したほうが
都合がいいのかもしれないと思い始めました…

0967774ワット発電中さん2020/03/26(木) 16:23:06.56ID:7flbM6dt
>>966
フローチャートも書けないのかw

0968774ワット発電中さん2020/03/26(木) 16:27:55.40ID:zKLXl5Sx
>>966
割込み有りで書いてみ、即座に解決するから

0969774ワット発電中さん2020/03/26(木) 16:31:28.14ID:MYhJFhFl
>>ID:dtY8+1+8
タイマー割込みだと言われてもそれについて調べもしないから
あなたの場合は回答もらっても無意味だね

0970774ワット発電中さん2020/03/26(木) 16:41:34.71ID:Z3t5mFik
https://www.aliexpress.com/item/32820135156.html
これ買ったけど
AT+TYPEが0だったのでAT+TYPE3って送信したら
AT+TYPE=0
OK
って返ってきて全然OKじゃないんだけど!!

0971774ワット発電中さん2020/03/26(木) 16:51:42.84ID:dtY8+1+8
うーん…タイマー割り込み調べて>>962さんと
同じ結論に至って無理そうかなって聞いてみたのに…(´;ω;`)

0972774ワット発電中さん2020/03/26(木) 16:57:05.05ID:tUVWqnk3
>>966
digitalWriteでポートをオンにしたらオフにするまでそのまま保持するはずだが?

0973774ワット発電中さん2020/03/26(木) 17:02:36.56ID:MVC0cauS
>>971
理解するのが難しいかねえタイマー割込みは
メインの処理は同時には出来ないけど数のカウントは同時に複数できてそれがタイマー
既定の数数え終わったら終わりましぜって教えてくれるのが割込み
教えてもらったらモーター止めるのはメインの処理

0974774ワット発電中さん2020/03/26(木) 17:06:51.37ID:S8yTKGmy
delay(3000)なんて使わずにmillisで時間を確認し経過時間に応じてif文で処理すれば良いんじゃねーの

割込み使っても良いけど

0975774ワット発電中さん2020/03/26(木) 17:22:57.80ID:HJ/+uYno
あと割り込みの使い方として、懸念されてる様に割り込み中はループが止まるから
割り込みの中ではフラグを立てたりしたらすぐ復帰する様にして、本処理は
ループの方で割り込みのフラグが立ってたらと処理する

0976774ワット発電中さん2020/03/26(木) 17:22:58.30ID:S8yTKGmy
タイマー割込みならモーター始動と同時にタイマースタートして割込み関数でモーター停止とタイマーストップすれば出来るだろうし

MsTimer2というライブラリがある

0977774ワット発電中さん2020/03/26(木) 17:28:31.23ID:WEmszck/
横で済まないが
タイミング的に絶対割込みさせたくない部分では
禁止にする方法とか
それが済んだら割込み処理とかってできる?

0978774ワット発電中さん2020/03/26(木) 17:28:43.67ID:MVC0cauS
delayは使いたそうだからライブラリではTimerOneとMsTimer2
モーターがサーボなんだかPWMなんだかわからなかったけど
ただぶん回すだけみたいだからどっち使ってもいいね

0979774ワット発電中さん2020/03/26(木) 17:31:09.53ID:MVC0cauS
>>977
タイマー止めればいい
割込み禁止も可能

0980774ワット発電中さん2020/03/26(木) 17:31:53.10ID:MVC0cauS
あ、もちろんその後再開も可能

0981774ワット発電中さん2020/03/26(木) 17:40:07.42ID:WEmszck/
ありがとう
考えてみます

0982774ワット発電中さん2020/03/26(木) 18:00:36.23ID:FGL/Cdny
>>977
http://www.musashinodenpa.com/arduino/ref/index.php?f=0&;pos=3155
割り込みを禁止すると割り込みで動作している動作は一切止まるので注意(うっかりdelayとか使うと戻って来なくなるぞ)。

0983774ワット発電中さん2020/03/26(木) 18:08:35.99ID:FGL/Cdny
あごめん、戻って来なくなるんじゃなくディレイが無くなるようだ(即戻る)。

0984774ワット発電中さん2020/03/26(木) 18:12:01.56ID:Z3t5mFik
AT+TYPE1は設定できることを発見した
でもペアリングは無理っぽい

0985774ワット発電中さん2020/03/26(木) 18:18:41.60ID:dtY8+1+8
ああ…たくさんヒントありがとうございます…
なんとなく流れが理解できました
頑張ってみます!

0986774ワット発電中さん2020/03/26(木) 18:40:32.00ID:Q3aT8Idz
なんとなく結論出てるみたいだけど
まず、基本的にArduinoではWindowsやLinuxみたいなマルチスレッドみたいな機能は無い
なので、自分でスレッドスケジューラみたいな仕組みを作る必要がある
でも本格的にスレッドの仕組みなんか作ると大変だしプログラム容量も大きくなるので
実行したい処理と処理にかかる時間を定義して、各々の処理をどのタイミングで実行
するかを決めたタイミングチャートを作って一連の処理を行うループを作成するってのが
屁理屈なんだけど
一応「arduino マルチスレッド」でググると色々出てくるし

http://asukiaaa.blogspot.com/2016/06/arduino.html

見たいな例もあるみたいよ

0987774ワット発電中さん2020/03/26(木) 20:06:17.03ID:4GR8hH7E
Arduinoを使うのであれば とりあえず↓のライブラリを見ておけば作業が捗る
https://www.arduinolibraries.info/categories/timing
https://playground.arduino.cc/Main/LibraryList/#Sched

0988774ワット発電中さん2020/03/27(金) 00:58:37.49ID:fZYxdiYc

0989774ワット発電中さん2020/03/27(金) 08:06:53.77ID:gENL9DRK
風呂をちょっと

0990774ワット発電中さん2020/03/27(金) 09:12:01.61ID:HFUTIdDW
割り込みの負荷を下げる工夫ってある?

0991774ワット発電中さん2020/03/27(金) 09:37:03.25ID:VgZmWh5+
割り込み中ではフラグだけ立てて、メインでフラグをチェックして処理

0992774ワット発電中さん2020/03/27(金) 09:38:02.92ID:yKuoZjLX
負荷多いと思ってる根拠は?

0993774ワット発電中さん2020/03/27(金) 10:02:11.33ID:HFUTIdDW
>>991
やっぱ、Arduinoでもそんな感じですかね〜

>>992
一般的にって事です。

0994774ワット発電中さん2020/03/27(金) 12:37:24.48ID:qNkQzqmV
>>990
ISRだけはアセンブラで書く

0995774ワット発電中さん2020/03/27(金) 14:06:12.22ID:oWkpjGJQ

0996774ワット発電中さん2020/03/27(金) 15:02:29.20ID:ZgbgR+dv
>>990
自分じゃ何も調べずに適当な質問を数撃ちゃ当たる方式で投げてるだけだろコイツ

0997774ワット発電中さん2020/03/27(金) 17:03:04.93ID:KxXSQY6Y
>>996
そうね
きっとコイツ >>903>>912 だと思うわ
荒らしは相手にしないのが一番

0998774ワット発電中さん2020/03/27(金) 17:18:05.05ID:ZgbgR+dv
>>991の回答も意味不明なんだが
会話が成り立ってるところがまた笑える。

0999774ワット発電中さん2020/03/27(金) 17:41:11.30ID:fmsABj7P
>>998

>>991の回答が解らないとはあんたは割込処理中にどんな記述してるんだ?
割込処理内ではフラグだけ立ててメインループでポーリングしてフラグ監視するのは基本じゃね

スタックやリソースの競合や多重割込のことを考えると
割込処理内で複雑なことするとデバッグするのが大変だろうに

1000774ワット発電中さん2020/03/27(金) 17:46:10.10ID:kGG2rPAp
>>998
お前みいなクズは分からなくてもいいよ

10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 71日 5時間 0分 52秒

10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php

レス数が1000を超えています。これ以上書き込みはできません。