Arduino初心者熱烈大歓迎質問スレ part20

1774ワット発電中さん2017/12/29(金) 08:24:48.52ID:fV89GCp3
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/

176774ワット発電中さん2018/02/09(金) 09:07:07.76ID:YMWP168J
一匹、二匹、三匹、…

177774ワット発電中さん2018/02/10(土) 16:51:10.11ID:08pY6hLN
>>162
(仮にコンパイル通ったとしても)volatileとかつけても意味ないと思うよ

割り込みで書き換えられるバッファの内容を、メインのSerial.write()で
出力しようという意図なんだと思うけど、例えば、3byteめまで出力した
時点で割り込みかかって、バッファ書き換えちゃったら4byteめからは
新しいデータを出力することになる

178774ワット発電中さん2018/02/10(土) 17:50:38.09ID:7s63zHMO
>>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;
考えてみてね。

179774ワット発電中さん2018/02/10(土) 22:08:26.50ID:NbPIbvhg
constは「変化しない」じゃなくて、関数の中で「いじるな」というだけでしょ。
volatile で const なんてのは使いまくりだよ。

180774ワット発電中さん2018/02/10(土) 23:38:38.96ID:08pY6hLN
>>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}; にエラーを出さない
のが(何かに基づいて)正しいのかどうかっていうことについては
議論あるところだと思う

181774ワット発電中さん2018/02/11(日) 00:46:28.48ID:gIOP2UcN
ボタンに0.1μFのコンデンサを付けたらチャタリングが消えた!
コンデンサすげー!

182774ワット発電中さん2018/02/11(日) 08:10:57.44ID:9AI+ikPr
>>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を使って関数が外部変数を変更しないと宣言したいのは
よくわかるけど、仕様上はそういう扱いにならない。

183774ワット発電中さん2018/02/11(日) 11:52:52.82ID:cCJIG0w0
>>182
>constを使って関数が外部変数を変更しないと宣言したいのは
>よくわかるけど、仕様上はそういう扱いにならない。

void func(const int *x); とすると、関数内部では
xが指している先の値を変更するコードは書けないわけだから
外部変数を変更しないと宣言したのと同じことなんじゃ?

184774ワット発電中さん2018/02/11(日) 13:01:25.53ID:kQ4VAM62
void foo(const (int * x)) ていうのはないんか
void foo(int const * x) てのはkelは通した。

185774ワット発電中さん2018/02/11(日) 15:45:20.78ID:iua5RRYL
>>183
俺もその通りだと思う

186774ワット発電中さん2018/02/11(日) 19:45:40.60ID:9AI+ikPr
>>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);
}
というキャストが必要。

187774ワット発電中さん2018/02/11(日) 19:47:45.83ID:9AI+ikPr
>>186
ちょっとtypoがあった。
さっきのコードのivarはvarと読み替えてくれ。

188774ワット発電中さん2018/02/11(日) 23:13:17.64ID:XtLLqnq0
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を繋いでます。

どこかおかしいでしょうか。

189774ワット発電中さん2018/02/12(月) 07:55:35.07ID:caKP0Gma
rxとtx逆だったり?

190774ワット発電中さん2018/02/12(月) 10:09:25.14ID:GwmJRDb9
データシートにはUART(TTL interface level 3.3V)とあるが
5V仕様のNanoを使っているのではないですか?

191774ワット発電中さん2018/02/12(月) 11:48:55.00ID:KST09MXE
俺も>>189と同意見
Nanoのtxに指定したピンにセンサーのrx
Nanoのrxに指定したピンにセンサーのtxをつなぐんやで
Nanoが5V仕様ならレベルコンバーター入れとくんやで

192774ワット発電中さん2018/02/12(月) 13:39:04.15ID:KST09MXE
arduino mh-z19でググると直結してる人が結構多いね
5Vトレラントじゃないのに

まあ直ぐに壊れることはないかもしれないけど
ウェブ上にそういうのが沢山あるのが気になるわ

193774ワット発電中さん2018/02/12(月) 15:03:00.98ID:5UVxnavF
Interface level 3.3 V(Compatible with 5V) って書いてるよ

1941882018/02/12(月) 16:41:53.05ID:VbKA4ZqC
>>189、191
でした。。。。
rxはrx同士、txはtx同士と思ってました。

でも、レベルコンバーターやら、5Vトレラントやら、また???な事が。

データシート見ると、Working voltageが4.5〜5.5VDCとなってたので、
Arduino Nanoの5Vに直結したんですが、これじゃマズいんでしょうか?

