X



トップページ電気・電子
1002コメント397KB
Arduino初心者熱烈大歓迎質問スレ part21
■ このスレッドは過去ログ倉庫に格納されています
0001774ワット発電中さん
垢版 |
2018/05/25(金) 21:53:24.61ID:DlxbWaPO
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/
0169774ワット発電中さん
垢版 |
2018/06/10(日) 16:41:14.43ID:1G6NX6Uz
http://neocat.hatenablog.com/entry/20100503/1272900070
に、リンクの張られている AppleRemoteIR.h を使用したいのですが
サンプルのスケッチをコンパイルすると
「ボードArduino/Genuino Unoに対するコンパイル時にエラーが発生しました。」
と、エラーが出てしまいます。
なにか解決はできないでしょうか?
よろしくお願いします。
0170774ワット発電中さん
垢版 |
2018/06/10(日) 16:43:44.84ID:MoSB1RcR
mega2560をUSBでlinaxのPCに接続しましたが
書き込むと
permission deniedエラーします
対処方法を教えて下さい
0171774ワット発電中さん
垢版 |
2018/06/10(日) 16:55:34.68ID:fARFjWV1
>>167
オーバーフローならしないように計算方法変えるかそれよりも大きい型を使うだけ
正確さってのとオーバーフローは別問題だよ
0172774ワット発電中さん
垢版 |
2018/06/10(日) 17:58:51.47ID:N35kzB1t
>>167
かなり力のある方だとお見受けしますが、車輪の再発明をしているような・・・
固定小数点形式のFFTについては、本もたくさんあると思うし
ググっても色々見つかりますよ

そういうのを頼りにせず、5chでのコミュニケーションを楽しむというスタンスなの
かもしれませんが・・・
0176モビルスーツ開発中
垢版 |
2018/06/10(日) 19:09:25.69ID:onQCLeD6
>>159
ありがとうございます。DFPlayerを第一候補にします。

>>160
(割り込みの)回数をカウントする関数があるんですか?
なんだか難しそうですが、割り込みは第二候補にします。
レスありがとうございました。
0177774ワット発電中さん
垢版 |
2018/06/10(日) 19:20:33.66ID:2TZSZ5o3
>>176
割り込み関数内でカウントすればいいだけ
イメージ的には

volatile int count=0;

void 割り込み関数
{

count++;

}

ってするだけ。最初は割り込みライブラリを使った方が簡単。
注意点は、割り込みの関数内で使う変数は「volatile」を付けて宣言すること。
0179774ワット発電中さん
垢版 |
2018/06/10(日) 19:46:27.12ID:N35kzB1t
>>177
>割り込みの関数内で使う変数は「volatile」を付けて宣言すること
こういうふうに勘違いしてる人が多いみたいだけど、8bitのロード命令しかないCPUで
2バイト以上の変数を使う場合には、別の注意が必要
(前スレの55参照)

もし、>>160の構想でやるなら、割り込みハンドラの中で480回ごとに
1バイトのフラグを上げて、メインのLED制御のほうで、それを読んでから
クリアするようにすればいい
0180774ワット発電中さん
垢版 |
2018/06/10(日) 19:47:30.78ID:c2lQBiy2
>>170
dmesg でデバイス名確認


sudo chmod o+wr /dev/ttyUSB0
0181774ワット発電中さん
垢版 |
2018/06/10(日) 22:30:27.38ID:2TZSZ5o3
>>179
そっか8ビットCPUだったわ
でも10分で消えるライトを実際に運用してるけど
特に不具合を感じなかったけど、たまたまだったのか、気づいてなかったのか
ともあれthx
0183774ワット発電中さん
垢版 |
2018/06/10(日) 22:41:50.75ID:kT/yLTNl
Lチカみたいにあまり精度要求しないなら
カウンター読む前後で割込み禁止してしまうってのはあるよ
まぁ、普通やらんけど
0184774ワット発電中さん
垢版 |
2018/06/10(日) 22:44:11.41ID:kT/yLTNl
>>183
×カウンター読む前後で割込み禁止
〇カウンター読む前で割込み禁止、読んだ後許可
0185774ワット発電中さん
垢版 |
2018/06/10(日) 23:20:51.32ID:N35kzB1t
>>183
まあ、Lチカみたいに精度要求しないっていうか、間違えてもどうってことない
場合はいいけど、前スレのモーター制御のような場合だと致命的で、分かってないと
原因究明困難になりますよね

