「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



https://tonarinoyj.jp/episode/13933686331793273798

ワンパンマン、新しいの来てた。




年末に書いてたように、唯一もってた2現象のUSBオシロ
DSO2150が壊れちゃったので、

https://brown.ap.teacup.com/nekosan0/4426.html

同じHantekのもっと安いUSBオシロを注文してた。
例によって中華オシロ。

https://brown.ap.teacup.com/nekosan0/4429.html

届いた。Hantek 6022BE。

まだ箱開けてみただけで、PCと接続してないんだけど、
とりあえずブツは一式入っているっぽい感じ。あとで
動作確認する。


なお、これって型式自体はそんなに新しくなくて、付属
のCDに入ってるドライバがWindows7用だったりするので
要注意っていう話があちこちで聞かれている。

https://t3e.jp/hantek-6022be-windows10-64bit-use/

https://androiphone.uvs.jp/?p=2604

https://pavement1234.net/usb_oscilloscpe_hantek_6022be/

下手にWindows7用ドライバをインストールしちゃうと、
削除するのに結構大変らしかったりするみたいなので、
まずはドライバとかソフトとか一式(4ファイル)を
公式サイトからダウンロードしておいた。

http://www.hantek.com/en/productdetail_2_31.html

(Windowsのドライバーストアって仕組み、あれって
メリットあるのかな?デメリットの方が多い気がする
んだけどなぁ)

このオシロ、世代的にはDSO2150とかと一緒だと思うんだ
けど、DSO2150はメーカーがサポートしなくなっちゃってる
のに対し、6022BEはまだWindows10のドライバとかを
メーカーが公開しているので、その点が安心だった。
(DSO2150をWindows10で使うの、ちょっと苦労した)

スペック的には150MspsのDSO2150に比べてだいぶ落ちる
んだけど(48Mspsと1/3くらいのスペック)、これでも
ビデオ信号くらいなら普通に見れるはずなので、まぁ
当面はこれでいいかなと。
スペック的に不満になったら、その時また新しいのを
買えばいいかなと。




https://www.youtube.com/watch?v=64prHmlVt0E

ロードスター乗りの知人から、「S660販売終わっちゃう
前に買った方が?」ってすすめられたんだけど、どうやら
終わっちゃうって情報があるわけじゃないみたい。

ちなみに、先月売れた台数は226台らしい。
(正しい数値かどうかは検証できてないので注意)




https://www.youtube.com/watch?v=llqPdt3FC5U

もへじさんの動画。成田新幹線のお話の第1話。なかなかに
面白い。




https://www.youtube.com/watch?v=9-nQUjPu-CA

いつもの熊五郎お兄さんの動画見てたら出てきた
QCシール。

https://www.shigezone.com/?product=qclabel

売り切れてた…これ面白いなぁ。Shigezoneさんの
ところで作ったのかなぁ?それとも、Aliexとか探すと
出てくるのかなぁ?




https://twitter.com/memorydirect1/status/1349548371128684544

なんとなく、頭の中に「末端価格」という言葉が思い
浮かんだ。




https://www.youtube.com/watch?v=RFZVJB2PKJQ

電力需給が厳しい理由。お天気だけじゃなく、電気関係
についてもすごい詳しいな、ぐっさん。

https://www.youtube.com/watch?v=00v_8RqCKYs

電飾の木を自作するだけじゃない。電気関係お手の物
ってことなのかな。





こないだ見つけた、オセロを小一時間で作ってみちゃう
動画から繋がって、小一時間でライフゲームを作っちゃう
動画を眺める。あまり飛ばさずに結構じっくり見てた。

オセロもライフゲームも、昔BASICで組んだ記憶がある
ので、オイラのアタマの中の記憶と比較しながら見てた
んだけど、かなり効率的な処理方法になってるなぁ、と
感心しながら見てた。

https://www.youtube.com/watch?v=zywruyyURlY

GUI全盛になっちゃってから、あまりその手のプログラムを
書こうって気にあまりならなくて、一番大きい理由はやっぱ
その手の環境に合わせたコーディング環境を考えるのが
面倒だったり。
でもCLI環境だと、エスケープシーケンスとかもろもろ、
画面表示で面倒があるし、じゃぁguiをtkinterで、なんて
思ってもいざ組み始めようと思うとおっくうになって
しまったり。


で、この動画見てたら出てきた「_getch関数」なんていう
のがあるのか…。ちょっと敷居が下がったぞ、と思って、
ちょっと簡単なプログラム書いて動作を見てみようと。
VirtualBoxのCLI環境でやってみた。

…なんか、エラー出た。どうやら、こういう関数使えるのは
MS-DOS~Windows環境だけなんだな。そうか。


調べてたら、ほぼ同じような関数使える環境として、ncurses
の名前が出てきた。改めてncurses関係を調べなおす。

https://qiita.com/kaityo256/items/80863d466e0d69808eb9

ほほう。なんかイイカンジのチュートリアルになっている
なぁ。ブロック崩しなんだけど、マウスカーソルの座標で
操作するっていうやつ。面白そう。

Hello, Worldの手前からのチュートリアルになっている
ので、以前途中でめげたオイラでもやってみる気になった。
あらためてncursesをちょっと弄ってみる。

