Superb Garbages 2

千野純一(chinorin)のはてなダイアリーの続きです。

4接点スライドスイッチのとんち

・いや、ほんのちょっとしたことなんだけど、こういうちょっとした工夫の積み重ねなんだよなあ、という。

・スライドスイッチというジャンルのパーツがあります。そうだなあ、最近はそこまでよく見かけるってほどでもない気はするんだけど、比較的小型の機器に使われがちで⋯⋯例えばマイク(SM-58とか)の持ち手についてるON/OFFするやつはスライドスイッチだな。あれは平らででっかいけど、もっと小さくてギザギザしてるやつの例はないだろうか⋯。まーとにかくハンドヘルドな機器の横っちょについてるようなやつよ。

・これがけっこう色んな種類があって、ON-ONの単極双投/1極2投/SPDT/1P2T(ぜんぶ意味は同じ。Single Pole, Double Throw)のやつをよく見かける気がするけど、他にも双極双投のものや、双極n投⋯⋯nは12まで売ってるのを見たことがある。極数はたいてい2だ。

・一応説明しておくと、n極m投/nPmTのスライドスイッチというのは、人間が操作するスライド部分がたったひとつあって、それによって操作されるそれぞれ絶縁された回路がn個あり、1回路について入力が1つずつ、選べる出力接点がm個ずつある。回路図上では、↓こんな感じに書けば等価だと理解できる。

左から入力して、右の出力を選ぶ。ダイオード的構造があるわけじゃないので入出力の方向は逆でもいいけど。

・で、電子部品ってのはできるだけ小さく、できるだけ単純な構造にしたいという要求があるものなのね。小さければどんな場所にも実装できてたとえスペースに余裕があったとしても同じパーツを流用できる上に周辺の放熱的にも有利だったり、構造が単純であればたいてい製造コストが安く済んで壊れにくかったりする。操作性とのトレードオフとかもあるけど、スライドスイッチの場合は特に省スペースが重要なんだと思う。それこそがスライドスイッチを使う利点なので。

・そこで、小さく単純な構造で物理的にスイッチングするためにどのような方法を用いればよいか。人間の操作としては、水平に動かして、クリック感のある停止点がいくつか存在するもの。例えば左側にべたっと長い入力電極があって、右側に選択する出力接点がいくつか並んでて、右と左を接続する導体を前後に動かしてどれと接続するか選ぶ⋯⋯って感じでもいいと思うけど、それだと構造が2次元的(動く部分は前後なのに部品は左右に設置する)なので極数が増えるとかなり複雑になってしまうのと、それから構成される部品の種類(べたっと長い電極ってやつが不要)の観点もあるのか、とにかく以下のような構造になっているものが多くみられる。

・今回説明したい構造は、4投が最も複雑で面白いので4投で説明する。冒頭にも置いたこれ。

・丸いのをそれぞれ端子としよう。4投は1入力4出力のはずだが端子は6個あり、スライド面に沿ってまっすぐ並んでいる。上に飛び出てるのが人間が操作する部分で、2つの矢印(とそれを繋ぐ線)が一緒に左右にスライドする。この2つの矢印は導通していて、間いっこあけて2つの接点が繋がる仕組みだ。この状態から3こ分右に動くことができ、全部で4ポジションあることを確認してもらいたい。4投のスライドスイッチの仕組みはこれが全てだ。この6つの端子のどれが入力でどれが出力か理解できるだろうか。

・こたえ。真ん中の2つが入力で、外側の4つが出力。2つの入力は内部では短絡してなかったりするので、その場合はスイッチを機器に組み込みたい側の人が短絡させて使う。

・短絡させない特殊な用途もあるかもしれないけどちょっと思いつかないな。ちなみに3投の場合は外側の端子のどちらかがいっこ少ない。2投の場合は合計3端子で、間を1こ飛ばさないで隣り合った端子を2つ導通させる。

・とか言いつつ、5投以上になると2個飛ばす(8端子)のがあまりにも無駄が多いからか、さっき言ったべたっと長い入力電極方式にすることが多いようだ。これにすると、スイッチを動かすたびにこすれる導通部分が多いので、おそらく摩耗による故障が起こる可能性が比較的高いだろうと思う。⋯が、まあやり方次第か。