「カウンター読む前で割込み禁止、読んだ後許可」は、割り込みハンドラの中で
どうこうするよりは、一般的なソリューションですね
(それが望ましいかどうは別にして)ハンドラとの間で受け渡す変数が多い場合とか
ハンドラの中でゴチャゴチャやりたくない、とか理由は色々あるけど、たいていの場合は使える
0186モビルスーツ開発中
垢版 |
2018/06/11(月) 00:02:28.44ID:92Zll0wr
>>177 >>179
ありがとうございます。
その方面?のことを単語からたどって色々調べてみましたが、
分からない言葉が多すぎて読み解くのにどれだけかかることやら…
0187774ワット発電中さん
垢版 |
2018/06/11(月) 00:43:44.34ID:fpv615GX
いま話題になってる変数は割り込み処理内でしかアクセスしないから
複数バイトあっても問題ないでしょ?
0188774ワット発電中さん
垢版 |
2018/06/11(月) 01:36:40.14ID:uonDLSPv
海外のいろいろなスペアナ製作記事を読むと
周波数帯域ごとに別々に処理して出力してる記事が多いから
ぶっちゃけ小数点以下どうこうっていらねぇんじゃね?とか思った
0189774ワット発電中さん
垢版 |
2018/06/11(月) 01:50:43.25ID:ruKnqEZY
>>187
割込みの外から参照するって前提なんだけど。
ちゃんと読んでから書こうね。
0190774ワット発電中さん
垢版 |
2018/06/11(月) 04:08:41.90ID:bM7iJhKM
Xtal取っ替えて20MHzのCoreを入れたArduinoで
Servoライブラリ(サーボ4つ)とSoftwareSerialライブラリ(RXのみ)を併用してるんだけど
サーボにジッターが出るのはしょうがない?
0192774ワット発電中さん
垢版 |
2018/06/11(月) 07:00:25.34ID:P/agEUZR
そらーおめー ++ した変数は割込み外で参照して使うためのものやろ

ただし、参照を2バイトいっぺんにできて、1ループで一回しか参照しないとかなら
不必要な場合もあるわ。
0193774ワット発電中さん
垢版 |
2018/06/11(月) 07:25:30.33ID:n2KHIAVY
外部から参照しないって
割込みを何だと思ってんだろうな?

やはり根本に、メインと関係ない処理をやるのが割込みだと考えてるからそうなんだろうな
メインのために定期的にやらなきゃいけないことをするって意識がまるで無い
0195774ワット発電中さん
垢版 |
2018/06/11(月) 08:36:57.22ID:iOxc27fj
外部から参照しないなら、volatile 宣言いらないような。

>>192
そうか。たとえば、M0のArduinoならたぶん、特別な配慮なしに読めますね。
0196774ワット発電中さん
垢版 |
2018/06/11(月) 09:18:54.22ID:EosyWhSF
volatileは、例えば while(count<480); のような記述をした時
countの値を一度しか参照しないようなコードを
コンパイラが出力することを防ぐ

loop()あるいはその中から呼び出す関数内で、if(count >=480){}とか書く場合は
あってもなくても関係ないけど、割り込みで変更される特別な変数だって
(人間が)分かるように volatileつけといたほうがいい

