俺言語。

自分にしか理解できない言語で書かれた備忘録

【Arduino】MicroでSPI通信を使用するときのCS(SS)ピン

Arduino MicorでSPI通信するときのCSピンの件。

色々なところのピン配図を見ると#8がSSとなっている。

f:id:hukkuramamemoti:20200517011542p:plain

f:id:hukkuramamemoti:20200517012330p:plain

なのでそのように配線してプログラム上でのSPIピンを#8として
コーディングしても一向にSPIが通信スタートせず。。

どうやらMicroは通常のデジタルピンをCSピンとしているみたい。
今回は#3をCSピンとしたところ無事動いた。

CSピンをオシロに接続してSPI通信開始するはずのタイミングで信号を見てみると
Hiになっていた。なのでCSピンは問題ないかと思っていたのだけど
よくよく考えるとCSピンは通信開始時Lowの状態が正しかったはず。

【Arduino】MCP2515で受信するCAN信号のフィルタ方法 ~MaskとFilterの使用方法

MCP2515というCANコントローラは
2個の受け入れマスク(2個受信バッファがあり、各バッファに1つずつ)と
6個の受け入れフィルタがあって、これをしっかり設定しないと意図したメッセージが取得できない。

SeeedのCAN_BUS_Shieldを使う。READMEがわかりやすくていいね。
GitHub - Seeed-Studio/CAN_BUS_Shield: CAN Bus Shield - MCP2515&MCP2551

フィルタとマスクの設定方法

ライブラリでは下記のメソッドを使ってフィルタとマスクを設定する。

f:id:hukkuramamemoti:20200517005834p:plain

2番目の引数は標準IDか拡張IDかなのでほとんどのケースで標準IDの0になるかと。

マスク0はフィルタ0, 1
マスク1はフィルタ2, 3, 4, 5と組み合わせて使う。

下記の表を参考にID0x209とID0x218を受信する場合、
こんな設定になる。

f:id:hukkuramamemoti:20200517010556p:plain

マスクとフィルタ、IDを2進数で表現して各ビットを比較した時、

マスク:1 フィルタ:1 -> ID:1のみ受入れ、0は拒否
マスク:1 フィルタ:0 -> ID:0のみ受入れ、1は拒否
マスク:0 フィルタ:any -> ID:なんでもOK

となる。
f:id:hukkuramamemoti:20200517011156p:plain

f:id:hukkuramamemoti:20200517005306p:plain


ちなみに受信バッファRXB0の方がRXB1より処理の優先順位が高いようなので更新周期が早いメッセージはRXB0で
設定したほうがいいのかも。
f:id:hukkuramamemoti:20200517003824p:plain

【Android】各ビューを重ね合わせて表示 ~FrameLayoutの使い方

FrameLayoutを使うと各ビューが重ねて表示できるので便利。

下記は前の円形プログレスバーの中央にTextViewでプログレスバーの数値を表示したもの。

f:id:hukkuramamemoti:20200517002657p:plain f:id:hukkuramamemoti:20200517002853p:plain

【Android】This view is not constrained というエラー

恐らくAndroidStudioでEmptyActivityを選択するとConstraintLayoutが自動的に使われるのが原因かと思われる。

エラーは「This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you add constraints
ConstraintLayoutがどこを基準にしていいかわからないみたい。

layoutのxml内でlayout_constraintsを下記のように設定してあげるとエラーは消える。
f:id:hukkuramamemoti:20200517001946p:plain


下記を参考にさせて頂きました。
dooooankurokuro.blog.fc2.com

【Android】円形のインジケータ -> ProgressBarクラスの応用

最初はMPAndroidChartの円グラフを応用して作ろうと考えていたのだけど、
Androidプログレスバーを応用すると簡単に作れそうなことが判明。

円状プログレスバーのスタート地点を自由に選べたり、色をグラデーションにできたりと意外に自由度がある。

使い方

1. app/res/drawable内にカスタムプログレスバーの情報を格納したxmlファイルを作成
f:id:hukkuramamemoti:20200517000659p:plain

drawableファイルを作成する場合はdrawableフォルダで右クリック、下記のメニューから作成するとテンプレートが使えて便利。
f:id:hukkuramamemoti:20200517001400p:plain

2. Layoutでプログレスバーを作成
f:id:hukkuramamemoti:20200517001049p:plain

3. setProgress(int) でプログレスバーを更新

これだけで完了!


こちらを参考にさせてもらいました。
mrigaen.blogspot.com

【Android】ActivityのスクリーンONを維持(スリープさせない)

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); を実行すればOK。

ただしスリープさせたくない各々のActivity内でそれぞれ実行させる必要があることに注意。