・っていう。w こういうのをいちいち面白く説明できたら面白いかもね。たぶん今日の文章はいつにも増して本当に誰も読まないだろう。

トランジスタでマイコンみたいな部品への電源供給そのものを制御する方法?

・んんん? なんだ、オープンコレクタって出力トランジスタのベースは反転なんですね。つまり、HIGHを出力する動作のときはプルアップされた出力先がHIGHになるように動作する(つまり出力がハイインピーダンスになる)ということで、出力トランジスタのベースがHIGHになるというわけではないんだ。なんか変だと思った。⋯なので、前回の最後に載っけた回路図の左上のトランジスタのところはT字に直結して、下側(コンパレータの出力側)に抵抗をつける。10kΩくらいでよかろう。

・それを知ってやっと今、以前からやりたかった「前段のトランジスタマイコンの電源(供給)をON/OFFする」ための自然な方法がわかったわ⋯。例えばNPNトランジスタのベースに電流を入れることでマイコンに電源供給をしたい場合、コレクタにマイコンのGNDを接続するか、エミッタにマイコンのVccを接続するかどっちかだと思ってたんだけど、そんな回路図見たことないし、何にしてもトランジスタの電圧降下の影響を受けたり、後段の場合はベース電流が合流して電流が過剰になったりするのではないか。

・というわけで、なるほどね。トランジスタを使ったNOT回路のノリでやればいいんだ。こんな感じ。

・⋯いや、本当に? マイコンのGPIOに入れるならまさにこれでいいんだわ。マイコンのGPIOは入力インピーダンスが相当高い(数MΩ~数百MΩとのこと)ので、トランジスタのエミッタコレクタ間を導通させる(ベースを例えば0Vにする)と、これしきの抵抗などマイコンの入力インピーダンスの比にならず、マイコン側に流れる電流はほとんどゼロとなり電圧は生まれない(とされる)。ちなみにこの抵抗は全然プルアップじゃなくてむしろプルダウンっぽいんだけど画像直すのめんどくせえ。まあ抵抗は抵抗なんだからいいだろ。w

・で、問題なんですけど、マイコンのVccの入力抵抗はどれくらい高いのか? 例えばトランジスタ側に置いた抵抗の数倍程度ならエミッタコレクタ間が導通でも普通に並列回路としてマイコン側にも電源が供給されてしまうと思う。

・自分で調べてもよくわかんなかった。GPT先生に聞いてみたら「高いよ! 数MΩ~数十MΩくらい!」とのことで、ノイズの影響を軽減するためとか理屈がついててちょっと納得しかけたけど3.5なので嘘ついてるかもしれんと思って改めてGPT-4に聞いてみたらなんかプルダウン抵抗と勘違いしてるような感じ。Perplexity先生も同じくプルダウン抵抗だと思ってるみたい。うーん⋯。

・いやこんなんやってみりゃいいんだけど。まあそのうち⋯。

明るいときアラームを鳴らすマシーン

・まあくだらないものを1時間くらいで作った。

・目的はトイレの照明の消し忘れ対策。照明のスイッチが換気扇と連動しているので、ついたままだと音と空気の流れでわかるのだが消すためだけにまた立ち上がるのはめんどい。だから消し忘れないようにしたい。

PIRセンサ*1とか使って人がいなかったら自動的に消す、とかがまー普通の気の利いたシステムなんだけど、照明だけ消しても換気扇は止まらないから(主に消したいのは換気扇なので)意味ないし、電工二種も持ってないクソザコのド素人ゆえスイッチ自体に細工をするのは違法であるため、換気扇も一緒に止めるならソレノイド*2とかで壁のスイッチを押さねばならぬ。そんな押す力と精度がめちゃめちゃ要るようなものは作れようもなく、そしてそういうのは買うとアホみたいに高い。代表的なやつが↓これ。

・以上の理由で、まー音鳴らして消し忘れを防止するくらいがコストが安くていいんじゃねーのってことで。

・制御はとりあえずマイコンで、M5Stamp-C3。堂々のRISC-Vである。160MHzとかで動作してるのも馬鹿馬鹿しくて、こんなんもっと粗末なマイコンで事足りるんだけど、なんか自作のUDPIライター*3がたぶんUSBシリアルのドライバの問題だと思うけどうまく動かなくてATtiny202には書き込めないし、ATtiny13Aもあんなに買ったのになぜか一個も見当たらないのでとりあえず目の前にたまたまあったのを使った。