割り込みハンドラ内部でしか使わない変数なら、当然いらないんだけど
そういう変数は、ハンドラの中に static 宣言して書くか、ハンドラが
呼び出す関数があってそれからも参照したい場合は、まとめて別ファイルにして
その中で static 宣言するほうがいいと思う
0197モビルスーツ開発中
垢版 |
2018/06/11(月) 12:06:54.09ID:92Zll0wr
すみません。>>160の構想でやる場合の話なんですが、
具体的に教えていただきたいことがたくさん出てきました。
当たり前のことや明後日の方を向いてる質問もあろうかと思いますが、
なるべく難しい用語を使わずにご教示いただければ助かります。
(注文つけるような立場ではないのは十分承知していますが…)

A:メインのLED順次点滅のsetupは02の直前でいいでしょうか?
 (起動音再生とLED点灯開始は同タイミングにしたいのですが…)

B:その際は起動音出力とLED出力が共にOUTPUTになるので
 arduino側で区別が出来ないと思うのですが問題ないですか?
(LED点滅はPIN番号を指定することになりますが
 パクったスケッチ↓のvoid playにはPIN番号の指定がないので…)

C:メインのLED順次点滅の本体部分はどこに入れるべきですか?
 その際のvoid ????の????部分は何にすべきですか?
 loop()に入れるならfor(;;)を使えばループしなくて済むんですよね?

D:void play()全体をInterrupt()に入れれば割り込みになりますか?

E:起動音再生480回ごとにフラグをたてるには
 次のような関数を05の直後に入れればいいですか?
 if(i%480==0){FLG ON}else{}
(iの剰余で480の倍数毎にFLGを立てればいいように思ったのですが…)
0198モビルスーツ開発中
垢版 |
2018/06/11(月) 12:07:29.91ID:92Zll0wr
const unsigned char sample_raw[] PROGMEM = {
0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80,
・・・・・・
0x7f, 0x80, 0x7f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
0x80, 0x80, 0x7f
};
unsigned int sample_raw_len = 1200;

01 void setup() {
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS20);

02 play();
}

03 void play() {
04 for (int i = 0; i < sample_raw_len; i++) {
OCR2B = pgm_read_byte_near(&sample_raw[i]);
05 delayMicroseconds(125);
}
}

void loop() {
}
0199モビルスーツ開発中
垢版 |
2018/06/11(月) 12:44:22.66ID:92Zll0wr
少し言葉足らずだったかもしれません。
E:については>>179さんのアドバイス後段に沿った案です。
0200774ワット発電中さん
垢版 |
2018/06/11(月) 12:57:35.79ID:WqeVyPCT
分かるは範囲で

A、はい。
B、問題ない。LEDのピン指定はsetup内で pinMode(LEDのピン番号, OUTPUT); で指定する。
C、?(どういう風に点滅させたいのかわからないので)
D、なりません。
E、?
0201774ワット発電中さん
垢版 |
2018/06/11(月) 13:25:39.71ID:PPV3U/KQ
>>167
その程度の用途のFFTなら
ブロック浮動小数点
がいいかも。詳細はググってね
0202モビルスーツ開発中
垢版 |
2018/06/11(月) 13:43:59.23ID:92Zll0wr
>>200
レスありがとうがざいます。言葉足らずで申し訳ありませんでした。
意図する動作は次のようになります。

メインのLED@点灯(約60ms点灯したい、以後同じ)

割り込み内で起動音再生(125usのdelay×480個分=60ms)
割り込み内の処理480回でFLG ON

FLG ONをメインで検知してLED@消灯、LEDA点灯、FLG OFF

割り込み内で引き続き起動音を再生(125umのdelay×480個分=60ms)
割り込み内の処理480回でFLG ON

FLG ONをメインで検知してLEDA消灯、LEDB点灯、FLG OFF

割り込み内で引き続き起動音を再生(125umのdelay×480個分=60ms)
割り込み内の処理480回でFLG ON
   ・
   ・
   ・
0203モビルスーツ開発中
垢版 |
2018/06/11(月) 13:44:30.74ID:92Zll0wr
>>200
D:についてはネット上に割り込みのスケッチ例が見当たらないので
よく分からないままに質問してしまいました。すみません。

