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/ >>123
あーそれは辞めた方がいい
TXピンとRXピンをPCに繋げればいいんだけど
TX・RXピン ー(間に何か必要)ー PC >>124
https://www.amazon.co.jp/gp/aw/d/B01FVTBZRG/
シリアル→USB変換アダプタにTX・RXピンだけ繋げばいけますかね?
とにかく、UNO内蔵のUSBは使わないようにします。 >>125
GNDもつながないと化けるぞ。
あと、スケッチ書き込むときにリセット押さないと書き込めないから気を付けるんだぞ。
あとそのamazonのFTDIチップは本物かどうか怪しいから、ある日突然使えなくなっても泣かないように。
ついでに中国からの発送だから2,3週間かかるから注意したほうが良いぞ。 VINが6.6Vを超えると切れると読めるんだけど?
いま、どこから電源供給しようとしてるんだろう? まって、まって。
UNOの純正の話ですよね?
>大量のLEDを扱うのでLEDもUNOも外部から5vを供給している状態ですが、この状態でUNOのUSB端子をPCに繋いでシリアル通信できますでしょうか?
この接続をしたときにPCのUSBの電源に逆流するする、と思っている人って、UNOの回路図をご覧になってるのでしょうか?
質問者が回路図を理解できないということはありだとしても、回答者が回路図も見ていないのだとしたら悪質だと思います。
それ以前の話ですが、UNOのDCジャックから5Vを供給する事は規格外です。 >>131
> この接続をしたときにPCのUSBの電源に逆流するする、と思っている人って、UNOの回路図をご覧になってるのでしょうか?
この接続とは、5Vをどこから入力すると言う仮定?
いろんな記事で見かける外部から5番ピンの5Vに直接与える方法だと、
USB側に流れ込むでしょう。
公式ドキュメントでは、お勧めしないと書いてある。 皆さんありがとうございました!無事に音が出ました!
音質・音量は圧電スピーカーが小さいせいか少し残念な感じがするので、
スピーカーをグレードアップしてみたいと思います。
次のハードルはモノアイの順次点滅です。
並列処理は出来ない?らしいので、arduino nanoをもう1個投入するのは
やぶさかではないのですが、出来れば1個で済ませたいと思います。
https://garretlab.web.fc2.com/arduino/examples/02.Digital/BlinkWithoutDelay.html
↑のようにdelay関数を使わなければ、点滅コードの裏で異なる処理を
行うことが出来るとのことですが、その異なる処理(つまり起動音)のほう
にはdelay関数があっても構わないのでしょうか?
もし無理なら、例えば2種類の時間間隔を定義してモノアイは60ミリ秒、
起動音は125マイクロ秒単位で制御する。みたいなことは可能でしょうか?
質問が的を得ていないような気が(なんとなくヒシヒシ)してますが、
右も左もさっぱり分かってないのでお手柔らかにお願いいたします。 >>131
悪質?DCジャック?何言ってんだお前
じゃ、2つの電源から供給するように促すんだな?
どっちが悪質だよ >>133
思ってたより音悪いだろw?
>delay関数があっても構わないのでしょうか?
やっぱりそこで遅延が発生する
点滅は割り込みを使えばいいと思うけど、
重い音声再生に処理を持ってかれて、きちんと点滅しないかも
点滅は専用のICを使うか、
逆に起動音はDFPlayer Miniのような再生専用モジュールを使うとか
数十円〜百数十円程度の投資であっさり解決するケースもあるよ 本来Vinに12V電源を繋いで動かす様にしてる物にUSBを繋いだら
Vinと並列に繋いだモーターが回り出したのですが、USBに繋いだ場合
Vinから5Vが出力されるのでしょうか? >>133
今気づいたけど初心者質問スレで聞いてた人ですね。
Arduinoに挑戦し始めたんだー、胸熱です。
delayは動作を止めておくことなんで指定した時間の間他のことは一切できません。
そのリンク先の方法や割り込みを使うことになります。
http://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/TIMERtoLED/TIMERtoLED.htm >>133
ああ、>>135さんの言うモジュールもいいですね。
つい最近試してみたんです。
こんなサイズ感です。
https://i.imgur.com/47HRG6D.png
左がDFPlayer Mini、右がNanoです。
DFPlayer MiniはeBayで送料込み150円で音質も十分でしょう。 コンデンサでDC成分カットして圧電スピーカーをトランジスタでドライブしてやれば
大きくなるとおもうが 共振させちゃうと逆電圧もすごい >>132
>いろんな記事で見かける外部から5番ピンの5Vに直接与える方法だと、
すみません。
これは想定外でした。駄目ですね。
どこから供給しているかを最初に確認しないと。 >>134
すみません。俺が書いた話は>>140で書いた通り、DCジャックからの電源供給を
想定したものでした。
「DCジャックからの電源供給をしている場合は、USB接続で問題はありません」
ですね。 勝手な想定で他人を「悪質」呼ばわりし、「すみません。」と言いながら「俺が」とほざく。
いつもの奴だが、たぶんこいつは一生こういう態度なんだろうな。
http://hissi.org/read.php/denki/20180609/ZmlkeWVSR00.html >>133
プラモでガンプラだよね
そこまで凝った組み込みをやりたいのなら
一個全体制御用に用意して
そっから各モジュールに対しての開始、停止、開始時のパラメーター送り
をすればいいとおもう
I2Cで全部つなげて、それぞれに対して常に送りっぱなしにして
タイプによっては起動パラメーターによって動作内容が変化する的に
デバッグも楽だしああとで他の模型にも転用効くし一回作ってみ ガンプラっちゅうのはNanoくらいなら中に入るのかえ? 40年前のなら中身スカスカで胴体や太ももに入りそうな気がするけれど今時のガンプラってフレームで中身詰まってるからどうだろう ガンプラ「あぁ…んっ!Nanoが…な、中には…ん!入ってきてるのぉ!」 >>135 >>137
ありがとうございます。
再生専用モジュールがそんな値段で買えるなんて思いもしませんでした。
これはもう買うしかないですね。
…それはそれとして、後学のためにお尋ねしたいのですが、
例えば、音声ファイルを20個くらいに分割して
LED 1 ON(60ミリ秒点灯したい)
音声ファイル1再生
(起動音480個分×delay使って各々125マイクロ秒=60ミリ秒)
LED 1 OFF
LED 2 ON(60ミリ秒点灯したい)
音声ファイル2再生
(起動音の続き480個分×delay使って各々125マイクロ秒=60ミリ秒)
LED 2 OFF
・
・
みたいなことは技術的・機械の能力的には可能なんでしょうか? >>143
レスありがとうございます。
https://youtu.be/-yNXrEXfW-w
1stのゾックの初登場シーン↑の再現にチャレンジしています。
具体的にはモノアイと起動音(ぐぽーんぴろぴろーん)だけですので
そこまでの発想はなかったのですが…なんだか面白そうですね。
>>146 >>147
HGUCのゾック(デカいしスカスカ)なのでnano自体は問題なく入るんですが、
スピーカーと電源(百均モバイルチャージャー)をどうするかが懸案事項です。 Arduino + Bluetooth を Bluetooth Mouse/Keyboardとして認識させたいのですがどうすればいいですか? >>149
自己レスですが、技術的・機械の能力的に可能かどうか、なんて
スケッチ書いてブレッドボードで試してみればいいだけですね。
大変失礼いたしました。 >>152
ありがとうございます
そこも見てました
1台でmouse,keyboardのフリするのは無理なんですかね?
あと
例)アドレスが00:12:34:56:78:90なら、
btSerial.print("SR,001234567890");
がわからんです
ベンダーID,プロダクトIDっていうのは指定できないんでしょうか?
初心者でよくわかってないです
もっと情報ほしいです >>154
接続先、つまりPC側のbluetoothのアドレスじゃないの?
あなたの知りたい事はbluetoothモジュールの事なので、arduinoでの直接の作例を探すよりもモジュール側について調べた方が良いような気がする。
ちなみにRN42のコマンドリファレンスにはSHコマンドのところにCOMBOってモードがあるから、キーボード+マウスとかも行けるんでない? >>149
DFPlayerは、私もオススメします
音楽鳴らすにも十分の性能かつ面白いです
あ、ファイル名ディレクトリの制限あるから
純粋な音楽プレイヤーとしての利用は難しいかも >>149
ファイルを分割する必要はないよ。
125usの割り込みで毎回音声処理して、480回ごとにLEDを制御すればOK。
割り込みをカウントして処理すればどんなタイミングでもLEDを制御できる。 プログラミングだけに意識が向いている人は、
プログラミングの作法や知識ノウハウが俺様基準に到達していない製品をこきおろす。
自分が作る製品の別の部分のどこかがその専門家から見ればカスでタコなクズである可能性には意識が向かなかったりするね。
結果的にちゃんと動作するものであれば、それで良いと俺は思う。 なおdelay以外の対案を特に上げるつもりはないらしい アセンブラに直して命令数カウントするに決まってるだろ 部品を黒い工具箱に入れてたんだけど、ps-400というクリアケースに入れて眺めれる様になりました。うれしいですv^^ Arduinoに限った話ではないのですが、皆さんは8,16bitのマイコンにある程度の正確さと速さを求められる数値計算をさせたいとき、どのような変数型を使っていますか?
shortやcharなどの整数型を使って計算させると、簡単にオーバーフローしてしまうと思うのですが、どうすればよいのでしょうか?
リアルタイムで高速フーリエ変換をさせたいと思い、この問題を解決するために16bitの固定小数点数(整数部7bit,小数部8bit,符号1bit)をC言語のソースコードで実装し、計算させてみたのですが、FFTの点数が512程度になってくるとやはりオーバーフローを起こしてしまいます。
固定小数点数に限界を感じたので、浮動小数点数を使いたいと思ったのですが、floatやdoubleなどの浮動小数点数は32bit以上の変数です。8bitや16bitのマイコンでも使えますが、これが最適なのでしょうか?
そこに疑問を感じて、16bitの浮動小数点数(仮数部10bit,指数部5bit,符号1bit)をソースコードで実装しようと、プログラムを作ろうと思ったのですが、私には骨の折れる作業なので、これが意味のあることなのか不安になって質問させていただきました。
今私が作ろうとしているものは、音楽用の簡易な観賞用のリアルタイムスペアナです。
スレ違いでしたら申し訳ありません。よろしくおねがいします。 http://neocat.hatenablog.com/entry/20100503/1272900070
に、リンクの張られている AppleRemoteIR.h を使用したいのですが
サンプルのスケッチをコンパイルすると
「ボードArduino/Genuino Unoに対するコンパイル時にエラーが発生しました。」
と、エラーが出てしまいます。
なにか解決はできないでしょうか?
よろしくお願いします。 mega2560をUSBでlinaxのPCに接続しましたが
書き込むと
permission deniedエラーします
対処方法を教えて下さい >>167
オーバーフローならしないように計算方法変えるかそれよりも大きい型を使うだけ
正確さってのとオーバーフローは別問題だよ >>167
かなり力のある方だとお見受けしますが、車輪の再発明をしているような・・・
固定小数点形式のFFTについては、本もたくさんあると思うし
ググっても色々見つかりますよ
そういうのを頼りにせず、5chでのコミュニケーションを楽しむというスタンスなの
かもしれませんが・・・ >>159
ありがとうございます。DFPlayerを第一候補にします。
>>160
(割り込みの)回数をカウントする関数があるんですか?
なんだか難しそうですが、割り込みは第二候補にします。
レスありがとうございました。 >>176
割り込み関数内でカウントすればいいだけ
イメージ的には
volatile int count=0;
void 割り込み関数
{
count++;
}
ってするだけ。最初は割り込みライブラリを使った方が簡単。
注意点は、割り込みの関数内で使う変数は「volatile」を付けて宣言すること。 >>177
>割り込みの関数内で使う変数は「volatile」を付けて宣言すること
こういうふうに勘違いしてる人が多いみたいだけど、8bitのロード命令しかないCPUで
2バイト以上の変数を使う場合には、別の注意が必要
(前スレの55参照)
もし、>>160の構想でやるなら、割り込みハンドラの中で480回ごとに
1バイトのフラグを上げて、メインのLED制御のほうで、それを読んでから
クリアするようにすればいい >>170
dmesg でデバイス名確認
sudo chmod o+wr /dev/ttyUSB0 >>179
そっか8ビットCPUだったわ
でも10分で消えるライトを実際に運用してるけど
特に不具合を感じなかったけど、たまたまだったのか、気づいてなかったのか
ともあれthx Lチカみたいにあまり精度要求しないなら
カウンター読む前後で割込み禁止してしまうってのはあるよ
まぁ、普通やらんけど >>183
×カウンター読む前後で割込み禁止
〇カウンター読む前で割込み禁止、読んだ後許可 >>183
まあ、Lチカみたいに精度要求しないっていうか、間違えてもどうってことない
場合はいいけど、前スレのモーター制御のような場合だと致命的で、分かってないと
原因究明困難になりますよね
「カウンター読む前で割込み禁止、読んだ後許可」は、割り込みハンドラの中で
どうこうするよりは、一般的なソリューションですね
(それが望ましいかどうは別にして)ハンドラとの間で受け渡す変数が多い場合とか
ハンドラの中でゴチャゴチャやりたくない、とか理由は色々あるけど、たいていの場合は使える >>177 >>179
ありがとうございます。
その方面?のことを単語からたどって色々調べてみましたが、
分からない言葉が多すぎて読み解くのにどれだけかかることやら… いま話題になってる変数は割り込み処理内でしかアクセスしないから
複数バイトあっても問題ないでしょ? 海外のいろいろなスペアナ製作記事を読むと
周波数帯域ごとに別々に処理して出力してる記事が多いから
ぶっちゃけ小数点以下どうこうっていらねぇんじゃね?とか思った >>187
割込みの外から参照するって前提なんだけど。
ちゃんと読んでから書こうね。 Xtal取っ替えて20MHzのCoreを入れたArduinoで
Servoライブラリ(サーボ4つ)とSoftwareSerialライブラリ(RXのみ)を併用してるんだけど
サーボにジッターが出るのはしょうがない? >>189
>>177のどこが割り込みの外で参照してるの? そらーおめー ++ した変数は割込み外で参照して使うためのものやろ
ただし、参照を2バイトいっぺんにできて、1ループで一回しか参照しないとかなら
不必要な場合もあるわ。 外部から参照しないって
割込みを何だと思ってんだろうな?
やはり根本に、メインと関係ない処理をやるのが割込みだと考えてるからそうなんだろうな
メインのために定期的にやらなきゃいけないことをするって意識がまるで無い >>193
>>192だろ。何のために変数用意したかが理解できてないだけ 外部から参照しないなら、volatile 宣言いらないような。
>>192
そうか。たとえば、M0のArduinoならたぶん、特別な配慮なしに読めますね。 volatileは、例えば while(count<480); のような記述をした時
countの値を一度しか参照しないようなコードを
コンパイラが出力することを防ぐ
loop()あるいはその中から呼び出す関数内で、if(count >=480){}とか書く場合は
あってもなくても関係ないけど、割り込みで変更される特別な変数だって
(人間が)分かるように volatileつけといたほうがいい
割り込みハンドラ内部でしか使わない変数なら、当然いらないんだけど
そういう変数は、ハンドラの中に static 宣言して書くか、ハンドラが
呼び出す関数があってそれからも参照したい場合は、まとめて別ファイルにして
その中で static 宣言するほうがいいと思う すみません。>>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を立てればいいように思ったのですが…) 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() {
} 少し言葉足らずだったかもしれません。
E:については>>179さんのアドバイス後段に沿った案です。 分かるは範囲で
A、はい。
B、問題ない。LEDのピン指定はsetup内で pinMode(LEDのピン番号, OUTPUT); で指定する。
C、?(どういう風に点滅させたいのかわからないので)
D、なりません。
E、? >>167
その程度の用途のFFTなら
ブロック浮動小数点
がいいかも。詳細はググってね >>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
・
・
・ >>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
それ良いアイディアですね! 動画はないんですか? ■ このスレッドは過去ログ倉庫に格納されています