・これ回路図。ぐねぐねしてるのは四角い画像に効率よく納めるためである。

・見りゃわかるけど上部中央のは「明るければON、暗ければOFF」という動作目視用のLEDの部分。(6)はマイコンのGPIOに繋ぐ。

・左のは明るさを検知する部分。(4)はマイコンのGPIOに繋ぐ。可変抵抗に光が差してる記号は、明るさによって抵抗値が変わるフォトレジスタで、ここには1MΩのCdSセル*4を配置した。これはつまりマイコンのADCで抵抗分圧したCdSセルにかかる電圧を測っていて、周囲が暗いほど抵抗値が上がる=分圧された電圧値が上がる=ADCにて高い数値が得られる。抵抗の定数が無駄にでかいのは消費電力を抑えるため。

・右下のはアラーム鳴らす部分。(5)はマイコンのGPIOに繋ぐ。アラームの音量をでかくしたければ抵抗の値を小さくすればよい。3.3Vの場合、深夜に鳴っても近所迷惑にならない上限が100Ωくらいかなと思う。XC110はTO-92パッケージ*5のICで、車の防犯アラーム的な音声信号を出すやつ。

・ブレッドボード実装で廊下に設置し、給電はUSBアダプタから。トイレの扉の下の隙間からケーブルを入れて、CDsセルだけをトイレ室内の壁の低い位置に養生テープで仮固定した。

・↓ソース⋯じゃなかったスケッチ。ArduinoIDEは2.0.4、M5Stackライブラリは2.0.6。著作権は主張しません。

// CdS-Buzzer for M5Stamp-C3
// written by Chinorin. No Rights Reserved.

// 3v3 - Res(1MΩ) - Pin4 - CdScell(1MΩ) - GND
// Pin5(Bright→HIGH / Dark→LOW): Buzzer
// Pin6(Bright→HIGH / Dark→LOW): LED

#define ADC_PIN 4
#define BUZZER_PIN 5
#define LED_PIN 6

#define THRESHOLD 200 // 明るい判定の閾値。analogReadの値がこれより小さければ明るい
#define WAIT_SEC 5 // アラーム条件となる明るい判定の継続時間
#define BUZ_SEC 1 // アラームを鳴らす時間
#define SIL_SEC 3 // 次にアラームを鳴らすまでの時間。
// BUZ_SEC秒鳴らしてSIL_SEC秒休む を繰り返す。

void setup() {
  Serial.begin(115200);
  pinMode(BUZZER_PIN,OUTPUT);
  pinMode(LED_PIN,OUTPUT);
}

void loop() {
  static int count;
  delay(1000);
  int adc=analogRead(ADC_PIN);
  Serial.println(adc);
  if (adc<THRESHOLD) {
    count++;
    digitalWrite(LED_PIN,HIGH);
  } else {
    count=0;
    digitalWrite(BUZZER_PIN,LOW);
    digitalWrite(LED_PIN,LOW);
  }
 
  switch(count){
  case WAIT_SEC:
    digitalWrite(BUZZER_PIN,HIGH);
    break;
  case WAIT_SEC+BUZ_SEC:
    digitalWrite(BUZZER_PIN,LOW);
    break;
  case WAIT_SEC+BUZ_SEC+SIL_SEC:
    count=WAIT_SEC-1;
    break;
  } 
}

・loop()ではCdSセルが繋がってるピンを1秒毎にひたすらanalogReadして、判定が「明るい」だったらcountを+1、「暗い」だったらcountを0にする。countがWAIT_SEC以上⋯つまり明るい状態が5秒続いたら、それ以降暗くなるまで「ブザーをBUZ_SEC(1)秒鳴らしてSIL_SEC(3)秒休む」を繰り返す。

・M5Stamp-C3のADCの分解能は12ビットで、analogRead(ADC_PIN)は0~4095の値をとる。この値は明るければ小さく、暗ければ大きい。うちのトイレの自作照明だと閾値(THRESHOLD)を200にすると絶妙に人間の影がかかっていれば明るい判定にならないくらいの感じ。CdSセルの電源側に繋いである抵抗を小さい値にすると12ビットをもっと広く使って精度が出せる。