arduinoリファレンスが次のような感じなのですが、
(noInterruptsは書かないとして)
@にはvoid play()とだけ書いて本体は別の所に書くのか、
Aに({}で括って?)void play()以下全文書けばいいのか、
とかが分からないのです。

void setup() {}

void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts(@)A;
// other code here
}
0204774ワット発電中さん
垢版 |
2018/06/11(月) 13:52:51.01ID:H/ioWkjV
割り込み内はできるだけ短時間の処理だけにする
メイン処理で音再生して、割り込みでLED制御
0205モビルスーツ開発中
垢版 |
2018/06/11(月) 14:08:00.88ID:92Zll0wr
>>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
   ・
   ・
0207774ワット発電中さん
垢版 |
2018/06/11(月) 14:14:39.13ID:H/ioWkjV
ぶっちゃけ俺はおまえが何したいのか理解できてないんだよね

1つの長い音を再生中にLEDを60ms間隔で点滅させたいっていうなら、
タイマー割り込み60msで実行。割り込み処理はLEDオンオフ
メインは再生。再生終わったらタイマー割り込み終了
0208774ワット発電中さん
垢版 |
2018/06/11(月) 14:22:54.94ID:wqTS1nEb
>>207
いや、世の中のゲームなど
めちゃくちゃメインで画像処理しまくりながら
64分音符の楽譜演奏かけてんのは割込みの方

メインの処理があろうが無かろうが
BGM再生プログラムを割込みで完結してしまってる方がこの先なんにでも使える
0209774ワット発電中さん
垢版 |
2018/06/11(月) 14:35:37.57ID:bM7iJhKM
>>190
自己解決した
SoftwareSerialはどのピンでも使えて基板配線での都合がいいけどServoの割り込みをちと妨害するぽい
オシロスコープでサーボ4つの各PWM信号を確認するとUART受信と被ったサーボのHIGH時間が少しブレている
Servoライブラリはタイマー1コで12個まで動かせるソフトウェアでの制御だからしょうがない?
ボーレートを上げれば割り込み占有時間が短くなるぽいけど高速にし過ぎるとデータロストが増える
なんでSoftwareSerialライブラリを使うのをやめてUSIのシフトレジスタを使って自前でUART(受信のみ)を実装した
割り込み時間が短く出来たからサーボの信号がブレてもデッドバンド幅に収まった
0210774ワット発電中さん
垢版 |
2018/06/11(月) 14:54:37.19ID:bM7iJhKM
追記
USIのシフトレジスタのクロックにTimer0のコンペアマッチAを使うみたいだったから
動作モードをFastPWMからCTCに変更してプリスケーラも書き換えてしまった都合で
D5とD6のAnalogWriteが使えなくなったうえにdelayやらmillisが機能不全になった
ServoライブラリがTimer1を使ってるせいでD9とD10のAnalogWriteも使えなくなってるんだった
まぁ別にdelay使ってないからよし!!
0211モビルスーツ開発中
垢版 |
2018/06/11(月) 15:06:08.97ID:92Zll0wr
>>206
すみません、よく分からなくなってきました。
メインで起動音再生(1音毎に125usのdelay)
割り込みでLED点滅(480音毎のFLG ONが割り込み条件)なんですが…
これは割り込み内でのdelayになるんですか?

>>207
具体的には動画冒頭↓の再現です。
ロボットの初登場シーンの起動音とモノアイの動きを再現したいんです。
https://youtu.be/-yNXrEXfW-w
0213モビルスーツ開発中
垢版 |
2018/06/11(月) 16:30:34.02ID:92Zll0wr
>>212
ありがとうございます。
これはとても分かりやすいですね。早速ダウンロードしました。
0214774ワット発電中さん
垢版 |
2018/06/11(月) 16:31:34.52ID:EosyWhSF
>>211
横からだけど
(タイマー)割り込みの使い方がよく分かってないみたいだから
解説ページとか読んでみたり、サンプルプログラム動かしてみるのが先かも

