Arduino初心者熱烈大歓迎質問スレ part19 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
http://www.arduino.cc/
【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね
【分裂騒ぎ】
おさまった模様。くわしくはぐぐれ。
関連スレ
【Arduino】フィジカル・コンピューティング4【OSC】
http://wc2014.2ch.net/test/read.cgi/denki/1407830304/
学研マイコン Japanino ジャパニーノで遊ぶスレ 3
http://kamome.2ch.net/test/read.cgi/denki/1286354827/
前スレ
Arduino初心者熱烈大歓迎質問スレ part18 [無断転載禁止]©2ch.net
http://rio2016.2ch.net/test/read.cgi/denki/1485192244/
Arduino初心者熱烈大歓迎質問スレ part15
http://rio2016.2ch.net/test/read.cgi/denki/1451893274/
Arduino初心者熱烈大歓迎質問スレ part17
http://rio2016.2ch.net/test/read.cgi/denki/1471967293/
Arduino初心者熱烈大歓迎質問スレ part16
http://wc2014.2ch.net/test/read.cgi/denki/1451909868/ なんか、ROMしてた俺が立てるのはなにだが、建てた。 arduinoって3.3v駆動した方がアナログ入力の精度って上がる?
入力電圧が3.3vになる欠点があるが arduinoとdfplayer miniを使っています。
今までdelayを使って次の行のBGMに行くようにしていたのですが当然ながらのBGMの長さによって途切れてしまったり無音が長くなったりしています。
busyから再生が終わったかの信号を取ることができるのはわかったのでdelayの代わりにwhileを使ってみたのですがうまくいきません。
再生が終わったら次の指定した曲に行くにはどんな風にすればいいのでしょうか?
sound=digitalRead(6); //busy
mp3_play(1);
while(sound==1){ 
} 
mp3_play(2); >>7
0になるまで、ずっと見るんじゃね。
mp3_play(1);
while(digitalRead(6)==1){}
mp3_play(2); >>9
やってみましたが1曲目飛ばしていきなり2曲目再生になってしまいます。 >>10
busyピンはLowで演奏中みたいなんで
while(digitalRead(6)==0){}
に変えてみたらどう。 >>11
やってみましたが同じように1曲目が再生されず2曲目だけが再生されます。 >>12
うーん
BUSYピンとdigital6ピンが繋がってるのならどちらか==1または==0のwhile文に必ずひっかかるので1番の曲だけ演奏するケースがあると思うんだがどちらも2番だけ演奏というのが解せない。
1) pinMode(6,INPUT)の設定してるよね。
2) While文のカッコの中の式は==じゃなく=書いていない?
ワーニングエラーが出そうだけど念のため
3) 電源はaruduinoの3.3vを dfplayer miniにつないでるんだよね。
5Vに繋いでるなら1kの抵抗をarduinoのデジタル6と dfplayer miniのBUSYピンの間に入れてください。
4)あとはBUSYピンが変化するまで一定時間かかるのかもしれない(MP3には曲名とかアルバム名とかが書かれている部分が先頭にありそれを読み飛ばしてから曲の演奏が始まる)から1~2秒delayを入れてからwhile文呼ぶようにしてみたらどんなかね。
5) dfplayer miniのデータシートみるとBUSYピンの説明が表にのってる説明と本文に書いてある説明で逆になってるから上記1)~4)確認するとき==0と==1の両方試してみてください。 >>14
試してみました。
4)でした。再生しようとしていたファイルが2秒くらいのものだったのでおっしゃられた通りbusyが変化する前に終わってしまっていたようです。delayで解決しました。他のファイルでもうまく再生できました。
このスレには前にも今回も助けていただきました。
本当に助かりました。ありがとうございます。 arduinoのLチカできたから赤外線Lチカしたよ!
でも届く範囲が2mくらいで短いみたい。
2.8mくらい離れたところから操作したいのだけれど、LEDの数を増やすくらいしか方法はないですか?
赤外線LEDは内部抵抗のないピンに直接さしちゃってます。 >>18
はいそうです、扇風機回したいです。
部屋の床が1.2m×6mとか小学校の算数みたいな形をしていて
対角線上壁付近に扇風機が置いてありますので
どちらかの扇風機にLEDを近づけるとどちらかが反応しなくなるという状況です。 >>ID:UepfD/ag
赤外線LEDの指向性の問題と到達距離の問題を分けて考えんと無理。
あと、その説明じゃ物の位置関係の全容が伝わらん。
>小学校の算数みたいな形
とかw
小学校の国語からやり直せ。 >>20
径が5mmのものとしか。
HiLetgo 新しい 赤外線IRワイヤレス リモートコントロール モジュール キット 部品番号 3-01-1145-A
てやつの付属品。
秋月で一般的な見てみると、だいたい50mAか100mAくらい必要のようですが…
一般的にはLEDの出力上げるには最大電流が流れていれば数を増やす以外には仕方ないですよね。
>>21
抵抗器は取り付けていません。 IOから直接100mA流す能力ないからトランジスタを介さないとだめだよ。2sc2120で10オームの抵抗くらいだと広範囲に届くようになる。回路図は検索するとネットにたくさんある。 Adafruit_NeoPixelのライブラリを使っています。
RGBLed.setPixelColor(0, 150,0,0) ;
これの0,150,0,0を変数にする事はできますか?
led=0,150,0,0だとうまくいかなくて。 >>26
まじかcurieもやめるのかよ
インテルは完全にマイコン系はやる気無いんだな… >>27
単価が低い上に、枯れたのが好まれるから数も出ない。ARMは、革命的だったけど。 arduino UNOとLCD-09067を使ったプログラムです。ヘッダは<WProgram.h>と<avr/io.h>を#includeしてます
スイッチのバウンス対策でdelay命令を入れると必ずその部分で動作(画面出力?)が完全に止まってしまいます
delayの仕様上の問題なのでしょうか
またどのような対処法がありますでしょうか
ttp://www.dotup.org/uploda/www.dotup.org1322033.jpg >>29
ちゃんと追ってないけど、move==1になって内側のループを抜けて、
その他蛾のループを頭からやり直して毎回 mae=0; にして
おなじ表示を繰り返しているだけだったりしないかい × その他蛾のループ
○ 外側のループ
指がもつれてる上に見逃したぜ。寝るわ。 >>28
儲からなくても社会還元でやり続ければいいのになあ。
インテルはそろばん勘定優先だな。 >>32
株主にどうやって「社会還元だから赤字事業だけど続けます」
と説明すればいいのか、お前がインテルに教えてやるといいんじゃないか >>30
大事なこといいわすれてました
この内側のループ抜けたらすぐ(画面外)に数字じゃないものが表示されるはずなんです
ついでにdelayを抜けばバウンス以外は正常に動作するんです http://i.imgur.com/ROtrBFX.jpg
以前壊れたウォシュレットから取ってキープしてた部品モジュールをばらしてみたら
中から赤外線測距モジュールらしき物が出てきてちょっと得した気分
便器の分際で一々距離迄見てるとは思わなかった >>39はタンク上部のだったけど、糞まみれでタンク下の方に同じ様なモジュール
あったの思い出して開けてみたらこっちは測距モジュールだけが入ってた
てっきりリモコンの受光部かと思ってたら、測距で便座に座ってるのか
小便なのか判定してんだな LEDをブザーの音声に合わせて光らせたいと思い
プログラミングしたら単純にLチカさせるより
何故か暗くなったんですがプログラム上の問題が
何かあるのでしょうか?
比較したプログラムはこんな感じです。
while(hogehoge){
digitalWrite(ledPin, HIGH);
tone(bpin,392,200);
digitalWrite(ledPin, LOW);
delay(200);
}
※実際はメロディーラインに合わせてtoneの音程部分は変更
while(hogehoge){
digitalWrite(ledPin, HIGH);
delay(200);
digitalWrite(ledPin, LOW);
delay(200);
} toneが非同期処理だからすぐにリターンしてくるんだろ
while(hogehoge){
digitalWrite(ledPin, HIGH);
tone(bpin,392,200);
delay(200); //←入れる
digitalWrite(ledPin, LOW);
delay(200);
} すいません
ttp://www.dotup.org/uploda/www.dotup.org1326137.jpg
ttp://www.dotup.org/uploda/www.dotup.org1326138.jpg
この16*2液晶についてるこのSparkFunのパーツの名称分かりますか
回路図を作らなければならないのですがfritzingで同じものが見つけられないので助けてください 前にAVRtiny2313使って、RS232CのTxD〜秋月の並列接続LCDの3線式(電源ライン込み)変換器を
作った事を思い出した。
これは役に立つ、いつかは必ず使うと作ったけど、もう何年も経つのにいまだ出番が無い・・・。 >>43
ありがとうございます。
参考にしてプログラム中にdelay関数を入れてみたのですが
鳴らしてるメロディーも変化してしまいました。
同じメロディーラインでLチカさせる方法はないんでしょうか?
鳴らすのを繰り返せばうまくいくかもと思ってこれも試してみたけどうまくいきませんでした
while(hogehoge){
digitalWrite(ledPin, HIGH);
while(kurikaesi <10){
tone(bpin,392,20);
kurikaesi = kurikasesi++;
}
kurikaesi = 0;
digitalWrite(ledPin, LOW);
delay(200);
} エンベロープ取り出すかコンプレッションかけて積分か平均化 RX232C/I2C〜LCD変換器の写真を探したら出てきた、日付を見たら5年前!
裏面の左端に実装した16ピンコネクタを秋月のLCD側のコネクタにダイレクトに挿して、
LCD基板とネジ止め連結する。
ボード幅もLCDに合わせた。
ショート用ピンがいっぱいあるのはUART/I2Cの切り替え、UARTボーレィト/I2Cアドレスの選択、
I2Cをプルアップする/しないの選択など。
http://i.imgur.com/k2SZb85.jpg
論点からズレているし、誰も写真アップなんて望んでいないだろうけど、
人の工作物を見てケチ付けるのは楽しい一時でしょ?w 論点からズレているし、誰も写真アップなんて望んでいない。
なので、自分のブログでやれや。 誰も望んでいないしケチも無いシリーズ第2弾
ただし、ここArduino板向きでは無いと思うので、AVR板に書きます。 ブログの1つも立ち上げられない奴の作品なんてたかが知れてる。
人の迷惑考えず自分はみんなから必要とされていると思い込んでるジジイほど迷惑な物は無い。
という「ケチ」は書いても目に入らんのだろうなw >持続的な成長のために財務状況の健全化に努める
逆にいうと今危ないって事かね? http://codepad.org/0R54pkaR
上のプログラムでコンパイル時に↓のエラーがでます
adobe_fude_v5:54: error: expected initializer before 'void'
adobe_fude_v5:88: error: expected initializer before 'void'
しかし54行目にどう考えてもエラーの要素がなく、コンパイルできずに困っています。
色々調べてみると書式が間違っている時にでるエラーらしいのですが、
54行目周辺を見渡してもそれらしきミスが見当たりません。
どこが間違っているのでしょうか? セミコロンがない行を発見しました死んできます
54行目より前をずっと探してたけど54行目のずっと後ろにあった・・・
なぜ54行目にエラーが出るのか分かりませんがとりあえず解決です キーボード作るのにREVIVE USBつかってるんだけど、Arduino microおすすめされた
でもなにがなんだか?さっぱりです
どのサイト読めばいいでしょうか 3つのLEDを1つのタクトスイッチで光らせようとしています。
タクトスイッチを1回押すとAのLEDがフェード点灯、続いてBもフェード点灯、
続いてCもフェード点灯し、Cだけが明滅を繰り返します。
2回目タクトスイッチを押すとABCが一緒にフェード消灯するというものです。
Cの明滅部分をwhileでくくり、スイッチがHIGHになればwhileを抜けるという
条件にしてみたのですがうまくいきません。
(何回もぽちぽちしているとたまに消える)
どのようにすれば目的の動作を実現できるのか、ヒントをいただけないでしょうか。 >>63
>Cの明滅部分をwhileでくくり、スイッチがHIGHになればwhileを抜けるという
old_val が泣いていますよ(抽象的表現) >>61
>何回もぽちぽちしているとたまに消える
while1回まわすだけで数秒掛かり、その間スイッチの値は読まれないから、
ずっと押し続けるとか、消えかけた時をねらって押すとかしないと…。
その後、1度放してから再度押せば消える。
以上のようなプログラムになっているようだから自分で確認してみて。
ただ、私なら外部割込み使うかな。 1.Cの明滅部分のwhileをやめて、違う方法にする。
2.スイッチの入力を割込にする。
拡張性考えると1かなぁ。。。 >Cの明滅部分のwhileをやめて、違う方法にする。
それ、参考までに教えて下さい。
割り込みでフラグの値増減してループ内のcase文で条件分岐する。
くらいしか浮かばないわ。 逆にタイマー割り込みでLED制御するかディレイカウントすれば?
メインはスイッチリードとLEDへのコマンド設定ステータス判定にして高速で回す 皆様ありがとうございます。
>>65
現状おっしゃる通りの動作になっております… >>66
これはやはり>>65の
>while1回まわすだけで数秒掛かり、その間スイッチの値は読まれないから
ということですよね。
whileはこの場合ふさわしくないということですね。 Arduinoでセンサーの値を読み取り,それをスマホ経由でサーバーやクラウドに上げようと考えています.
イーサネットシールドを使って「Arduino-有線LAN-USBアダプタ-microUSBアダプタ-スマホ」
Wi-Fiシールドを使って「Arduino-スマホ」
という二つの選択肢を今のところ考えています.
どちらが初心者にとって簡単とか,ネットの情報が多いとか,個人的にオススメだとかあるでしょうか. つ ESP8266 or ESP32 + WiFi親機(スマホのテザでも可) >>72
こういうのもあるんですね,知りませんでした.検討してみます.
ありがとうございます. >>70
whileがふさわしくないってんじゃない
ループ内にこれ入れりゃいい
val = digitalRead(sw);
もちろん、他にもいろいろ変更の必要な点があって、
最終的には違ってくるとは思うけど、
直前の問題から1つ1つ理解していかないと堂々巡りになるよ 30キーのキーボード作りたいけどmicroでいいんでしょうか
あと書き込んだあとのキーボードは別のパソコンへ繋いでもそのまま使える? 追加 1キーにALT+F8+↑+Enter
とか振れます? >>70
arduino IDEのコンパイルの仕様でloop関数内で長い時間待つのは基本的に駄目だと思う。
今回のスイッチとLEDだけなら問題無いがシリアル通信を使うと問題が発生する。
なので拡張性(シリアル通信など)を考えると、2番が良いと書きました。 だいたいその辺りは一部関数で内部的にnoInterrupts()呼び出されてることがしばしばって話だけどな。
とりあえず処理をしている時にどこの範囲だけでループしてるのか理解した方がいいというか、紙にスクリプトでも書いとけ >>68
>>74
>>77
トグルスイッチだと割とすんなり出来たのでタクトでやってみたくなったのですが
こんなに難しくなるとは思っていませんでした…。
いただいたヒントをまだ理解できていませんので勉強します。 横から眺めていて興味を持ち、
>>63のコードを拝借して外部割込みに挑戦してみた初心者です。
ほとんど>>61さんのねらった動作をしますが、
まれにAB消灯、C点滅という私的にはあり得ない状態になります。
色々考えましたが何が悪いのか分かりません。
勝手にコードを拝借した上に割り込んで申し訳ありませんが、
よろしければぜひ添削お願いします。
http://codepad.org/NSoCmm8z >>81
とんでもないです。ありがたいです。
早速試してみたのですが、
'changesw' was not declared in this scope
と、コンパイルエラーが発生してしまいました… Aduino IDEのバージョン古くない?
うち1.8.1だけどそのエラーはちょっと前に良く出た気がする。
バージョンアップするか、それが面倒なら、
暗黙の宣言問題なので、
void changesw() {
}
を
void setup() {
}
より上に移動すればOK。 microほしいけど足いらないんだよね
どうすれば外れるかな >>83
ありがとうございます。
1.8.3に上げました。
>>81
Cのみ点滅という動作がなくなればまさに私の希望通りの動きです! >>87
Cのみ点滅はあなたの環境でもなりますか?
操舵とするとやっぱ原因究明しないといかんな。
Arduinoで割り込みは初めてなので…。 >>88
はい。
何回かに一回発生しております。
初めてでここまで出来るのですね…。
まず割り込みを一から学ぶことにします。 >>89>>61
http://codepad.org/2HRun7DT
スイッチもLEDも割り込み使ってメインループを空っぽにしてみた
※タイマーつかう都合上でLEDのピンを A=5 B=6 C=9 に変更してるので要LED差し替え
ライブラリ:MsTimer2 でタイマー使ったから
↓からダウンロードして メニューのスケッチ→ライブラリ→ZIP形式をインクルード で読み込んでね
http://www.arduino.cc/playground/uploads/Main/MsTimer2.zip
割り込み関数なのに長すぎるし汚いけど あ、ごめん書き忘れた
スイッチを内部プルアップにしてます(ブレッドボードでテストしてたので)
あと消灯させるときは綺麗に見えるようにCがフェードアウトしていくタイミングにAとB揃えてます
なのでCのタイミングによっては押した瞬間に消灯シークエンスに入りません ごめん消灯シークエンスで変数cの初期化が抜けてた
こっち使って
http://codepad.org/aA9oGB4H >>90
ありがとうございます。
素晴らしすぎて言葉も出ません。
ここまでしていただいた上に大変申し訳ないのですが、解説をしていただけませんでしょうか…。 部外者だけどfに対してのswitch~caseの使い方に感心した
なんでもかんでもbreakつけてただの分岐にしか使ってなかったけどこういう使い方もあるのね… case文で下に抜けるコードは、バグの温床になりやすい。
最低限、下に抜けるというコメントを次のcaseの直前に入れる。
例えば /* FALL THROUGH */とか。
バグの温床になる理由
一般にcase文はbreakで抜ける独立したブロックの事が多い。
そのため、caseの順序を変えたり、caseを間に追加する事が行われることが多く、
caseブロック間に依存関係があるコードに対する考慮が忘れがち。 >>93
さすがに行きなり全部解説してじゃなくて
最低限、各変数をホワイトボードに書きながら自分の脳で1行ずつ実行して
分からない命令があればまず自分で調べて
それでもわからん時にどこがどうしてこうなるのか分からない、とか聞いたらどう? このarduinoMefa互換ボード(https://www.tindie.com/products/FuzzyStudio/naked-mega-an-arduino-mega-2560-compatible-board/https://www.tindie.com/products/FuzzyStudio/naked-mega-an-arduino-mega-2560-compatible-board/)
にはvinピンが見当たらないのですが、外部から電源供給する場合どのようにしたらいいでしょうか?
外部電源の電圧は5vもしくは7.4vです。 電源端子はTindie404の早昼飯になったと思われ ■ このスレッドは過去ログ倉庫に格納されています