195774ワット発電中さん2018/02/12(月) 17:52:58.60ID:caKP0Gma
その電圧範囲は電源として与える電圧の数字
その範囲ならちゃんと動くよってことだから5Vなら問題ない
インターフェイスの電圧レベルとはまた別の話

196774ワット発電中さん2018/02/12(月) 18:47:54.88ID:8eqFdMlF
arduinoにLEDテープを組み合わせようと思っていますが、大量の電力(5V1A近く)が必要なので外部のUSBから電源をとろうと思っています。
https://www.switch-science.com/catalog/2247/
USBから5Vを取り出す際、↑を使って単に接続しても問題ないでしょうか?
それとも、↓のようなものを使ったほうがいいのでしょうか?
https://www.amazon.co.jp/gp/aw/d/B00LM1XVRK/

197774ワット発電中さん2018/02/12(月) 19:57:19.72ID:hiW4Dkl3
1Aだろうが100Aだろうが、USB規格の電源から取るんなら
そのまま取れば良いんでない?

198774ワット発電中さん2018/02/12(月) 20:35:05.70ID:kbh8m2Op
>>197
ありがとうございます。ただ配線をしただけのものにしようと思います。

199774ワット発電中さん2018/02/12(月) 21:55:45.50ID:Q93BfEiQ
悪いひとたちがやって来て
みんなを殺した

理由なんて簡単さ
そこに弱いひとたちがいたから

女達は犯され
老人と子供は燃やされた

悪いひとたちはその土地に
家を建てて子供を生んだ

そして街ができ
悪いひとたちの子孫は増え続けた


朝鮮進駐軍 関東大震災 日本人10万人大虐殺

https://youtu.be/iBIA45CrE30
https://youtu.be/D0vgxFC04JQ
https://www.youtube.com/watch?v=sYsrzIjKJBc
https://www.youtube.com/watch?v=zYBCTRryFP8

200774ワット発電中さん2018/02/12(月) 23:11:55.06ID:tl6cdiVH
スマホなんかの充電用アダプタからUSB給電なら行けると思うけど
PCのUSBポートから1Aは規格外では?(typeCを除く)
素直に5Vアダプタではどうでしょう。

2011962018/02/12(月) 23:33:36.04ID:kbh8m2Op
>>200
本来のUSB仕様だとたしかに500mAまでなので、今回は給電専用のUSBを使うこと前提にしています。
ACから5Vを取り出すのが確実なのは分かりますが、今回はバイクに載せるので、できるだけ扱いやすいUSBに拘っています。

202774ワット発電中さん2018/02/13(火) 15:42:49.28ID:soy60CLq
(そもそも下のは5V取り出せない件)

203774ワット発電中さん2018/02/13(火) 17:01:00.06ID:Eg4ToKN/
本来のUSBの限界こえてるってわかってんなら、まず5V1Aをはき出せる出力がUSB端子の電源のことをUSBと略すのをやめようぜ

回答する前に本来のUSBじゃダメだけど大丈夫?といちいち確認されるのも無駄でしょ

204774ワット発電中さん2018/02/13(火) 20:31:10.14ID:IveFcOZF
なんかバイク燃やしそうで危なっかしいね。
電源を何から取るのか分からんが
バイクのバッテリーなら各所にヒューズ入れてね。
リチウムイオン電池のモバイルバッテリーは、危ないからダメ。衝撃で最悪火を噴くよ。

205774ワット発電中さん2018/02/13(火) 23:00:42.53ID:vz+Ou7Cy
アマゾンのリンクが何も分かっていない感を出しているけど大丈夫なのか?

206774ワット発電中さん2018/02/13(火) 23:13:44.02ID:G7Ln4+wR
俺も初心者でよく分からんけど
初心者スレなんだから分かってる人が教えてあげたらいいんじゃね?

207774ワット発電中さん2018/02/14(水) 00:40:37.39ID:/5OCDwV0
バイクのバッテリーからUSBのコネクタを使って5V 1A以上取り出すっていうことでいいのかわからんが、
そう解釈するとして、こういうのじゃいかんのか?

https://www.amazon.co.jp/dp/B01MF93TRO/

208774ワット発電中さん2018/02/14(水) 05:54:42.54ID:HdHoIztL
>>201
acから5ボルトってどういうことですか?
(ここらへんの解釈をちゃんと整理していかないとほんとにバイク燃やしそう)

リレーを使っての電源取り出し方法はわかりますか?

209774ワット発電中さん2018/02/14(水) 06:09:04.81ID:1O1ja9xQ
>>208
常識的に解釈すればこんな感じでは。