なお、この程度の処理なら、割り込みとか使わずに全部loop()内に
記述しても(125us間隔が少しずれたりバラつくのを許容すれば)
そんなに大変じゃないと思います。
0215774ワット発電中さん
垢版 |
2018/06/11(月) 16:55:50.01ID:fpv615GX
音声出力とかLED点滅は時間のかかる処理じゃないし、125usという比較的
短周期の割り込み処理で、フラグを立ててメインで処理するなんてむしろ
オーバーヘッドが大きくなる。
今回の場合は割り込み処理内で全部やるのが合理的と思うがな。
だから変数が複数バイトでも競合の心配はない。
音声のジッタを嫌うなら

・前回の割り込みで用意した音声データを出力する
・カウンタ++
・カウンタ=480ならLEDをON/OFFしてカウンタクリア
・次回の割り込みで出力する音声データを用意しておく
のような手順でやればOK。メインはLOOPのみ。
0218モビルスーツ開発中
垢版 |
2018/06/11(月) 17:36:24.38ID:92Zll0wr
>>214
レスありがとうございます!
タイマー割り込みで起動音とLチカ同時に出来ました!
(でもチカチカの頻度が明らかに少ないのですが…)

>>215
ありがとうございます。
割り込みについても引き続き勉強したいのですが、
アドバイスいただいた次の2点について詳しく教えていただけないでしょうか?

>前回の割り込みで用意した音声データを出力する
>次回の割り込みで出力する音声データを用意しておく

またarduino関連ではcountについての記述がないようです。
分かりやすいサイトもしくはキーワードだけでも結構ですので、
ご存知でしたら教えていただきたいのですが…

>>216
モノアイの動きを再現する、と言ったほうが正確かもしれません。
具体的には>>217さんの言うようにLED9個を順序よく点滅させて、
アニメ同様に残像で動いて見えるようにします。
0219774ワット発電中さん
垢版 |
2018/06/11(月) 17:46:25.19ID:8ZIDMCDq
或いはmp3モジュール使えば別に音出させた後なんてほっといていいんだし、むしろ音声の方を割り込みでやるのが合理的なのでは
0220774ワット発電中さん
垢版 |
2018/06/11(月) 18:25:24.26ID:X60Wycqp
>>218
タイマー割込みかけて
かつ前レスのようにdelayかけてりゃ
次の割込みまで間に合わずに、処理数半減するじゃないか

割込みかけて処理終わったらそのままでいいんだよ
delay要らない
0221774ワット発電中さん
垢版 |
2018/06/11(月) 18:47:21.05ID:uonDLSPv
>>218
俺が数年前にイベント用に作ったやつは
今点いている直前に点灯したモノアイをPWMでほんの一瞬残光として弱く点灯させるって方法を用いた
直前2個くらいこの動作ができると本当に動いてるように見えるよ、1個でもじゅうぶんだけど
すげーでっかいやつだったんで組み込みの苦労はまったくなかったんだけどね
その時はシフトレジスタだらけになった
0222モビルスーツ開発中
垢版 |
2018/06/11(月) 18:50:02.60ID:92Zll0wr
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() {
}
0223モビルスーツ開発中
垢版 |
2018/06/11(月) 18:51:05.49ID:92Zll0wr
>>220
このスケッチ↑で起動音+(チカチカの足りない)Lチカは出来たんですが、
▲の行を削ったらLEDは点灯のままで起動音も鳴らなくなりました。
0225774ワット発電中さん
垢版 |
2018/06/11(月) 19:31:56.33ID:uonDLSPv
>>224
納品まですげー勢いだったんで残ってないけど
似たような作例は探せばあるんじゃないかな
0227774ワット発電中さん
垢版 |
2018/06/11(月) 19:43:15.67ID:FE5E4or/
あ、すみません、そのリンク先へ誘導したの私でした。
私もArduinoのタイマー詳しくないんで迷惑かけてるかも…。

