Arduino初心者熱烈大歓迎質問スレ part30
■ このスレッドは過去ログ倉庫に格納されています
>>200
4層$5ってどこ?
中華基板屋よりさらに1/10の値段って興味ある >>198
確かに汚かったです。
アノードに回路を追加します。
スタティックのままで、アノード制御追加でもフェード出来ますでしょうか。
フェードしつつダイナミック点灯はプログラムできる気がしないです。 >>203
そりゃ出来るけどアノード制御でブランキングしつつ綺麗にクロスフェードするプログラムを作る作業負荷はダイナミックの場合とほぼ一緒じゃん?
それが達成できるならまぁダイナミックで動かせるようになるよ(つまりそのクソデカ高電圧シフトレジスタは1個でよくなるということだ)
それより送料別で$5で4層やってくれる基板屋俺にも教えて >>201
そうなんです。
だからまとめて注文したいですね。 >>197
>>198
なるほど、上流側の制御回路が必要ですね。
回路の追加ができれば、プログラムはそう難しくないはずですよ。 ニキシーのドライバって出力にツェナーダイオード付いてるから
完全にオフにならないんだね >>209
完全にオフにするとブルードットと呼ばれる異常放電が起きたり
点灯してる電極のコントラストが悪くなってしまう
なので未点灯のカソードはストライキング電圧以下になるように電位を与えるのだ
低耐圧のトランジスタでやるためにツェナーが入ってるだけと思ってる人も居るがそうじゃない
300Vとかスイッチできる素子を使って作ったとしてもオフ時に電位を与えてあげないと見栄えが悪くなるんだ ネット上にホールセンサーを使った回転計タコメーターのスケッチ例が沢山あるけど、
ぜんぶ値がバラバラなので、どのスケッチを信じたらいいか分からないw
基準となる回転数も分からないしw PCファンぐらいしかないけど、これも信用できないw つオシロ
つロジアナ
周波数カウンタはもっと高精度だけど
マイコンのクロック精度の問題が先だろう ロジアナは持ってないし、オシロは中華のDSO138しか持ってないw
DSO138でも15,000回転のモーターの回転数を図れますw? 今、DSO138現物がないので確認できないけれど。
100kHzぐらいの正弦波はなんとなく観測できていたと思う。
>DSO138でも15,000回転のモーターの回転数を図れますw?
250回転/秒。
光でも磁力でも1回転で1周期になるようなセンサーを付けて回転数を確認することは余裕では。 >>215
15000rpmなら250ppsでしかない。
持ってるならまずは使え。草生やして聞く前に。 オシロのプローブをモーターの+、オシロのGNDをモーターのーに繋げば良いんですね?
なんか波形が出ました! >>219
スケッチがINT0のピン割り込みを使ってたり、Loop内だけでピンを読み込んでたりとか微妙に違うんですよ まずは単体のスケッチで試すんだ…
切り分けできないだろう… (´・ω・`) >>221
時計だって自前クロックだけでやるスケッチもあれば
外部クロック使うこともあるやん
3種類違うのがあったら喜んで全部試すようじゃないと捗らんぞ 測定原理が分かってない
&
スケッチが何やってるか分かってない >>226
原理も何もホールセンサーからの信号を拾えばいいだけですよ!
元々ソフトウェアの人間で自作のライブラリー作るぐらいなので、スケッチが分からないとかはないです! > スケッチがINT0のピン割り込みを使ってたり、Loop内だけでピンを読み込んでたりとか微妙に違うんですよ
アレだ
文字は読めるけど内容がわからない >>229
割り込みで拾ってもloop内で拾っても結果は同じはずなんですよ!
それがスケッチごとに最高1,000回転ぐらいバラバラな値がでるんですよ! >>230
そのサンプルプログラムと使ってるセンサや回路を提示しないと誰も助言しようがないのでは? >>230
元々ソフトウェアの人間で自作のライブラリー作れるくらいのオツムでどうにかすればいいんじゃねえの?(笑) もう自分でフルスクラッチからソースコードを書きました!
これで行きます! それが正解!
誰が書いたかわからないオープンソースの問題点を読み解くくらいなら作った方が早い どのプログラムが表示している回転数が正しいかどうかは解らないけど自作コードで満足したそうです
めでたしめでたし >>233
それで自分のと他人のどれかとは結果が一致したの?
それとも全部違うの?
どう折り合いつけたのかぜひ聞きたいわ、自己満足以外で Dso138にはテスト用1KHz矩形波出力端子があるので
そこに接続して安定した1kHz(60000rpm)が観測できるものを選定
2台のArduinoがあるなら
1台に15000rpm(250Hz)のパルス出力するスケッチを書き
もう1台で計測して結果が良好なものを選定
これだけだと思うが 「ホールセンサーの出力がオープンコレクタになっている」に100ペリカ >>240
後半、Arduinoでパルス出力するスケッチを書いたら
オシロか何かで期待通りパルス出ていることを確認してから
それと比較して良好か判断の手順な Dso138持ってるそうなんで動作確認くらいするやろ 道具の持ち腐れってこと?
そんなん初心者以前の問題やね EEPROM書き込みと構造体を組み合わせて利用ということを考えています。
標準EEPROMライブラリのEEPROM.putおよびEEPROM.getを用いると
構造体もそのままEEPROMに記録でき呼び出しもできるという記述を読んだので
試しにString型,int型を含めた状態の構造体をそのままputし、getしてみた
のですが、String型をの部分の文字列の先頭文字が欠けてしまいます。
今までは構造体を用いてはいてもEEPROM記録時はそれぞれの要素を
別個にEEPROMに保存し、String型もByte分割して保存していましたが
これではせっかくの構造体の便利さがもったいないなと・・・
EEPROM.put/getではやはり構造体の中のString型は扱えないのでしょうか?
念のため検証に使用したソースコードを記載します。
ttps://harigami.net/cd?hsh=eb503934-e7fc-4258-886b-f4eec689873c
上記を走らせると下記の出力が得られます
------From Var------
TName =1234567890AB
TValue1 =65532
TValue2 =65533
------ReWrite From EEP------ 最初の構造体に上書きで読み込んだもの
TName =234567890AB <-文字目がかけてしまう
TValue1 =65532
TValue2 =65533
------Write From EEP------ 別の構造体にで読み込んだもの
TName =234567890AB <-文字目がかけてしまう
TValue1 =65532
TValue2 =65533
Done 構造体にはstringのポインタが入ってるだけだから
構造体にはchar配列でテキストエリアを確保しといて
保存読込の時にc_str()とかで変換してコピーしないと駄目だと思う >>247
雑に斜め読みしただけなんだけど
「hardware\arduino\avr\libraries\EEPROM\src\EEPROM.h」を見ると「get」と
「put」は第2引数に指定された変数の大きさを「sizeof」で取得して必要回数
グルグル回して変数のアドレスから1バイトづつ複写している
で、Stringはただのバイト配列ではなくクラスとして定義されているので、
アドレスから順番に読み出してもバイト配列と同じように読み出されないのかも
とりあえずStringの変数からアドレスを引っ張って中身を見てみたらどうかな
Sting str="012345"
uint8_t *addr =(uint8_t*) &str;
Serial.print(String(*addr)); <-文字コードが表示されるんじゃないかな
実機では試していないから間違ってるかも Cの伝統的な構造体は可変長データを中に持つようにはできてないんだよね
つまるところ >>248 の言うとおりだが、それで解る人かどうか。 EEPROMにはStringの文字は保存されてないね
危険なコードだ Stringとcharどっち使うのがいいんだろ
自分は便利だからString使っちゃうけど 使いたい機能に向いてるほうを使うのがいいし、どっちでも実現できるなら好きな方でいいでしょ
メモリたりねぇってときは char でぎちぎちに書く事もあるかもしれないけど Stringで実装してなんかやべー挙動だなってなったらchar使っときゃいんだよ
自分で使う分ならこれでおけ
人に納めるものなら原因特定しておいて、説明求められたとき話せればおけ
開発なんてそんなもん 確実に1バイト抜けるのなら先頭にダミー入れとくでもいいけどね >>255
String class の buffer が指すメモリの文字列消して get したらなんもでてこないでしょ >>256
組込ソフト開発5年目の時、上司に「ポインタ変数に1足したのにアドレスの値が4増えておかしいです!」と騒いだのは内緒だ 皆様、色々ご回答ありがとうございます。
いただきました情報をもとにいろいろこねくり回してるうちにこの時間になってしまい
申し訳ありません。
>>248
Stringのポインタが入っているのみというキーワードをもとに
先の当方が記載したソースコードを見直してみると確かに
いったん変数内を書き換えるように35行目にて
Datacomp1.TName = "";
とやっているためポインタでつながっているおおもとの変数
が書き変わって出力時の表示の時に1文字目が消えて(書き変わって)
しまっていたようです。
その後同部分をDatacomp1.TName = " ";のように空白を増やせばその文字分
出力の文字列も変化することを確認いたしました。
>>251
おっしゃるとおりポインタのおおもとの変数が常に健在の状況で
実験していたため、たまたま出力されていましたが構造体内のStringに文字があるわけで
はないのでEEPROM.put時も文字列ではなくアドレスだけ記録されており
書き込み部分をコメントアウトしてEEPROM.getだけしたものでは構造体内のStringは
空っぽでした。
つまり構造体の中に実体はありませんでした。
>>249
記載いただいたコードを実行してみた所、189という数値が得られました。
ttps://harigami.net/cd?hsh=21877f1c-fb65-4b0e-939c-c6004978db02
これは変数strのポインタアドレスが表示されているという事であってますか?
つまり構造体Stringには実体ではなくこのアドレスが入っているだけという感じなのでしょうか。
細胞のたらない当方の脳ではこんな想像理解しかできず申し訳ありません。
上記を元に色々こねてとりあえず以下のような感じになりました。
ttps://harigami.net/cd?hsh=9fcd76fb-62cc-49c3-8cdc-dbe746a014bc
主たる取り扱いはStringを用いて、構造体への格納j時には教えていただきましたc_str()
で得たDataを構造体内のcharに複製する形をとりました。
また、主たる取り扱い時もcharに変更したバージョンもあわせて試してみました。
ttps://harigami.net/cd?hsh=fd73d385-59ef-4947-bbba-04e67ce8e637
上記2種 いずれも書き込みに関する部分をコメントアウトして読み込みだけでも
文字列取得を行うことができました。
これらの記述で”ばっか、おまえこれやべーよ”なんてところがありましたら
ご教授いただければと思います。 >>259
strcpyのオーバーフローに注意して! >>260
なるほど、確かにString型から持ってくるとき文字数カウントしないと危ない感じですね。
charで確保した文字数を超えないように制限を設けるようにいたします。 >>259
>つまり構造体Stringには実体ではなくこのアドレスが入っているだけという感じなのでしょうか。
String 変数 str には実体は入っていない(実体へのアドレスが入っている)
だから、構造体にString 変数 strを入れても実体へのアドレス以上のものは入らない
という感じ。なので、実体の文字列に到達するにはもうちょい工夫(というかStringクラスの内部構造の理解)が必要だが、
クラス内部を知らなくても、実体へのメモリアドレスを知りたかったら str.c_str() を使えばいいように設計されています。
構造体に&を付けて得られるメモリアドレス、&str というメモリアドレス、そして str.c_str() が返すメモリアドレスを見比べると面白いかもしれませんね。 熱烈大歓迎スレなので
>>259
>>262 の最後の行のを、せっかくなので自分でコード用意してみた
出力結果とそのコメントも後ろのほうにつけてあるので、興味があれば(なければスルーで大丈夫です)
ttps://harigami.net/cd?hsh=d43ecf48-607c-48b2-a407-bc22d42b4e19 >>263
Auduinoのインストールディレクトリの↓の中のWStringがStringクラスだから
ソースを見てみると一目瞭然だと思う
Arduino/hardware/arduino/avr/cores/arduino/
Stringの中でchar配列のbufferをアロケートしてStringの文字列を入れている
c_str()はそのbufferのポインタをreturnしてる
内部でbufferのリアロケートもされるから文字列実体の場所はc_str()で取り出さないとわからない >>264
他にintのデータメンバが2つある、とかソース見たから書けるわけで、私は読んでますが、
あれを読めって初心者にはしんどいかと思いましてねw まあわざわざ標準クラスの中身見るのは本職ぐらいじゃね UNOのRAM領域2048バイトを88%使ってたら
挙動が不安定になったらしく一晩ハマっちゃった
デバッグ用のSerial.printをコメントアウトしたら68%まで
下がって良かった… かなり食ってたんだなこの豚ぁ そこに表示される容量はスタックを考慮されてないからな
あとSerial.printに文字列そのまま渡すとRAMに展開されるからFマクロでくくりたまえ
そうすればROMから読むようになる >>268
Fマクロってprintfに使う方法はない? >>269
printf_Pにして文字列部分はPSTR()で >>268
さんくす
Serial.print( F("Thanks.") );
こんな感じね…
コレ知らんかったなあ… ここ2ヶ月くらい集中してjavascriptやらフロントエンドやってたから
戻ってくるのにちと大変だった… ここ2ヶ月くらい集中して IchigoBASIC やら Go やってたから
戻ってくるのにちと大変だった…
やっぱC++が一番だわ ここ2か月くらい集中してGoToトラベル中止してたから
客が戻ってくるのにちと大変だった…
やっぱGoToでラベルに飛ぶより関数呼んで戻ってくるのが一番だわ >>70
今時goto拒絶みたいなこと言ってると恥かくぞ Vue.jsみたいなクソリッチな開発したあとにarduinoもどると、ああ狭い部屋落ち着く…みたいな感情になる そりゃArduinoでバリバリなUXとか作らないしな。 なんかセールやってたからELEGOOのセットのやつポチってみた >>283
aruduinoで集めたセンサーデータをVue使って
システム画面やグラフ化したけど楽しかったぁ… ウェアラブルのためにとにかく軽くて小さくて
Bluetoothでリモコン操作できるのを作りたい
モーター2つの方向とPWM速度制御したい
マイコンはBeetle BLEで良いですか?
あるいはM5 Atomかなあ? おなか痛くてシリアルモニタみてたらうんこもらしました!!!
どうすればいいですか!!!?? >>289
ピンクローターのコントローラーになら入れられそうだな。 ポチったスターターセットのやつ届いたから一旦全部出したらもう二度とケースに収まらなくなった...新手のパズルか? arduino mega ですが、Vinから9V供給した場合、5Vの端子からは2.7Vの電圧しか
出てませんでした。DCプラグから9V入れると5Vの端子からは5Vちかく出てました。
5V欲しかったらDCプラグから供給するしかないですかね・・・ >>296
ELEGOOのスターターキットってやつ
何度もチャレンジしてたらきっちり入るようになった
やっぱパズルだなこれは ■ このスレッドは過去ログ倉庫に格納されています