>(商用電源の)ACから(AC-DCアダプタを使って)5Vを取り出すのが確実なのは分かりますが、
>今回は(商用電源が使えない)バイクに載せるので、できるだけ扱いやすいUSB(接続のモバイルバッテリからの供給)に拘っています。

210774ワット発電中さん2018/02/14(水) 07:35:49.82ID:dYj2coZD
https://www.amazon.co.jp/KiloNext-バイク用-USBポート-防水キャップ-ブルーLED付き/dp/B01MF93TRO

こういうのじゃないのか

211774ワット発電中さん2018/02/14(水) 07:37:02.74ID:dYj2coZD

212774ワット発電中さん2018/02/14(水) 22:41:13.94ID:yyphU46q
>>209
なるほどそっちか。ACってオルタネーターのことを言ってると思い込んでて混乱してました

213774ワット発電中さん2018/02/14(水) 23:01:11.95ID:/5OCDwV0
ぜんぜんArduinoと関係ない話題ばかりだな
それよりStar Ottoはどうなったんだ?

214774ワット発電中さん2018/02/15(木) 14:18:11.10ID:P92ximf9
バイク板で似たような質問してる子と同一人物なのかな?

215774ワット発電中さん2018/02/15(木) 14:58:45.36ID:u6nkZcSV
そこら中で赤の他人を「子」呼ばわりしているのも同一人物なのかな?
掲示板弁慶って、とてもあわれだね。

216774ワット発電中さん2018/02/16(金) 13:27:43.85ID:inElPsAs
「子」
自分は大人、自分の方が立場が上、って主張したいのだろうが、
こんな所で自分から言うところが何だかミジメで哀れっぽいな。
二人をよく知っている周りの人間が言うなら分らないこ事も無いが。

217774ワット発電中さん2018/02/16(金) 23:50:54.79ID:Iz99ah4F
スリープのPOWER_DOWNで『徹底的』に消費電力を抑える場合は、

・ADコンバータを無効
・アナログコンパレータを禁止
・ウォッチドッグタイマーの禁止
・BODをオフ

ぐらいですか?あと、使わないピンのモードを、
OUTPUTかINPUT、HIGHかLOWどっちにすればいいですか?
徹底的に待機電力を抑えたいのです。

218774ワット発電中さん2018/02/17(土) 11:25:53.75ID:bYKMVPaf

219774ワット発電中さん2018/02/17(土) 11:26:43.03ID:b3vSYT5L
オープンになっているピンなら、C-MOSのICならプルアップ設定の入力か、出力(HでもLでも)で良いのでは?

220774ワット発電中さん2018/02/17(土) 11:29:22.71ID:b3vSYT5L
「C-MOSの」は余分でした。Arduino前提だもの。

徹底的に下げたいなら、USB-シリアル通信のICが載ってるものは避けるとか
レギュレータでの消費電流も見直すとか、が必要かもですね。

221774ワット発電中さん2018/02/17(土) 12:48:18.27ID:ix+L2BJQ
あとはスリープを使ってCPUを止めたり

2222172018/02/17(土) 13:09:19.81ID:gKP0S/dR
>>218-221
Pro Miniなんですが、電源LEDとレギュレーターは取っちゃいました。
ピン設定ははOUTPUTならハイでもローでもどちらでもいいんですね。
ありがとうござました。

223774ワット発電中さん2018/02/19(月) 16:23:42.53ID:EA+S4AYB
質問です!

ArduinoにPS2のケーブルを繋いで、ArduinoをPS2のコントローラーとして
機能させるライブラリって存在しませんか?

PS2のコントローラーをArduinoにつなぐサンプルは見つかったのですが、
逆が見つかりませんでした。

http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/

Arduinoは基本的なコードが書ける程度の初級者です。

「このあたり勉強するとわかるよ」的なアドバイスでもかまいません。

配線とプロトコルを解説しているサイトも見つけたのですが、
PS2コンのプロトコルをArduinoで送信するやり方がわかりません。

以上、よろしくおねがいします。

224774ワット発電中さん2018/02/19(月) 18:05:03.29ID:LUZErJcg
>>223
コントローラーの基板乗っ取りが一番簡単そうだけどな。

コントローラを分解して、ボタンの基板のところにはんだ付け。
リレー回路組んでarduinoで接続。

225774ワット発電中さん2018/02/19(月) 18:09:51.69ID:0anLCSz7
>>223
ttp://magicpuppet.org/rollingswitch.html
ttp://magicpuppet.org/rolling_switch_technical_document.pdf

2262232018/02/19(月) 19:21:23.48ID:EA+S4AYB
>>225
ありがとうございます!まさにこんな資料を探していました。

>>224もありがとうございます!

新着レスの表示
レスを投稿する