いずれにしても、D3ピンのPWMで音を鳴らしているからTimer2を使っていると思う。
なので、LEDの方はTimer1を使えばいいと思う。
TimerOneというライブラリを探してみて下さい。
0228モビルスーツ開発中
垢版 |
2018/06/11(月) 20:18:54.71ID:92Zll0wr
>>225
イベント用に納品ってことはプロの方ですか!?

>>226
arduinoのリファレンスには何も書いてないみたいですが
ここで教えていただいたブログには、13番・11番ピンの
PWM出力(analogWrite)不可と書いてありますね。

>>227
ご心配おかけしまして申し訳ありません。
タイマー他については勉強のために試行錯誤してるだけで
第一候補はDFPlayerですので大丈夫です。
なおTimer1でもPWM不可になるピンがいくつかあるようです。
0229774ワット発電中さん
垢版 |
2018/06/11(月) 20:55:50.11ID:FE5E4or/
>>228
私も自分の興味で勝手にやってるだけなのでお気になさらないでください。
ちょうどいいのでArduinoのタイマー割り込みをマスターしようというわけですので…。
今のところ、LEDの点滅をmillis();、つまりTimer0で、
音のPWMはあなたのリンク先の通りにD3ピンのPWM、つまりTimer2でそのまま、
音のタイミングの125msをdelayでなくTimer1でやってみています。
何とかうまくいきそうです。
0230774ワット発電中さん
垢版 |
2018/06/11(月) 22:59:54.62ID:0QT883gR
>>222
これ音でなくLEDを割込みで処理してるパターンでしょ?
割込み処理内でdelay使うなっつってんだから、これは関係ない話


60msで処理したいっつってるくせに
割込みは100msになってるし


割込みでカウントしてフラグ立てて
メインでフラグ見て処理しろっつってんのに
ただのdelay使った棒プログラムに成り下がってる
0231774ワット発電中さん
垢版 |
2018/06/11(月) 23:12:59.24ID:EosyWhSF
92Zll0wrさんは、単にコピペでプログラム作って試すだけじゃなくて
コピペしたものの意味を理解するようにしたほうがいいかも
理解してるなら、>>223みたいな質問は出ないはず
0234774ワット発電中さん
垢版 |
2018/06/11(月) 23:43:33.44ID:EosyWhSF
ちなみに、>>133あたりから読み直してみたんだけど、構想を実現したいだけなら
133のリンク先のテクニックの延長で可能ですね

正攻法は >>215さんの方法だと思いますが、音データの出力をDACではなくて
(割り込み周期と非同期な)PWMで出力しているので
125us周期が多少ずれても音質には関係ないと思うから、必ずしもこだわらなくてもいい