・明るさ検知するたびにシリアルに数値を出力する。不要なときにこれをコメントアウトするかどうかは流派による。w

・以上、まーマイコン使うとこうやってあんまり頭使わずサクッとできるんだけど、マイコンなしでもコンパレータ*6と555*7があればだいたい同じ物が作れると思う。そのようにしてM5Stamp-C3は回収する方針でいくかあ。

・なんとなく回路図だけ書いてみた。コンパレータの出力はオープンコレクタ*8で、その先のPNPはデジトラ*9にする。部品点数を減らすために前掲スケッチにおけるWAIT_SECの機能は省略したが、XC110の手前で信号を反転すれば代わりになるかもしれない。各定数も仮に適当な数値にしたのでそのへんは試行錯誤が必要であろう。ちゃんと動くのかどうかはもちろん知らん。

*1:PIRセンサ: パッシブ赤外線センサ。人体を感知するためのやつ。

*2:ソレノイド: 3次元的に巻かれたコイル(つまり今時見かけるふつうのコイル)のこと。転じて、発生する磁界によって棒などを出し入れする(直線運動させる)ような装置。

*3:UPDI: 最近のAVRマイコンに書き込むための仕組み。UPDIライターは、、USBシリアルがあれば簡単に作れる⋯⋯はずなのだが。

*4:CdS: 硫化カドミウムのこと。言うまでもなく毒物。日本では合法だけどヨーロッパとかでは違法。

*5:TO-92: よく見かけるふつーのトランジスタがこれ。

*6:コンパレータ: 現代において単にコンパレータと言った場合、それはたいてい電圧コンパレータ(デジタルコンパレータ)を指すと思う。電圧を比べるための集積回路オペアンプの親戚。

*7:555: そういう名前のタイマーIC。元祖はNE555だそうだが色んなメーカが色んな仕様で出してるので単に555と言った方が通りがよい。

*8:オープンコレクタ: 出力がバイポーラトランジスタ(普通のトランジスタ)のコレクタになっている仕組みのこと。PNPのオープンコレクタってのもあるらしいんだけどよく知らない。とりあえずこのコンパレータの出力はNPNのオープンコレクタで、Highの場合IC内部のトランジスタが導通し、IC内部でGNDに繋がる。Lowだとハイインピーダンス(非導通)となる。ちなみに出力がFETのものはオープンドレインと呼ぶ。

*9:デジトラ: デジタルトランジスタ。パッケージの中にベース抵抗とベース-エミッタ抵抗を内臓しているトランジスタのこと。つまりこの回路図はその2つの抵抗を省略している。

TフリップフロップをNANDで作る その2

・NANDでNOTを作るのは超簡単で、

こんだけ。2入力のANDをとって反転だから、自明だね。

・そのNANDを使ったNOTを使ったトグル回路がこうです。

コンデンサの働きによってチャタリングも対策されています。以上おわり。


・おわりなんだけどなあ。NANDとは関係ないが、ディスクリートトランジスタとかで構成して、ついでに入力は人間が押すスイッチじゃなくて電気信号でやるとしたら等価回路はこんな感じ?

2023年6月12日追記:これは動かないね。ダイオードは不要どころか、冒頭のインバータ(NOTゲート)版においてその2箇所はコンデンサ電荷を放出するための経路なので両通が必要。そんで、このトランジスタNOT版はそこを逆流しようとしても合流地点が5Vだから逆流することはない。つまりこの回路図はどっちにしてもコンデンサの放電ができない。ベースエミッタ間抵抗とかでなんとかならんのかなあと思うけど面倒なので試してない。まあ、そのうち⋯。

・なんかコレクタのそこに次段のを直接つけるとコンデンサと環流の関係で逆流したりしねーのかなあと思ってダイオードつけてみたけど、まーなくても大丈夫そうな感じがするな。むしろないべきかも。

・左の入力TのところにあるカクカクしたのはPチャネルのJFETです。ここはソースとシンク(エミッタとコレクタ)の区別のない両通の素子が必要なのでそうしたけどB接点(ノーマリークローズ)なので負論理になります。つまりTはふだんHighにしといて、立ち下がりごとにトグルするということになる。

・これを正論理にしたいならゲートの前にもういっこNOTをつける。