まず、このチュートリアルをやる前に、ncurses関係の
パッケージをインストールしておく。(Debian系の場合)

sudo apt-get install libncurses5-dev libncursesw5-dev

で、あとはここに書いてあるようにプログラムをテキスト
エディタで入力して、g++でコンパイル。ポイントは、
リンクのスイッチ(-lncurses)を付けてコンパイルすること
みたいだな。(こういうところがオイラは全然弱い)

g++ hello.cpp -lncurses

(ソースファイルがhello.cppの場合。なお、-oスイッチ
をつけて、実行ファイル名指定しておいた方がいいよね)

g++ hello.cpp -lncurses -o hello

実行。

./hello

でたでた。なんか、P8とかPC88とかで、BASICでlocate
命令使ってprintしていたころを思い出しす。よいよい。

まぁ、違うことがあるとしたら、ncursesにしてもtkinter
にしても、多分内部がダブルバッファになっていて、
「バッファ側をクリア」→「描画処理」→「refreshで反映」
みたいな流れで表示させるって辺りかな。

BASICなら、1命令実行するごとに結果が画面に反映される
わけだけど、最近のこの手の環境だと、とりあえず表示内容
を編集して、そのあとに一気に画面表示に反映っていう流れ
になってて、そういう処理方法って、なんかいまだに
なじめないんだよな。

(tkinterとか、HSPとか、最近いじったものは大体そんな。
ちなみに、オイラがArduino用に作った、OLEDモジュールや
LCDマトリックスモジュール用のグラフィックライブラリは、
当然ながらかつてのBASICみたいに、命令実行後に即時反映
されるタイプ)

あと、このチュートリアルをLinux(Ubuntu Mate20.04)で
実行してみた結果、いくつか引っかかった点があったので、
その内容と対策をメモに残しておく。


(1)リンク方法

ブロック崩しのプログラムの場合、スレッド処理を使って
いるんだけど、コンパイル時に上記のように「-lncurses」
だけしかつけてないとエラーになっちゃう。具体的には、
 「undefined reference to `pthread_create'」
っていうエラーが出る。

検索してみると、

https://qiita.com/kazatsuyu/items/5c8d9f539cd925fda007

このページの真ん中辺にあるように、「-pthread」って
いうスイッチつけてコンパイルする必要があるみたい。
たとえば、

g++ breakout.cpp -lncurses -pthread -o breakout

といった具合。
(スイッチ書くの面倒くさいので、多分makeファイルを
 書いちゃう方がいいと思うんだけど、面倒だったので、
 このコンパイルのコマンドをテキストファイルに保存
 しておいて、shコマンドで実行させるようにしてた)


(2)マウス移動のイベントが取れない

このページでは、環境変数の「TERM」に「xterm-1003」を
設定しておくと、マウスをクリックしたりしなくても、
移動して座標が変化するだけでイベントが発生して拾って
くれるって書かれているんだけど、頑張ってみてもなんか
上手くいかなかった。

(ネイティブ環境でOS動かしてるわけじゃなくて、
VirtualBox上で動かしているからかもしれない。ちなみに
クリックした瞬間はイベントが発生してくれるので、
このプログラムのままでも、クリックさえすれば、パドルが
マウスカーソルのx座標に移動してくれる)

仕方ないので、マウスカーソルの座標で移動させる代わりに、
キーボードからの入力で左右移動させるように、一部コード
を書き換えてみた。


(3)abs関数の絶対値

いざ動かしてみたところ、とりあえずパドルから玉を発射
して、上に向かっていったまではいいんだけど、天井に
ぶつかった時に、Y座標用の速度(vy)の絶対値が反転せず。
同様に、右端にぶつかってもX座標の絶対値が反転せず。
(vy、vxの値が0になっちゃってるみたい)

コードを眺めても、そんなことにならないんじゃないかなぁ?
なんでだろう?と頭を悩ましたんだけど、なんとなく気に
なって、絶対値を求めるabs関数って、整数型も浮動小数型
も、どっちも使えるんだっけ?と思って検索。
どうやら、floatとかdouble型だと、違う関数使うものみたい
なんだよな。うん、やっぱそうだよな。

ってことで、ちょっとロジックをいじりなおす。abs関数を
使わずに、単純にvxとかvyの値の符号を逆にするだけ。
反射するだけだからな。
(例えば、absを使わずに、「vx = -vx」とかに置き換える)

で、ようやく動いた。まぁ、ゲームを実際にやりたかった
わけじゃないから、動いた動いた、ってところまでで
終了。


なんにしても、ncurses使ってCLIアプリを作る入り口には
入れたみたいだな。よかった。


ちなみに、ncursesはC言語で使いたいっていうわけじゃ
なくて、どっちかっていうと、最近使ってるPythonとか
Rubyとかから使いたいんだけどな。その辺をもうちょっと
弄りなおしてみようかなぁと思っているところ。





https://twitter.com/qx5k_iskw/status/1349324001391243265

https://twitter.com/qx5k_iskw/status/1349323619151724544

知らなかったな。AVR128DB28。
28ピン DIPってだけでもうれしいんだけど、メモリマシマシ、
マルチ電圧I/O、CCLなどなど。いいねぇ。

これを使ったArduino後継機なんて、出てこないかなぁ?と
期待してしまうよな。



コメント ( 0 )