電子工作

2020年10月15日 (木)

UIFlowだけで、M5Stackのカウントダウンボードを作ってみた

Dsc_0119


補足:

①SDカードが読めないと思ったら、接触不良のようでした。

確認手順

  1. FAT32でフォーマットした16GB以下のスマートカードを用意し、SDスロットに挿す。
    ※2GのFATはダメでした。
  2. UIFlowを起動する。
  3. 新規プロジェクトを作成する。
  4. 高度なブロック⇒SDCard⇒WriteFileのサンプルをクリックする。
  5. Setupにつなげてブロックを完成させる。
  6. 右上の三角(RUN)ボタンを押す。(特にDownloadする必要は無い)
  7. エラーが無ければ成功(SDカードに”test.txt”が出来る。)
    ※エラーなら何度か挿し直すか、SDカードの接点の汚れを落とす

②UIFlowでバッテリー運用すると30秒程度で電源が落ちる。

ファームウェアが古いと起きるという記事もあったが、プログラムによっても起きたり起きなかったり、することが分かった。

電源が切れないプログラムは、高速で画面を表示している場合でした。

日本語のドキュメントに記載は見つかりませんでしたが、パワーセーブの様な動作でした。

 私の処理場合、ループ処理は使わずタイマーだけで処理していました。

無駄な処理ですが、空のループ処理を追加してあっさり解決。


Setupに追加した行

while True:
pass

 

 

 

 

 

(完成した?カウントダウンボード)

以前からやってみたかった、カウントダウンボードをUIFlowの練習を兼ねて作ってみました。

折角なのでオリンピック用にしてみた。(もちろん非公式)

無事に開催されるか?

Img_20201014232901

(開発の様子)

かなり手抜の仕様です。単に手を抜いたわけではなく、UIFLowでカバーできない部分を妥協した結果です。

  • 時間はNTPやGPSから取得するのではなく、M5Stackのタイマーを回しています。
    かなりズレると聞いているので秒までは表示しません。まあ、1日1回合わせれば何とかなるでしょう。
  • 目標の設定は残り日数のみカウントしています。
  • 日本語テキストが表示が出来ないので画像に直接書いています。
  • 文字のセンタリングをしていません。

仕様

  • 23時59分59秒を過ぎるとカウントが1つ減ります。
  • Aボタンを押すとSETUPモードに入り残に数と現在時間を設定・変更できます。
  • データの保管を行っていません。電源を切ると初期化されます。
  • 現在時刻(HH:MM)を表示します。現在時刻は1秒ごとにブリンクします。

Img2

UI部品

  • Title0(SETUP時)
  • Image0(背景)
  • Label0(カウントダウン)
  • Label1(Aボタン)
  • Label2(Bボタン/時計兼用)
  • Label3(Cボタン)
  • rectangle0(カウントダウンの枠)
  • rectangle1(時計の枠)

 

苦労した点

①背景画像を5枚読み込んだが1枚しか選択できない。

⇒UIFlow v1.45のバグぽくて、v1.65Betaにしたらあっさり読めた

②文字列操作が貧弱

例えば時刻の変数HHと分の変数から「HH:MM」形式にしようとすると

書式付きフォーマットがないので、1文字ずつ足していくことになった。

def str_time():
global mode, SS, TIM, LASTDATE, icount, MM, HH, cdown
TIM = ((str('0') + str(MM)))[-1]
TIM = (str(((str('0') + str(MM)))[-2]) + str(TIM))
TIM = (str(':') + str(TIM))
TIM = (str(((str('0') + str(HH)))[-1]) + str(TIM))
TIM = (str(((str('0') + str(HH)))[-2]) + str(TIM))

③UI部品は、一度画面に貼り付けないと呼び出しが出来ない。

⇒仕様なので仕方がない。

今後

電源が切れると初期化されてしまうのは痛い。SDカードに直前の情報を残しておいてそこから再スタートできるようにしたい。

 

 

2019年11月 2日 (土)

Atmel Studio 7.0のtoolにバッチファイルを組み込む

Dsc_0655

「AFSS01 – AVR最初の一歩セット」顛末記でも記載したが、Atmel Studio 7.0を使ってATtiny13A-PUの書き込みが上手くできないことがある。

https://ji1pvv.cocolog-nifty.com/blog/2019/09/post-982905.html

avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.06s

avrdude.exe: verifying ...
avrdude.exe: verification error, first mismatch at byte 0x0000
0x00 != 0x09
avrdude.exe: verification error; content mismatch

コマンドラインから実行すれば正常に書き込める事は判っているので、環境問題であることは間違いない。

ATtiny85でも頻度は少ないが時々起きる。USBの抜き差しで回復するが毎回では面倒・・・。

そこで、バッチファイルを作ってコマンドラインからの入力を楽しようというのが今回のもくろみ。

手順

①BATファイルを作る。pauseを入れた理由は後述

c:\tools\avrdude.exe -v -v -c usbasp -P usb %1 %2 %3 %4

pause

パラメータは、以下のように設定する。こうする事でAVRの種類が変わっても対応できる様になる。 

%1 -p

,%2 t13

,%3 -U

,%4 flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i

②Atmel Studio 7.0にBATファイルを組み込む
tool -> Extemal Tool -> Add を選択する。(avrdudeを組み込んだ時と同じ手順)

Command はBATファイルをフルパスで記載

Arguments は、-p t13 -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i を記載する。

Atmel

③最初Use Output windowにチェックを入れて確認したが、症状は改善せずまたエラーになってしまった。(コマンドが早すぎる?)

そこで、図のようにUse Output windowのチェックを外し、Close on exitに入れると正常に動作した。

ただし、終了するとコマンドラインが消えてしまうので、BATファイルの最後にpauseを入れて確認が終わるまで画面を残すことにした。

avrdude.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.14s

avrdude.exe: verifying ...
avrdude.exe: 182 bytes of flash verified

avrdude.exe: safemode: hfuse reads as FF
avrdude.exe: safemode: Fuses OK (E:FF, H:FF, L:6A)

avrdude.exe done. Thank you.


C:\Program Files (x86)\Atmel\Studio\7.0>pause
続行するには何かキーを押してください . . .

しばらく使ってみたが、今のところ問題は出ていない。

本来の解決ではないが、個人レベルでは原因究明より使える事が優先なのでこの問題は終結とする。

同様の問題でお悩みの方がいたら試してみてはいかがでしょうか・・・。

 

 

無料ブログはココログ
フォト
2025年2月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28