・全部トランジスタにしたいならJFETの部分をまるごと逆並列トランジスタに取り替える。これも正論理になる。

・⋯でいけると思うんだけどめんどくさいので試してない。

・注意点としては、これらは(NANDで作ったやつも含めて)全てコンデンサの放充電が関係するので、一瞬⋯⋯例えば数ナノ秒間くらいのトリガーではトグルしないかもしれないし、トグルした数ナノ秒後にトリガーしても次のトグルが起こらないかもしれない。それぞれ数ミリ秒くらいは待った方が確実かと存じます。特に後者が心配。

TフリップフロップをNANDで作る その1?

・T型フリップフロップ(略称T-FF)ってのは、入力がひとつ(T)と出力が2つ(Qとそれを反転した/Q)あって、Tの立ち上がりごとに出力が反転するというフリップフロップ回路(1ビットメモリ)。TはToggleのTね。

・↑回路図記号はこんなの。(これは左下のクロックの立ち上がりでTを見て、HIGHだったらQが反転、LOWだったら何もしないというもの)

・これがさあ。Wikipediaのフリップフロップの項目をはじめ、どこを見てもたいていRS-FF、JK-FF、D-FFは回路図が載ってるのにT-FFだけは「JK型フリップフロップのJとKをHighに固定し、クロックを入力とすれば実現できる」としか書いてなくて、どーも納得いかないわけよ。他のみたいにNANDの組み合わせで作れないの?? とずっと思ってた。

・しかしそれを自力で考え出すなんてこともできず、しかし先日ついにですわ。ぼーっとネットサーフィンしてたらその回路図を見かけましてな。

NANDゲートを使ったT型フリップフロップの回路図?

・こんな感じらしい。はて⋯⋯コンデンサは入力をパルスにするコンデンサの充電中はマイナス側に電流が漏れ*1、満充電状態になると漏れが止まるので、コンデンサを直列に⋯回路図の上では電気の流れを切断するような形で繋げば「一瞬HIGHになってすぐLOWになる」という仕組みを作れる)ために使ってるのはわかるんだけど、この抵抗は何だ。これがあることで逆流しないとかそんなやつ? だとしたらNANDのICの入力抵抗より大きい値にするようなことが必要なのか? よくわかんねーな。


・そんな感じで、いちいち「こことここがHIGHってことはここがLOWで、ええとー⋯」ってやるのがめんどくさいのでまず組んでみた。けどうまく動かにゃい。定数が悪いのかなあ。仕方ないから考えるか、こことここがHIGHってことはここがLOWで、ええとー⋯

・いや、変遷がわからん。ぱっと見発振するように思えるんだけど、試した限りはそんなことなかった。何なの。

・そんでまあ、諦めて再びT-FFに思いを馳せながらぼーっといろんな回路図を見てたら、ちょっとまて、クロックつきのJK-FFはこんな感じなんだってさ。

JK型フリップフロップの回路図?

・これの、JとKをHIGHに固定すればCLKの入力でトグルするということは、左にある2つのNANDは3入力だけど、JとKを取り除いて2入力にすればいいってことだよね? 確かにJKフリップフロップは(J,K)が(1,0)ならQがHIGH、(0,1)ならQがLOW、(0,0)なら何もせず、(1,1)ならQが反転(/Qは常にNOT Q)という動作だから、ほんとにその通りの動きをするはずだが⋯?

・いや、っていうかこれ、初めてこのあたりの文章とかを読んだときに真っ先に試してみたはずだよなあ。それにWikipediaに載ってるJK-FFの回路図はそのまんま組んでも正しくうごかねーぞみたいな文言もどこかで見たような⋯。あ、これWikipediaに載ってるやつと等価なんですけどね。

「こことここがHIGHってことはここがLOWで、ええとー⋯」をやってみても結局ぐるぐる回ってよーわからん。組んでみようじゃないの。


・動かにゃい。

・最後の手段として、ChatGPT先生に聞いてみることにした。

・あーーなるほどね。フリップフロップって必ず出力と反転出力があるから、それをいい感じに帰還させればそれだけでトグルが作れるんだ。何かスイッチの仕組みを噛ませばRSラッチでもいけるんじゃ?