LEDの点滅周期(の半分)でタイマー割り込みをかけるのは、簡単だけど
貴重なタイマーがLEDの点滅にしか使えなくなっちゃうので
もっと短い周期で割り込みかけ、それをカウンタ(変数で数えて
この仕事は毎回・こっちは〇〇カウント毎・あれはXXカウント毎って
やるテクニックも覚えといたらいいですよ(Arduinoの関数とかはないです)
0235774ワット発電中さん
垢版 |
2018/06/12(火) 00:09:54.34ID:ZofE+JBt
>>233
最近の若いモンは「歓迎」の意味も言葉通りにしか捉えられんのか?
0236774ワット発電中さん
垢版 |
2018/06/12(火) 00:14:01.82ID:51AeoBC4
歓迎する(歓迎するとは言ってない)
まぁ老害だよなこういう考えは
0238モビルスーツ開発中
垢版 |
2018/06/12(火) 00:42:31.23ID:D2lB6VwI
>>230
不快な思いをさせてしまって申し訳ありません。
たくさんいただいたアドバイスを全て実行する訳にもいきませんので、
失礼かとは思いますが、反対意見のあるアドバイスや
難しそうなのは後回しにさせてもらっています。

>>231
お言葉を返すようですが、8000Hzでサンプリングしてるので
1音につき125usのdelayが必要だということは分かっています。
(初レスに添付した参照ブログに書いてありましたので…)

ただdelay不要とのアドバイスをお二方からいただいたので
(スケッチ1行消すだけで済みますし)試しにやってみただけです。
(その1行を復活させたら今度はLEDが点灯したままになってしまいましたが…)

>>234
詳しいご説明ありがとうございます。とても分かりやすいです。
いい勉強になりました。感謝。

あの…もしお分かりになるようでしたら>>215さんのアドバイスの意味を
ご教示いただけると助かるのですが…

>前回の割り込みで用意した音声データを出力する
>次回の割り込みで出力する音声データを用意しておく
countを解説しているサイトもご存知でしたらお願いしたいです。

>>237
プラモの腕前のほうも全然なので、そこは何卒ご勘弁を…
0239774ワット発電中さん
垢版 |
2018/06/12(火) 00:54:53.82ID:lFrp5rip
カウント、countはただの変数名でしょ

int count;
〜〜〜
count++;

if(count > 100)
{
 count =0

 //カウントが100を超えたらやりたい処理
}
0241774ワット発電中さん
垢版 |
2018/06/12(火) 01:04:42.05ID:pu3mIhhr
>>238
>>215さんじゃないですが
「次回の割り込みで出力する音声データを用意しておく」のは
用意するのに、それなりに時間を要する場合があることを想定しているのだと
思います。

まあ、>>198のコード内では
pgm_read_byte_near(&sample_raw[i]); 程度のことなんで
割り込みかかってから必要データをもってきても問題ないと思いますが
もっと割り込み周期が短い場合とか
SDカード・i2cのEEPROM なんかに音声データ入れてる場合は
そういう配慮が必要になるはずです。
もっとも、後者の場合は次の1データだけ用意しておくのじゃなくて
ある程度のまとまったデータを用意することになると思いますが・・・
0242774ワット発電中さん
垢版 |
2018/06/12(火) 01:28:08.59ID:pu3mIhhr
>>241の「もっと割り込み周期が短い場合」というのは間違いで
「割り込みのタイミングに対して、データを出力するまでの時間が
 短い(あるいは一定)であることを要求される場合」というほうが
正しいのかな
0243モビルスーツ開発中
垢版 |
2018/06/12(火) 01:41:11.33ID:D2lB6VwI
>>239
ありがとうございます。業界的にはありふれた変数なんですか?
arduinoリファレンスに載ってないのが不思議ですが。

>>240
わお!スゴい。やりたかったの正しくコレ〜!
音もウチのより格段に良いですね。スピーカーは何を使われました?
もしマナー違反でなければ是非ともスケッチを見せていただきたいのですが…

>>241
そんな配慮・テクニックが必要になる場合もあるんですね。
もしかしてDFPlayer(第一候補)使う場合はその配慮って必要ですか?
0245774ワット発電中さん
垢版 |
2018/06/12(火) 01:49:14.97ID:lFrp5rip
業界的にっていうか、プログラミング全般でよくやることだけどw
特にcountにする必要はなくて、cntでもkauntoでもaでもbでも
何でも好きな変数名でw
0246774ワット発電中さん
垢版 |
2018/06/12(火) 01:53:23.00ID:pu3mIhhr
DFPlayerは、(ざっと見ただけだけど)シリアルポートで、再生を制御する
テープレコーダーみたいなものだと思う
音声データには、Arduino側はタッチしてないのじゃ?
0247モビルスーツ開発中
垢版 |
2018/06/12(火) 02:10:56.20ID:D2lB6VwI
>>244
スゴい、スゴい! これテレビと同じ音〜!
一生のお願いですからスケッチください!

>>245
え?マジすか…

>>246
SD入れるんですから、そりゃそうなってますよね。
失礼しました。
0249774ワット発電中さん
垢版 |
2018/06/12(火) 02:27:02.96ID:pu3mIhhr
>>247
>>245 え?マジすか…」
こういうこと未だに書くから >>231みたいなこと書かれるってこと
分かってないのかな?
実社会だと「マジ『歓迎』される」かも・・・
0250774ワット発電中さん
垢版 |
2018/06/12(火) 02:40:40.76ID:pu3mIhhr
>>248
「荒らした」っていうのは見方によるとは思うけど違うかも
2日間で、色々(ArduinoのPWMとかTimer割り込みとか)調べるきっかけにはなったね
相手にしたくなきゃしなければいいだけなんだし
0252774ワット発電中さん
垢版 |
2018/06/12(火) 03:54:26.68ID:aR//gm0G
>>250に同意。
ちなみに以下は全部私なんだけど、
ID:y70H43fR
ID:3FwEfs72
ID:FE5E4or/
もともと人のためにやってる気はさらさら無いけど、質問主が、
>第一候補はDFPlayerですので大丈夫です。
と言うので、以後は勝手に自分の楽しみで続けてる。
DFPlayerは持ってるけど、面白くないのでこの件で使う気は無い。
0253モビルスーツ開発中
垢版 |
2018/06/12(火) 04:30:58.72ID:D2lB6VwI
>>252
そうでしたか、たくさん教えてくださって
どうもありがとうございました。感謝です。

他にも不快に思った方がいらっしゃるかと思いますので
お詫びいたします。大変申し訳ありませんでした。

そして改めてアドバイスくださった皆さん
本当にどうもありがとうございました。
0254774ワット発電中さん
垢版 |
2018/06/12(火) 04:43:06.09ID:aR//gm0G
>>253
全く不快に思ってないですよ。
私が曖昧に書いたのがいけなかったです、すみませんでした。
>2日間で、色々(ArduinoのPWMとかTimer割り込みとか)調べるきっかけにはなったね
に同意したんです。
0256774ワット発電中さん
垢版 |
2018/06/12(火) 08:22:36.16ID:hmCD6GF/
困ってることは同じ「やらせたいことが二つあるが同時にさせると問題が出る」なのに
質問者>>247と質問者>>209の差で笑うわ
0259774ワット発電中さん
垢版 |
2018/06/12(火) 12:26:15.08ID:hmCD6GF/
>>257
気に食わないとは書いてないけど
初心者にも色々居るなって
まぁスケッチ下さいはねぇわとは思うが
0261774ワット発電中さん
垢版 |
2018/06/12(火) 13:16:00.44ID:/yLjeDAz
>>259
一からコーティングするのが難しい初心者の私には
実際に動いてるスケッチを見せて貰えるのは大変勉強になります
ノウハウとかテクニックは休日趣味コーダーには有難いですから
0262774ワット発電中さん
垢版 |
2018/06/12(火) 13:37:46.25ID:qrFi3O/0
自己中心すぎるでしょ
全部クレクレじゃ先にアドバイスした人たちの善意はどうなるの?
ふつうの人なら申し訳なくて書けないものだが
0263774ワット発電中さん
垢版 |
2018/06/12(火) 14:02:09.50ID:0p7boMMK
先にアドバイスした人に申し訳ないから、もっといい解法あるけど書かないでおこう
こんな感じかなw
アドバイスと同じであげたい奴はあげりゃいいし、そうじゃない奴はあげなきゃいいだけだろ
0265774ワット発電中さん
垢版 |
2018/06/12(火) 16:10:08.12ID:/yLjeDAz
>>264
趣味コーダーなので自己研鑽します
その時に人のソースはとても参考になるので有難いんです
もし発注する様な事があればお願いしますね
0266774ワット発電中さん
垢版 |
2018/06/12(火) 16:19:06.22ID:Z2jS8Ips
将来 you のレベルが高くなっても
こういうことしちゃいけません
0267774ワット発電中さん
垢版 |
2018/06/12(火) 17:48:38.79ID:7B9aftlV
ブログで自作ソースを公開してる人や
オープンソースの開発者は偉い!
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況