Arduino初心者熱烈大歓迎質問スレ part21
■ このスレッドは過去ログ倉庫に格納されています
http://www.arduino.cc/
【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね
【分裂騒ぎ】
おさまった模様。くわしくはぐぐれ。
前スレ
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/
Arduino初心者熱烈大歓迎質問スレ part16
http://wc2014.2ch.net/test/read.cgi/denki/1451909868/
Arduino初心者熱烈大歓迎質問スレ part15
http://rio2016.2ch.net/test/read.cgi/denki/1451893274/
関連スレ
【Arduino】フィジカル・コンピューティング4【OSC】
http://wc2014.2ch.net/test/read.cgi/denki/1407830304/
学研マイコン Japanino ジャパニーノで遊ぶスレ 3
http://kamome.2ch.net/test/read.cgi/denki/1286354827/ >>200
D:についてはネット上に割り込みのスケッチ例が見当たらないので
よく分からないままに質問してしまいました。すみません。
arduinoリファレンスが次のような感じなのですが、
(noInterruptsは書かないとして)
@にはvoid play()とだけ書いて本体は別の所に書くのか、
Aに({}で括って?)void play()以下全文書けばいいのか、
とかが分からないのです。
void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts(@)A;
// other code here
} 割り込み内はできるだけ短時間の処理だけにする
メイン処理で音再生して、割り込みでLED制御 >>204
その方が感覚的にも分かりやすいのでそうしたいと思います。
ということはこういう動作になるんでしょうか?
LED@点灯(約60ms以後同じ)【これも割り込みにしなきゃダメですか?】
メインの起動音再生(125usのdelay×480個分=60ms) 処理480回でFLG ON
割り込み文内でFLG ONを検知してLED@消灯、LEDA点灯、FLG OFFを割り込み
メインで引き続き起動音を再生(480個分=60ms)処理480回でFLG ON
割り込み文内でFLG ONを検知してLEDA消灯、LEDB点灯、FLG OFFを割り込み
メインで引き続き起動音を再生(480個分=60ms)処理480回でFLG ON
・
・ 割込み内で毎回delay入れるの?
何のための割込みだよ? ぶっちゃけ俺はおまえが何したいのか理解できてないんだよね
1つの長い音を再生中にLEDを60ms間隔で点滅させたいっていうなら、
タイマー割り込み60msで実行。割り込み処理はLEDオンオフ
メインは再生。再生終わったらタイマー割り込み終了 >>207
いや、世の中のゲームなど
めちゃくちゃメインで画像処理しまくりながら
64分音符の楽譜演奏かけてんのは割込みの方
メインの処理があろうが無かろうが
BGM再生プログラムを割込みで完結してしまってる方がこの先なんにでも使える >>190
自己解決した
SoftwareSerialはどのピンでも使えて基板配線での都合がいいけどServoの割り込みをちと妨害するぽい
オシロスコープでサーボ4つの各PWM信号を確認するとUART受信と被ったサーボのHIGH時間が少しブレている
Servoライブラリはタイマー1コで12個まで動かせるソフトウェアでの制御だからしょうがない?
ボーレートを上げれば割り込み占有時間が短くなるぽいけど高速にし過ぎるとデータロストが増える
なんでSoftwareSerialライブラリを使うのをやめてUSIのシフトレジスタを使って自前でUART(受信のみ)を実装した
割り込み時間が短く出来たからサーボの信号がブレてもデッドバンド幅に収まった 追記
USIのシフトレジスタのクロックにTimer0のコンペアマッチAを使うみたいだったから
動作モードをFastPWMからCTCに変更してプリスケーラも書き換えてしまった都合で
D5とD6のAnalogWriteが使えなくなったうえにdelayやらmillisが機能不全になった
ServoライブラリがTimer1を使ってるせいでD9とD10のAnalogWriteも使えなくなってるんだった
まぁ別にdelay使ってないからよし!! >>206
すみません、よく分からなくなってきました。
メインで起動音再生(1音毎に125usのdelay)
割り込みでLED点滅(480音毎のFLG ONが割り込み条件)なんですが…
これは割り込み内でのdelayになるんですか?
>>207
具体的には動画冒頭↓の再現です。
ロボットの初登場シーンの起動音とモノアイの動きを再現したいんです。
https://youtu.be/-yNXrEXfW-w >>212
ありがとうございます。
これはとても分かりやすいですね。早速ダウンロードしました。 >>211
横からだけど
(タイマー)割り込みの使い方がよく分かってないみたいだから
解説ページとか読んでみたり、サンプルプログラム動かしてみるのが先かも
なお、この程度の処理なら、割り込みとか使わずに全部loop()内に
記述しても(125us間隔が少しずれたりバラつくのを許容すれば)
そんなに大変じゃないと思います。 音声出力とかLED点滅は時間のかかる処理じゃないし、125usという比較的
短周期の割り込み処理で、フラグを立ててメインで処理するなんてむしろ
オーバーヘッドが大きくなる。
今回の場合は割り込み処理内で全部やるのが合理的と思うがな。
だから変数が複数バイトでも競合の心配はない。
音声のジッタを嫌うなら
・前回の割り込みで用意した音声データを出力する
・カウンタ++
・カウンタ=480ならLEDをON/OFFしてカウンタクリア
・次回の割り込みで出力する音声データを用意しておく
のような手順でやればOK。メインはLOOPのみ。 ナイトライダーみたいにLEDが並んでるんじゃないの >>214
レスありがとうございます!
タイマー割り込みで起動音とLチカ同時に出来ました!
(でもチカチカの頻度が明らかに少ないのですが…)
>>215
ありがとうございます。
割り込みについても引き続き勉強したいのですが、
アドバイスいただいた次の2点について詳しく教えていただけないでしょうか?
>前回の割り込みで用意した音声データを出力する
>次回の割り込みで出力する音声データを用意しておく
またarduino関連ではcountについての記述がないようです。
分かりやすいサイトもしくはキーワードだけでも結構ですので、
ご存知でしたら教えていただきたいのですが…
>>216
モノアイの動きを再現する、と言ったほうが正確かもしれません。
具体的には>>217さんの言うようにLED9個を順序よく点滅させて、
アニメ同様に残像で動いて見えるようにします。 或いはmp3モジュール使えば別に音出させた後なんてほっといていいんだし、むしろ音声の方を割り込みでやるのが合理的なのでは >>218
タイマー割込みかけて
かつ前レスのようにdelayかけてりゃ
次の割込みまで間に合わずに、処理数半減するじゃないか
割込みかけて処理終わったらそのままでいいんだよ
delay要らない >>218
俺が数年前にイベント用に作ったやつは
今点いている直前に点灯したモノアイをPWMでほんの一瞬残光として弱く点灯させるって方法を用いた
直前2個くらいこの動作ができると本当に動いてるように見えるよ、1個でもじゅうぶんだけど
すげーでっかいやつだったんで組み込みの苦労はまったくなかったんだけどね
その時はシフトレジスタだらけになった const unsigned char Zock01_raw[] PROGMEM = {
0x7f, 0x7d, 0x83, 0x7c, 0x7e, 0x83, 0x7d, 0x83, 0x82, 0x83, 0x82, 0x81,
0x7f, 0x7f, 0x80, 0x80, 0x79, 0x68, 0x76, 0x86, 0x8a, 0x8e, 0x86, 0x88,
・
・
0x81, 0x81, 0x7f, 0x80, 0x81, 0x7f, 0x80, 0x80, 0x7e, 0x7e
};
unsigned int Zock01_raw_len = 9682;
#include <MsTimer2.h>
void flash() {
static boolean output = HIGH;
digitalWrite(13, output);
output = !output;
}
void setup() {
pinMode(13, OUTPUT);
MsTimer2::set(100, flash);
MsTimer2::start();
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS20);
play();
}
void play() {
for (int i = 0; i < Zock01_raw_len; i++) {
OCR2B = pgm_read_byte_near(&Zock01_raw[i]);
▲ delayMicroseconds(125);
}
}
void loop() {
} >>220
このスケッチ↑で起動音+(チカチカの足りない)Lチカは出来たんですが、
▲の行を削ったらLEDは点灯のままで起動音も鳴らなくなりました。 >>221
それ良いアイディアですね! 動画はないんですか? >>224
納品まですげー勢いだったんで残ってないけど
似たような作例は探せばあるんじゃないかな >>222
Timer2とPWMはバッティングするんじゃ? あ、すみません、そのリンク先へ誘導したの私でした。
私もArduinoのタイマー詳しくないんで迷惑かけてるかも…。
いずれにしても、D3ピンのPWMで音を鳴らしているからTimer2を使っていると思う。
なので、LEDの方はTimer1を使えばいいと思う。
TimerOneというライブラリを探してみて下さい。 >>225
イベント用に納品ってことはプロの方ですか!?
>>226
arduinoのリファレンスには何も書いてないみたいですが
ここで教えていただいたブログには、13番・11番ピンの
PWM出力(analogWrite)不可と書いてありますね。
>>227
ご心配おかけしまして申し訳ありません。
タイマー他については勉強のために試行錯誤してるだけで
第一候補はDFPlayerですので大丈夫です。
なおTimer1でもPWM不可になるピンがいくつかあるようです。 >>228
私も自分の興味で勝手にやってるだけなのでお気になさらないでください。
ちょうどいいのでArduinoのタイマー割り込みをマスターしようというわけですので…。
今のところ、LEDの点滅をmillis();、つまりTimer0で、
音のPWMはあなたのリンク先の通りにD3ピンのPWM、つまりTimer2でそのまま、
音のタイミングの125msをdelayでなくTimer1でやってみています。
何とかうまくいきそうです。 >>222
これ音でなくLEDを割込みで処理してるパターンでしょ?
割込み処理内でdelay使うなっつってんだから、これは関係ない話
60msで処理したいっつってるくせに
割込みは100msになってるし
割込みでカウントしてフラグ立てて
メインでフラグ見て処理しろっつってんのに
ただのdelay使った棒プログラムに成り下がってる 92Zll0wrさんは、単にコピペでプログラム作って試すだけじゃなくて
コピペしたものの意味を理解するようにしたほうがいいかも
理解してるなら、>>223みたいな質問は出ないはず ちなみに、>>133あたりから読み直してみたんだけど、構想を実現したいだけなら
133のリンク先のテクニックの延長で可能ですね
正攻法は >>215さんの方法だと思いますが、音データの出力をDACではなくて
(割り込み周期と非同期な)PWMで出力しているので
125us周期が多少ずれても音質には関係ないと思うから、必ずしもこだわらなくてもいい
LEDの点滅周期(の半分)でタイマー割り込みをかけるのは、簡単だけど
貴重なタイマーがLEDの点滅にしか使えなくなっちゃうので
もっと短い周期で割り込みかけ、それをカウンタ(変数で数えて
この仕事は毎回・こっちは〇〇カウント毎・あれはXXカウント毎って
やるテクニックも覚えといたらいいですよ(Arduinoの関数とかはないです) >>233
最近の若いモンは「歓迎」の意味も言葉通りにしか捉えられんのか? 歓迎する(歓迎するとは言ってない)
まぁ老害だよなこういう考えは >>230
不快な思いをさせてしまって申し訳ありません。
たくさんいただいたアドバイスを全て実行する訳にもいきませんので、
失礼かとは思いますが、反対意見のあるアドバイスや
難しそうなのは後回しにさせてもらっています。
>>231
お言葉を返すようですが、8000Hzでサンプリングしてるので
1音につき125usのdelayが必要だということは分かっています。
(初レスに添付した参照ブログに書いてありましたので…)
ただdelay不要とのアドバイスをお二方からいただいたので
(スケッチ1行消すだけで済みますし)試しにやってみただけです。
(その1行を復活させたら今度はLEDが点灯したままになってしまいましたが…)
>>234
詳しいご説明ありがとうございます。とても分かりやすいです。
いい勉強になりました。感謝。
あの…もしお分かりになるようでしたら>>215さんのアドバイスの意味を
ご教示いただけると助かるのですが…
>前回の割り込みで用意した音声データを出力する
>次回の割り込みで出力する音声データを用意しておく
countを解説しているサイトもご存知でしたらお願いしたいです。
>>237
プラモの腕前のほうも全然なので、そこは何卒ご勘弁を… カウント、countはただの変数名でしょ
int count;
〜〜〜
count++;
if(count > 100)
{
count =0
//カウントが100を超えたらやりたい処理
} 外付けモジュール無し、delay無し、タイマー割り込みだけでやってみたよ。
https://youtu.be/KPYiKuEduhE
いい練習になりました、ありがとう。 >>238
>>215さんじゃないですが
「次回の割り込みで出力する音声データを用意しておく」のは
用意するのに、それなりに時間を要する場合があることを想定しているのだと
思います。
まあ、>>198のコード内では
pgm_read_byte_near(&sample_raw[i]); 程度のことなんで
割り込みかかってから必要データをもってきても問題ないと思いますが
もっと割り込み周期が短い場合とか
SDカード・i2cのEEPROM なんかに音声データ入れてる場合は
そういう配慮が必要になるはずです。
もっとも、後者の場合は次の1データだけ用意しておくのじゃなくて
ある程度のまとまったデータを用意することになると思いますが・・・ >>241の「もっと割り込み周期が短い場合」というのは間違いで
「割り込みのタイミングに対して、データを出力するまでの時間が
短い(あるいは一定)であることを要求される場合」というほうが
正しいのかな >>239
ありがとうございます。業界的にはありふれた変数なんですか?
arduinoリファレンスに載ってないのが不思議ですが。
>>240
わお!スゴい。やりたかったの正しくコレ〜!
音もウチのより格段に良いですね。スピーカーは何を使われました?
もしマナー違反でなければ是非ともスケッチを見せていただきたいのですが…
>>241
そんな配慮・テクニックが必要になる場合もあるんですね。
もしかしてDFPlayer(第一候補)使う場合はその配慮って必要ですか? 業界的にっていうか、プログラミング全般でよくやることだけどw
特にcountにする必要はなくて、cntでもkauntoでもaでもbでも
何でも好きな変数名でw DFPlayerは、(ざっと見ただけだけど)シリアルポートで、再生を制御する
テープレコーダーみたいなものだと思う
音声データには、Arduino側はタッチしてないのじゃ? >>244
スゴい、スゴい! これテレビと同じ音〜!
一生のお願いですからスケッチください!
>>245
え?マジすか…
>>246
SD入れるんですから、そりゃそうなってますよね。
失礼しました。 >>247
「>>245 え?マジすか…」
こういうこと未だに書くから >>231みたいなこと書かれるってこと
分かってないのかな?
実社会だと「マジ『歓迎』される」かも・・・ >>248
「荒らした」っていうのは見方によるとは思うけど違うかも
2日間で、色々(ArduinoのPWMとかTimer割り込みとか)調べるきっかけにはなったね
相手にしたくなきゃしなければいいだけなんだし >>250に同意。
ちなみに以下は全部私なんだけど、
ID:y70H43fR
ID:3FwEfs72
ID:FE5E4or/
もともと人のためにやってる気はさらさら無いけど、質問主が、
>第一候補はDFPlayerですので大丈夫です。
と言うので、以後は勝手に自分の楽しみで続けてる。
DFPlayerは持ってるけど、面白くないのでこの件で使う気は無い。 >>252
そうでしたか、たくさん教えてくださって
どうもありがとうございました。感謝です。
他にも不快に思った方がいらっしゃるかと思いますので
お詫びいたします。大変申し訳ありませんでした。
そして改めてアドバイスくださった皆さん
本当にどうもありがとうございました。 >>253
全く不快に思ってないですよ。
私が曖昧に書いたのがいけなかったです、すみませんでした。
>2日間で、色々(ArduinoのPWMとかTimer割り込みとか)調べるきっかけにはなったね
に同意したんです。 困ってることは同じ「やらせたいことが二つあるが同時にさせると問題が出る」なのに
質問者>>247と質問者>>209の差で笑うわ >>257
気に食わないとは書いてないけど
初心者にも色々居るなって
まぁスケッチ下さいはねぇわとは思うが >>259
一からコーティングするのが難しい初心者の私には
実際に動いてるスケッチを見せて貰えるのは大変勉強になります
ノウハウとかテクニックは休日趣味コーダーには有難いですから 自己中心すぎるでしょ
全部クレクレじゃ先にアドバイスした人たちの善意はどうなるの?
ふつうの人なら申し訳なくて書けないものだが 先にアドバイスした人に申し訳ないから、もっといい解法あるけど書かないでおこう
こんな感じかなw
アドバイスと同じであげたい奴はあげりゃいいし、そうじゃない奴はあげなきゃいいだけだろ >>261
じゃ代わりに望み通りに作るから仕様と報酬を書いて >>264
趣味コーダーなので自己研鑽します
その時に人のソースはとても参考になるので有難いんです
もし発注する様な事があればお願いしますね 将来 you のレベルが高くなっても
こういうことしちゃいけません ブログで自作ソースを公開してる人や
オープンソースの開発者は偉い! tとfの違いも解らない奴もコードを書く時代になったんだなって…
ちょうどtrueとfalseの頭文字や >>271
ASKA知らんのかw ボケを解説させるなよ
こんなセンスのない奴もコード書く時代になったのか・・・ こんなオヤジ臭いのをセンスとか言うのやめてくれよ加齢臭キツイって な?解説したら、こういう便乗バカ>>273が出てくるんだよ
便乗するしか能がないバカは黙っとけよ 言いたいことは、自分は何も与えずに無料でライブラリーを使わせもらってることに感謝しろよ!って言うことだ! 最初からそう言えよ…
口が悪いのはもう二度と治らさそうだから何も言わんけどさ 電子工作初心者です。
以下のような一軸アクチュエーターを使ってみたいのですが、モーターが
ステッピングモーターのようです。
https://www.amazon.co.jp/dp/B072JMGGD8/
ステッピングモーターはサーボモーターと違い、回転量の制御をするのが
難しいと見かけたのですが、上記のような商品は初期位置の補正や移動量の
リミットをどのように実現して使うことを想定されているのでしょうか? んで、その間はパルスの数で回転数把握して位置決めでしょうね。
うちの機種では他にセンサーらしきものは無いです。 端だけ検出して、後は回転量から位置決め
端の検出はスイッチを用意するのが一般的
スイッチとかセンサーを使わずに回転してると発生する励磁の電圧を見ることで回転が止まってるかどうか(=端に達してるかどうか)を検出することもある ArduinoでD6450GTというICを制御したいんだができる?
データシート見てもさっぱり分からん >>283
わからんから制御できんのやろ?
Arduino関係なかろう。 arduinoの出力がdata、clk、stbピンで、1bitずつコマンド送る
arduinoの入力でbusy見てHのときは次のコマンド送らない
これだけじゃないか? >>285
その単語でググったらなんとなく理解できたわ
マジでありがとう 最近発売のものでもUSBはType Bなんだな
microUSBとかType Aとか故障確率や普及率でみればそっちのほうが利点があるのになんで使うんだろ microは脆い
TypeAは機器側に装備するのは違反 懐かしいIC使おうとしてるんだなあ、NTSCのオーバーレイ表示か max であるよ7456かそこらへん
osdで検索
IC使わずsync セパレターで分離して
mega88でやってるのもみたことがあるけどどこかわからず >>289
本来はMAX7456使いたかったんだよな
>>290
もうMAX7456ってほとんど売ってなくね?
売ってても海外サイトだし >>291
spark funでモジュールがあるから
それ流用だね
aitendoにあったよん
千石でもあったきがする かなり前だけど >>291
海外通販やらないの?もったいない!
まったく同じものが日本なら数倍上乗せされて売られてるよ >>294
色々売っているから試してみたいが英語がほとんど読めない俺には厳しいな…
普段はAmazonで格安な中華のを買っている 「英語が解らないから〜」と言っている人に海外通販を勧めるのはムダ
本当に欲しければ英語が解らなくても愚痴らずに海外通販している
ソースは俺 エロのおかげでVHSが普及しDVDが売れ、PS2の売り上げを引き延ばしたのは紛れもない事実
エロと戦争は経済を回す。 ■ このスレッドは過去ログ倉庫に格納されています