・つまりこういう⋯⋯右の2個のNANDが負論理RSラッチで、どうせNANDゲート使うときは74HC132の4個セットなのでちょうど余るNAND2個を「TのHighをトリガーとして、Qを出力するNANDに/Qを、/Qを出力するNANDにQを入力する(ラッチが負論理なのでこれらは反転する)」というスイッチに見立てて作ってみたが、これさっきのJK-FFの回路図と等価じゃねーか。帰還する経路が外側から内側になってるだけで、ちょうど左の2つのNANDからJとKを取り除いてそれぞれ2入力のものに取り替えた形。接続せずに交差する点が少ないからこっちの方が見やすいと思うんだけどな。


・というわけで、簡単に組めるT-FFが欲しいと前から思ってるんだけど、ずっとこんな調子でさ。コンピュータはNANDで動いてるんだし、やっぱNANDで組みたいじゃんっていうお気持ちである。

・ちなみにNOT2個とコンデンサでT-FF的なものを実現する方法もあることは知っているんだが、よく考えたらNOTってNAND1個で表現できるんだよな⋯。たぶんつづく。

*1:コンデンサは無充電状態のときは電荷の偏りがなく安定。電圧をかけるとコンデンサのプラス極から電子が出て行き電源を通ってマイナス極に入る。それによって電荷が偏るというのが充電という現象で、電子がマイナス極に入る流れ(=マイナス極から発生する電流)をここでは「漏れ」と表現している。無充電状態のときにプラス極にあった自由電子が全てマイナス極に移動すると満充電となり、それ以上電圧をかけても電子は移動しない(=漏れが止まる)。電圧をかけるのをやめると電荷の偏りを解消する方向(=かけた電圧と逆の方向)に電子が移動を始める。これが放電。

抵抗分圧ボタンの製作

・限られたピンで複数のボタンの状態を検知するやつが必要になったので、抵抗分圧ボタン(って呼ぶのかどうか知らないけど、マイコンのA/Dコンバータと抵抗の分圧を使ってアナログピン1本だけで複数のボタンについて状態を検知する仕組み)をサクっと作った。工作始めてわりと初期に知った「とんちを感じる回路」で、ブレッドボードで実験はしたけど実際に制作って感じのことはしていない気がする。

・今回は5ボタン。いろいろと余裕があるので超適当に、電圧がだいたい1Vくらいの間隔になるようにして、ユニバーサル基板に実装するので部品や配線がおおむね配置通りとなる回路図を書いた。

・ANALOG INPUTで検知する電圧は、どのボタンも押してない状態だと0V。ボタンを押すと、そこに書かれてるくらいの電圧を検知するはず。計算式は、プルダウン抵抗÷(プルダウン抵抗+ボタンと直列の抵抗)×Vcc電圧 となっている*1。例えば一番右のボタンなら 10÷57×5=0.87 *2。理論値なので、検知の際は適度に幅をもって処理する。

・今回は同時押しは考慮しない。現状でも計算すればある程度はできると思うけど、必要なときは 0:1:2:4:8 みたいな2進数チックな比になる定数を採用するとあらゆる同時押しの組み合わせが重複せず検知しやすくなったりする。これ豆。

・で、Arduino Leonardo(というかPro Micro)で受け取るのでADCは10bit。0~1023の1024段階なので、各ボタンを押したときにanalogReadすることで得られる値(の理論値)は 検知電圧÷Vcc電圧×1023 で求められる。つまり左からそれぞれ 1023, 836, 607, 409, 178 となり、何も押してない状態はゼロ、と。ま、適当に前後50くらいの幅をざっくりとっとけば大丈夫っしょ。

・ふっふっふ。ここでこうして、こうじゃ!

・今をときめく人工知能つまり俺 いやその懐かしいハンドルネームはどうでもいいのよ。ChatGPT先生にお越しいただきました。

・お書き賜れたスケッチも正しいように見える。っていうか既存のスケッチに機能を追加するのでこれの大部分はいらないことにここで気づいたが、でもまあ、読んでArduino言語での書き方を思い出す助けになったってことで⋯。

#define FBPIN 21

// 中略
// 以下setup()の中に書く

  pinMode(FBPIN, INPUT);

