Help us understand the problem. What is going on with this article?

続・m5stackでストップウォッチを作る

More than 1 year has passed since last update.

続・m5stackでストップウォッチを作る

前回記事の続きになります。

m5stackでストップウォッチを作る
https://qiita.com/zasshyu6/items/c0bd9bb592192b3c80e7

前回の振り返り

  • 5usec周期でタイマをカウント
  • マルチスレッドで動かすと色々と不具合が発生
    • 4secぐらいでリセットがかかる(vTaskDelay()をかけると止まらない)
    • ボタンを押してもタイマが止まらない時がある

前回記事を読んでいただいて以下のご指摘を受けました

  • 'core1'で二つタスクが回ってるのでWDTで引っかかっているのでは?
    • esp_task_wdt_feed()関数を時間切れ前までに呼ぶといい

試すこと

  • マルチスレッドで止まらないように作る
  • ボタンで止まるようにプログラムを変更
  • ついでに画面ちらつきが気になるので直してみる

全部修正したmain.cppをgithubに上げました。
https://github.com/zasshyu66/m5stack_Study/tree/master/StopWatch3

マルチスレッドで止まらないように作る

esp_task_wdt_feed()関数を調べてみたらどうやらESP-IDFの関数だった模様
arduinoからは呼び出せない上に、WDTにアクセスする方法が見当たらなかったので別の方法を考えてみます

  1. Core0Thread1,Core1loopを動かす
    • 4secくらいでやはり止まる。
  2. vTaskDelay(1)Thread1に入れる
    • 前回と同様にしっかり動く。loopは別処理で監視周期呼び出しがあるのでこれで二つのtaskが監視周期をもつことになる
    • ちなみにvTaskDelay(0)だとビルドは通るが4secくらいでリセットがかかります

loopの監視周期を外そうとか、CONFIG_FREERTOS_HZを変更するとか、監視やクロック関連をいじるのも視野に入れましたが、ファイル管理の面で手間がかかるため却下しました。
ESP-IDFを使う理由ができたかもしれない・・・

ボタンで止まるようにプログラムを変更

これはチャタリング防止の部分のバグでした
マルチスレッド関係なかった
チャタリング防止を修正で完了

画面ちらつきが気になるので直してみる

画面のちらつきが気になる・・・ので直したい
以下の記事が出てきました。

M5Stackでいろいろやってみた。
https://togetter.com/li/1214295?page=3

TFT_eSPI librarySpriteを使えばいいらしいが・・・どうやって使えばいいんだ・・・
色々調べてみたらplatformioがサンプルを出してくれていた

TFT_eSPI by Bodmer
https://platformio.org/lib/show/1559/TFT_eSPI/examples?file=Print_Smooth_Font.ino

TFT_eSPI libraryが基本的に公式のLCD APIとほぼ同じ使い方ができる
Spriteとは・・・
大きいのは文字の設定が文字の色と背景色を選択できること
LCD APIの場合はほんとに上書きだけなので文字が重なるのだが、TFT_eSPI libraryだと背景色と文字の描写なのでそのまま上書きできる
だから文字位置を覚えておけばそこから改行して書き直せばよいだけになるので考え方がだいぶ楽になります

次にやること

次にパルスカウンターを作ります。
エンコーダを買いたかったけど千石電商に売ってたのは一回転で24plsのものだけだった・・・
でも買えたのでそれを使ってパルスカウントと回転速度を表示するプログラムを作ります

・・・余談ですが今回の調べものや記事を書いている途中でマウスのホイールが壊れました
まさかホイールの回転を見るスイッチにつながってる軸が折れるとは思わなかった

zasshyu6
Golangで遊び始めました。 普段はC#.NETでアプリケーション組んだりRXマイコンを弄ったり。 良い職探してます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした