Arduino初心者熱烈大歓迎質問スレ part20
■ このスレッドは過去ログ倉庫に格納されています
http://www.arduino.cc/
【質問者心得】
・スレに一応目を通してから質問しましょう
・回答者はエスパーではありません。状況が分かるように詳しく書きましょう
詳しく書いてくれないと、答える方も困ってしまいます。答えようがないのです
【回答者心得】
・すぐにググレカスと言う前に「○○でググれカス」って言うような大人の余裕を見せつけてやりましょう
・節度ある初心者さんには、特に優しくね
【分裂騒ぎ】
おさまった模様。くわしくはぐぐれ。
前スレ
Arduino初心者熱烈大歓迎質問スレ part19 [無断転載禁止]©2ch.net
http://rio2016.2ch.net/test/read.cgi/denki/1500745528/
過去スレ
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/
関連スレ
【Arduino】フィジカル・コンピューティング4【OSC】
http://wc2014.2ch.net/test/read.cgi/denki/1407830304/
学研マイコン Japanino ジャパニーノで遊ぶスレ 3
http://kamome.2ch.net/test/read.cgi/denki/1286354827/ arduino初心者です。
タクトスイッチを押すとマウスカーソルが
現在の位置から指定ピクセル分動くスケッチを書きたいです。
下記のように書いたところ、Mouse.moveの数値はピクセル数ではないようで
うまくいきません。どのように記述すればよいでしょうか?
arduino microを使用しています。
よろしくお願いします。
#include <Mouse.h>
void setup() {
Mouse.begin();
pinMode(6, INPUT_PULLUP);
}
void loop()
{
if ( digitalRead(6) == LOW)
{
Mouse.move(1, 0 , 0); //横に1動け
delay(100);
}
} >>164
タカチの防水ケースはいかがでしょう。
ただし、USBケーブル等のハーネスを通す必要がある場合、
ハーネスのコネクタを取る
ケースに穴を開け防水用ブッシュをつけ、ハーネスを通す
ハーネスにコネクタを付ける
の、加工が必要です。
http://www.takachi-el.co.jp/data/catalog/catalog02.html >>166
ありがとうございます
ただ、市販品だとやはり合わないと思うのです・・・ >>165
スケッチはそれで動きますよ
ケーブルの接触不良、配線などのハードまたはパソコン認識確認してみて下さい >>164
何を入れるんですか?
自分はタカチのケースばっかりです
リポバッテリーにしたり小さい部品使うなどしてますが パナソニックの低圧進相コンデンサの容器がいい感じかなって思った
中がどんな風になってるのかは知らないけどw >>168
はい。スイッチは動いています。
Mouse.moveの数値はピクセル数ではないようで
うまくいきません。
よろしくお願いします。 >>172
ミッキー マウス 単位 でググってみて >>162
(仮にコンパイル通ったとしても)volatileとかつけても意味ないと思うよ
割り込みで書き換えられるバッファの内容を、メインのSerial.write()で
出力しようという意図なんだと思うけど、例えば、3byteめまで出力した
時点で割り込みかかって、バッファ書き換えちゃったら4byteめからは
新しいデータを出力することになる >>163
なんか説明が変だなあ。
size_t HardwareSerial::write(const uint8_t *buffer, size_t size);
という宣言の意味は、bufferというポインタの指してる先がuint8_t型の
データで、それは変化しない。という意味だよ。
volatile byte test[16] = {0}
という宣言は、文字通りtest配列の中身がvolatileで、中身がいつ変化するか
予想できませんと言っている。
勝手に変化する配列要素を、変化しない値を指すはずのbufferポインタで
指したら矛盾するだろ?
ということだと思うが?
ちなみに、CやC++の宣言は、変数名に近い方から順に解釈するのが正しい。
以下の宣言を正しく読めるかな?
int *(ar[8])
int (*ar)[8]
const int *ar
int * const ar
const int *volatile ar;
答え
int *(ar[8]) はarは8要素の配列で、一つ一つが指している先がint型。
int (*ar)[8] はarが指している先は8要素の配列で、一つ一つがint型。
ar++とやるとint 8個分ポインタが進む。
const int *ar はaの指している先は、値が変化しない(代入も不可)int型。
int * const ar はarは値が変化せず(代入も不可)指している先がint型。
この場合、初期化時に値を入れないと使い物にならない。
const int *volatile ar;
考えてみてね。 constは「変化しない」じゃなくて、関数の中で「いじるな」というだけでしょ。
volatile で const なんてのは使いまくりだよ。 >>178さんの>>163に対する指摘は正しいと思うんだけど
>>178さんと>>179さんのどっちが正しいかは分からないな
size_t HardwareSerial::write(const uint8_t *buffer, size_t size); は
・関数の定義に対しては「中でいじるな」ってことを強制する
(いじるようなコードを書くとコンパイルエラーになる)
・外部に対しては、「関数内部でいじってないことを宣言する」
・・・ということだけだと思うから、arduinoのコンパイラ(GCC++)が
volatile byte test[16] = {0}; にはエラーを出して
byte test[16] = {0}; にエラーを出さない
のが(何かに基づいて)正しいのかどうかっていうことについては
議論あるところだと思う ボタンに0.1μFのコンデンサを付けたらチャタリングが消えた!
コンデンサすげー! >>179
void func(const int x) {}
の場合、xは値渡しで渡され、
この関数入口で初期化されるconst int変数であり、
関数の中だけで存在する。
この値の生きている関数内で定数。
仮にconstを無くして関数内でx=0を実行しても外部の変数に伝搬しない。
しかし、
void func(const int *x) {}
というのは、xが指している先がconst intという意味
const intは初期化時に値を入れない限り変更できない。
constという修飾子はこの関数が変更しないことを宣言するのでなく、
const int宣言されている値が外部にあることを宣言している。
それがvolatile intだったらおかしいし、単なるintでもダメ。
残念ながら、変数名に近い方から順に解釈すると、このようになるし、
それ以外の解釈がない。
constを使って関数が外部変数を変更しないと宣言したいのは
よくわかるけど、仕様上はそういう扱いにならない。 >>182
>constを使って関数が外部変数を変更しないと宣言したいのは
>よくわかるけど、仕様上はそういう扱いにならない。
void func(const int *x); とすると、関数内部では
xが指している先の値を変更するコードは書けないわけだから
外部変数を変更しないと宣言したのと同じことなんじゃ? void foo(const (int * x)) ていうのはないんか
void foo(int const * x) てのはkelは通した。 >>183
> 外部変数を変更しないと宣言したのと同じことなんじゃ?
同じじゃないんだ。
void func(const int *x) {}
と書くと、関数func()内で外部変数を変更しないと宣言した以外に、
*xの指す外部変数はconst宣言されている変数だ。
と言う、余分な事も宣言してしまうんだよ。
その結果、
int ivar;
void func(const int *x) {}
void fun2c2(void) {
func(&var);
}
こういうプログラムは、func()の呼び出しで、
引数の型が違うと怒られてしまう。
なぜなら、varがconst intではないからだ。
もともとの質問者の状況はこの状況に近い。
怒られないためには、やりたくはないけど、
void fun2c2(void) {
func((const int *)&var);
}
というキャストが必要。 >>186
ちょっとtypoがあった。
さっきのコードのivarはvarと読み替えてくれ。 ArduinoNanoと、MH-Z19Bを、
https://github.com/nara256/mhz19_uart
を使って、内サンプルの
mhz19_getppm.ino
を動かしてみたんですが、シリアルモニターには、
error: can't get MH-Z19 response.
MH-Z19 now warming up... status:error: can't get MH-Z19 response.
-1
となり、数値を取ってくれません。
センサーのrxはD4に、txはD5に刺してます。
あとはGNDと5Vを繋いでます。
どこかおかしいでしょうか。 データシートにはUART(TTL interface level 3.3V)とあるが
5V仕様のNanoを使っているのではないですか? 俺も>>189と同意見
Nanoのtxに指定したピンにセンサーのrx
Nanoのrxに指定したピンにセンサーのtxをつなぐんやで
Nanoが5V仕様ならレベルコンバーター入れとくんやで arduino mh-z19でググると直結してる人が結構多いね
5Vトレラントじゃないのに
まあ直ぐに壊れることはないかもしれないけど
ウェブ上にそういうのが沢山あるのが気になるわ Interface level 3.3 V(Compatible with 5V) って書いてるよ >>189、191
でした。。。。
rxはrx同士、txはtx同士と思ってました。
でも、レベルコンバーターやら、5Vトレラントやら、また???な事が。
データシート見ると、Working voltageが4.5〜5.5VDCとなってたので、
Arduino Nanoの5Vに直結したんですが、これじゃマズいんでしょうか? その電圧範囲は電源として与える電圧の数字
その範囲ならちゃんと動くよってことだから5Vなら問題ない
インターフェイスの電圧レベルとはまた別の話 arduinoにLEDテープを組み合わせようと思っていますが、大量の電力(5V1A近く)が必要なので外部のUSBから電源をとろうと思っています。
https://www.switch-science.com/catalog/2247/
USBから5Vを取り出す際、↑を使って単に接続しても問題ないでしょうか?
それとも、↓のようなものを使ったほうがいいのでしょうか?
https://www.amazon.co.jp/gp/aw/d/B00LM1XVRK/ 1Aだろうが100Aだろうが、USB規格の電源から取るんなら
そのまま取れば良いんでない? >>197
ありがとうございます。ただ配線をしただけのものにしようと思います。 スマホなんかの充電用アダプタからUSB給電なら行けると思うけど
PCのUSBポートから1Aは規格外では?(typeCを除く)
素直に5Vアダプタではどうでしょう。 >>200
本来のUSB仕様だとたしかに500mAまでなので、今回は給電専用のUSBを使うこと前提にしています。
ACから5Vを取り出すのが確実なのは分かりますが、今回はバイクに載せるので、できるだけ扱いやすいUSBに拘っています。 本来のUSBの限界こえてるってわかってんなら、まず5V1Aをはき出せる出力がUSB端子の電源のことをUSBと略すのをやめようぜ
回答する前に本来のUSBじゃダメだけど大丈夫?といちいち確認されるのも無駄でしょ なんかバイク燃やしそうで危なっかしいね。
電源を何から取るのか分からんが
バイクのバッテリーなら各所にヒューズ入れてね。
リチウムイオン電池のモバイルバッテリーは、危ないからダメ。衝撃で最悪火を噴くよ。 アマゾンのリンクが何も分かっていない感を出しているけど大丈夫なのか? 俺も初心者でよく分からんけど
初心者スレなんだから分かってる人が教えてあげたらいいんじゃね? バイクのバッテリーからUSBのコネクタを使って5V 1A以上取り出すっていうことでいいのかわからんが、
そう解釈するとして、こういうのじゃいかんのか?
https://www.amazon.co.jp/dp/B01MF93TRO/ >>201
acから5ボルトってどういうことですか?
(ここらへんの解釈をちゃんと整理していかないとほんとにバイク燃やしそう)
リレーを使っての電源取り出し方法はわかりますか? >>208
常識的に解釈すればこんな感じでは。
>(商用電源の)ACから(AC-DCアダプタを使って)5Vを取り出すのが確実なのは分かりますが、
>今回は(商用電源が使えない)バイクに載せるので、できるだけ扱いやすいUSB(接続のモバイルバッテリからの供給)に拘っています。 https://www.amazon.co.jp/KiloNext-バイク用-USBポート-防水キャップ-ブルーLED付き/dp/B01MF93TRO
こういうのじゃないのか >>209
なるほどそっちか。ACってオルタネーターのことを言ってると思い込んでて混乱してました ぜんぜんArduinoと関係ない話題ばかりだな
それよりStar Ottoはどうなったんだ? バイク板で似たような質問してる子と同一人物なのかな? そこら中で赤の他人を「子」呼ばわりしているのも同一人物なのかな?
掲示板弁慶って、とてもあわれだね。 「子」
自分は大人、自分の方が立場が上、って主張したいのだろうが、
こんな所で自分から言うところが何だかミジメで哀れっぽいな。
二人をよく知っている周りの人間が言うなら分らないこ事も無いが。 スリープのPOWER_DOWNで『徹底的』に消費電力を抑える場合は、
・ADコンバータを無効
・アナログコンパレータを禁止
・ウォッチドッグタイマーの禁止
・BODをオフ
ぐらいですか?あと、使わないピンのモードを、
OUTPUTかINPUT、HIGHかLOWどっちにすればいいですか?
徹底的に待機電力を抑えたいのです。 オープンになっているピンなら、C-MOSのICならプルアップ設定の入力か、出力(HでもLでも)で良いのでは? 「C-MOSの」は余分でした。Arduino前提だもの。
徹底的に下げたいなら、USB-シリアル通信のICが載ってるものは避けるとか
レギュレータでの消費電流も見直すとか、が必要かもですね。 >>218-221
Pro Miniなんですが、電源LEDとレギュレーターは取っちゃいました。
ピン設定ははOUTPUTならハイでもローでもどちらでもいいんですね。
ありがとうござました。 質問です!
ArduinoにPS2のケーブルを繋いで、ArduinoをPS2のコントローラーとして
機能させるライブラリって存在しませんか?
PS2のコントローラーをArduinoにつなぐサンプルは見つかったのですが、
逆が見つかりませんでした。
http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
Arduinoは基本的なコードが書ける程度の初級者です。
「このあたり勉強するとわかるよ」的なアドバイスでもかまいません。
配線とプロトコルを解説しているサイトも見つけたのですが、
PS2コンのプロトコルをArduinoで送信するやり方がわかりません。
以上、よろしくおねがいします。 >>223
コントローラーの基板乗っ取りが一番簡単そうだけどな。
コントローラを分解して、ボタンの基板のところにはんだ付け。
リレー回路組んでarduinoで接続。 >>223
ttp://magicpuppet.org/rollingswitch.html
ttp://magicpuppet.org/rolling_switch_technical_document.pdf >>225
ありがとうございます!まさにこんな資料を探していました。
>>224もありがとうございます! アルディーノ初心者です(始めて4時間です)
Arduino Uno
DHT11温湿度モジュール(Temperature and Humidity Sensor)[DFR0067]
4桁7segLED(カソードコモン)(OSL40562-LB)
上記の部品を手に入れまして、温湿度計が作りたいです。
早い話
ttp://tsukutta.hatenablog.com/entry/2014/08/14/094815
と同じものを作りたくて
回路、スケッチをそのまま真似したのですが
コンパイルエラーとなり書き込みが出来ません
DHT11のデータをPCで読み込むためのソフト?はダウンロードしたのですが
それでも直りません
これから試行錯誤するつもりですが、どなたか新たに必要なソフトないしは正しいスケッチを教えていただけないでしょうか?
温度だけでもかまいません。とにかく表示させたいです <MsTimer2.h> というライブラリがないと予想。
ttp://www.geocities.jp/zattouka/GarageHouse/micon/Arduino/TIMERtoLED/TIMERtoLED.htm
とか参考になれば。。。 >>228
うちの環境では全くエラー出ないよ。
測定結果もちゃんとシリアル・モニターに表示される。
つまり、リンク先のスケッチに間違いはない。 >>228
調べた感じでは何かソフトが足りないという感じの内容のようです
>>229
<MsTimer2.h>と同じワードがエラーメッセージにありました!
ダウンロードしてみます!
申し訳ないのですが睡眠をとらせていただきます
ありがとうございました<(_ _)> 232です
昨日のarduinoですが無事起動しました
ありがとうございました
これから温度によってLEDの色が変わるようにしていこうと思います! >>233
解決したら、その経緯を報告するのが筋。
といっても、このキャラに高望みは無理か…。 >>234
この流れなら>>232でやると言っていた内容そのままなんじゃないかな?
ちゃんと報告している方だ。 質問する
自分は寝る
報告は無い
ゆとりってこんなもん >>237
悪いなんて言ってない。
「ゆとり」を分析してみただけ。
あえて言うなら、悪いのは「ゆとり」でなくお前のような事なかれ主義。 >>236
質問する、質問に答える、お礼を言う
これだけでいいだろ
それが嫌なら答えなくていいぞ >>238
では、事なかれ主義になれ。
楽だぞ、そんなんじゃ生きているのがツライだろ?
良い診療内科を紹介してやってもいいw 遅くまでレスを待つ人が出てこないように、その日はもう書かずに落ちると宣言したことに「こんなもん」と言う。
「こんなもん」と言っておいて「悪いとは言ってない」と言う。
報告があったのに報告がないと言ってしまう。
「ゆとり」とひっくるめてこうだ、って分析ごっこ。そんな分析ごっこは聞いて不快になる人はいても、得をする人ってたいしていない。
たしなめられたら自分のことは棚に上げて相手を事なかれだと言う。
初心者スレで憂さ晴らしやめて。 >>241
なんの
つつ鏡
返しだ!
リエントラントでスタックレベルならぬ「つ」レベルが深くなる、ハハハ。
IDコロ助を相手に大人げない事をしてしまった。
いつもならアホの相手は深入りしないのだが、
少し5輪競技の成績も悪いしイライラしてたので・・・。
皆の衆、下らないやり取りスマン。 IDEが吐くメッセージすら読まないヤツがマイコン使うようななったんだ。
ことの良し悪し関係なく、もう何でもありの時代なのよ。 >>233
DHT11よりもBME280の方が、価格、寿命、寸法、ソフトの書きやすさで優れていると思う。
精度はなんとも言えないけど、経験としてはDHTは湿度センサが狂いやすい。
換装の例
↓
http://intellectualcuriosity.hatenablog.com/entry/2017/12/14/212651 そんなに嫌ならテンプレに追加して息苦しいスレに育てれば シリアル通信しているデバイスの間にかまして、パケットをフィルタしたいんですが
デバイス - Arduino - ホスト
|
デバッグモニタ(PC)
シリアルが3系統必要になります。
HardwareSerial + SoftwareSerial*2を使えば解決できると思ったのですが、
全く受信できません(スケッチは以下の通り)
void loop()
{
s1.listen();
while (s1.available() > 0) {
int b = s1.read();
char buf[10];
sprintf(buf, "1:%d", b);
Serial.println(buf);
}
s2.listen();
while (s2.available() > 0) {
int b = s2.read();
char buf[10];
sprintf(buf, "2:%d", b);
Serial.println(buf);
}
}
同時受信を実現しているライブラリってないのでしょうか >>247
megaかdue使えばいいのに
互換品なら安いよ というか、そのプログラムのwhileの中を直さないとだめだね
どっちかが受信したら、受信したポートのデータを受け取る様にしないと >>248
できれば、Nanoサイズが欲しいんですよね
なんだったら値段もNanoが・・・
>>249
これはまだそれぞれのポートから受けとったデータを
PCデバッガに転送するだけ(動作確認用)です
>>250
Hardware+Softwareならできます。
Software*2同時が無理っぽいんです
マルチポートの確認用のデバイスは、同じくArduinoで
void loop() {
count = (count + 2) % 256;
s1.write(count);
s2.write(count + 1);
delay(500);
}
こんなスケッチを用意しました
>>247のスケッチで、s1かs2どちらかのブロックをコメントアウトすると
当然のように受信し出すんです。 ちなみに、mega互換は先ほど発注しました。
これで間違いなく動く物ができてから、Nanoに落とし込めないか検討するべきですね
>できれば、Nanoサイズが欲しいんですよね
>なんだったら値段もNanoが・・・
これはくだらないこだわりでした >>252
>>248はハードウェアシリアルが4つあるからという意味で、
ソフトシリアルでやるなら通信速度を犠牲にして
タイマー割り込みを併用するしかないと思うよ シリアルを受信してPCに送信するならLeonardでもできそうだがどうなんだろう ソフトシリアルで実現することに労力使う意味があるとは思えないけど
↓こんなところも参考にしてみたら
ttps://garretlab.web.fc2.com/arduino_reference/libraries/standard_libraries/SoftwareSerial/index.html 今更かもしれないけど…
デバッグ側が通信内容を垂れ流すだけで良いのであれば、デバッグ側をsoftwareSerialにしてしまえば解決するような。
あいたHardwareSerialをデバイス側かホスト側に割り当てれば、SoftwareSerialの待ち受けは1つで良いし。
デバイスorホストがPCでない場合、ArduinoのオンボードUSBシリアルが使えなくなるから割と面倒ではあるけど レーザーモジュール関連を眺めてると皆受光側は汎用のCdSを使われていますが、
レーザーの波長にしか反応しない明るい所でも使える専用の受光モジュール的な物は
存在しないのでしょうか? >>258
レーザー受光用にCdSなんぞ使わんのじゃないか?
Photo Diodeだろう nanoでon500ms,1hzの方形波のon時間
を測りたい。方形波はrtc3231から
出力。インプットキャプチャで
立ち上がりと立ち下がりで割り込み、
その時のタマー1のicr1と、
タイマー1のカウンタが
オーバーフローした回数から
時間を計算。この流れでおかしな
ところがありますか?
ロジアナで方形波と、立ち上がりと
立ち下がりをキャプチャできている
ことは確認しました。
参考サイトがあればうれしいです 何言ってるか微妙に分からんからスケッチ貼っちゃうといい。
個人的には0.5秒サイクルならもっと適当でもいいと思うけど、まぁ現状測れてるんなら #include <DS3232RTC.h> //http://github.com/JChristensen/DS3232RTC
#include <Streaming.h> //http://arduiniana.org/libraries/streaming/
#include <Time.h> //https://github.com/PaulStoffregen/Time
#include <TimeLib.h> //https://github.com/PaulStoffregen/Time
#include <Wire.h> //http://arduino.cc/en/Reference/Wire
#define echoPin 8 // Echo Pin
volatile unsigned long timer1_overflow_count = 0;//volatile 割りこみ関数、メイン関数間で共有する時使用
volatile unsigned long pulse_count = 0;
volatile bool tgle_catch = true;
volatile bool wait = true;
ISR(TIMER1_OVF_vect)//timer1がオーバーフローした際に呼ばれる。オーバーフローまで4ms弱ある
{
timer1_overflow_count++;
}
ISR(TIMER1_CAPT_vect)
{
cli();//割りこみ禁止
pulse_count = ICR1;
if(tgle_catch){
digitalWrite(10, HIGH);TCCR1B = 0b00000001;//timer1 インプットキャプチャ立ち 下がり でON 分周比1 カウント開始
}else{
digitalWrite(9, HIGH);TCCR1B = 0b01000001;//timer1 インプットキャプチャ立ち上がりでON 分周比1 カウント開始
}tgle_catch = !tgle_catch;
wait = false;
sei();//割りこみ許可
} ■ このスレッドは過去ログ倉庫に格納されています