// 中略
// 以下main()⋯とは限らないな。ぐるぐる回ってボタンとか検知してる場所に書く

  int fb=analogRead(FBPIN);  // Five Buttons
  switch (!0){

    case (fb>=910):
    // (一番左のボタンを1として)1の処理
    delay(500); // 1回処理したら時間をあけないと押したまま判定で何度も実行しちゃう
    break;

    case (fb<=710 && fb>=900):
    // 2の処理
    delay(500);
    break;

    case (fb<=700 && fb>=510):
    // 3の処理
    delay(500);
    break;

    case (fb<=500 && fb>=300):
    // 4の処理
    delay(500);
    break;

    case (fb<=290 && fb>=100):
    // 5の処理
    break;
  }
  

・えっ、C言語⋯じゃなかったArduino言語で switch(1) みたいなのやっちゃだめなんですの? Cは偽が0でそれ以外はぜんぶ真ってことだから偽を反転してるんだが(まー調べたらCの言語仕様として比較演算子の戻り値は真は1で偽は0ということだが、Arduino言語はどうなのか。まあ同じだろうけどw)、検索してもこう書いてる人全然見かけない⋯⋯いやいや、論理的には合ってるからわかりゃーしねえよ。それとも switch(1==1) みたいに書けばいいのか⋯?

・あっ、あーあー、Arduino言語はCと違ってtrueとfalseがあるんでした。ごめんなさい。switch(true) っと。(そもそもそういう問題でもないような?)


コンパイルエラーにつきifとelse ifに書き直した。else ifってぱっと見分岐がそれぞれ等価である感じがしないからきらーい。

*1:つまりANALOG INPUTで測っているのはプルダウン抵抗(10kΩの抵抗)にかかる電圧。

*2:抵抗の値はkを取り除いているが、結局抵抗の値の比をみるだけなので答えは同じ。

ヲチ

・我々は今、日本における歴史的な大事件を目撃しているんだろうねえ。

・生きてるうちにこういうものが見れて良かったなーと感じる。主な舞台がTwitterYoutubeっていうのも臨場感があって本当に間近で見てる感じがする。中心にいるのは在野の天才で、もちろん我々はその知能において彼の足下にも及ばないけど立場はあくまでも市井の一般人であり、金はあるけど特別な権限など何もなく万人に与えられた権利のみで戦っているというのも同一化⋯っていうと少々失礼かな。とにかく応援したい気持ちにさせられるのだ。

・関連文書を色々読んだ感想としてこの人はもう何もかもすごいとしか言いようがなくて、何よりエンターテイメント精神に溢れてるのが有り難く尊い。もっともそれをする必要があるからそうしている節はあるのだろうが、こいう劇場型の展開は民衆を熱狂させるし、問題になっているのが昨今蔓延る困窮との関連を強く示唆する内容であるので、まさにパンとサーカス。どうやったって我々は踊ることしかできないわけで、彼に与する気持ちが少しでもあるのならせめて彼の邪魔をしないことだけは徹底するべきだと強く思う。

・これを見ているから近頃毎日が刺激的だ。


・最近の特筆すべき買い物。

・左下にポインティングデバイスがついてる外付けテンキー。こういう形のポインティングデバイスは珍しいのでどれどれ⋯という気持ちで買ってみた。実用期待半分、参考半分。

機械的な詳しい構造はわからないが、丸いボタンの中にどの方向に押されているか検知する仕組み(8方向)があって、押されてればその方向に一定の速さでカーソルを動かす、という完全にONとOFFしかない動作で、カーソルの速度を変化させることはできない。まあ、こんな簡易なものでも使えるシチュエーションはあって、ある程度は用を為す。

・メインのポインティングデバイスとして採用することはできないけど、補助的なものとしてはあり得る。なるほど。参考になったし、自分でもっと便利なものを作るまでは使えると思う。


・愚痴。当然だがここの話ではない。

・単純に気づいたこととかを記録してるだけなのに知らん人がいきなり殴りつけてきて、気を悪くさせたのは申し訳ないけどどこがいけないのか教えてくださいって言っても教えてくれないの何なんだろう。これも自分基準で考えちゃいけないってやつなの? 殴ることそれだけが目的ってこと? 本当に意味がわからない。感情論でも啓蒙でもいいから何か教えてくれないと今後気をつけることもできないし、これからも私の存在はあなたにとって不快であり続けるんだが。