まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

2013年09月

東芝ワープロRupo用テンキー入力装置UE0267P2の調査

 ハードオフで見つけたテンキー。USBでもPS/2でもなく、MINI-DIN 10P。これひょっとしてと思い調べてみた。
2013tkey1 

 ゴム足を剥がした下にもネジがある。四カ所。思った通りマイコンなしのキーマトリックスだった。
2013tkey2 

 キーの数は23個。6x4か5x5か。ダイオードはない。
 2013tkey3

 テスタで調べた。6x4のマトリックスだった。しかし、当時のワープロでこれがオプションということは10bitのI/Oを外に出してたということだ。
2013_Rupo_UE0267P2

接続は以下のとおり:
キー				
+			1	5
/			1	6
ホーム			1	7
エンド			1	8
ー			1	9
←			1	10
, 2 5 後退 2 6 7 2 7 8 2 8 9 2 9 → 2 10
改行 3 5 4 3 6 5 3 7 6 3 8 1 3 9 ↑ 3 10
2 4 5 3 4 6 0 4 8 . 4 9 ↓ 4 10

メモ:My First Brainfuckコンピュータ

 8文字だけでプログラミングできる言語Brainfuck (Brainf*ckとも)。これをワンボード・マイコンにしたものがあった。
My First Brainfuck Computer

 キー入力は4個で音楽も奏でられる。その実体はArduinoのシールド。

 Brainfuckについては以下が参考になる。

Brainf*ck(kmonos.net)

KMC ID:primeさんによる紹介
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング

LEDとタクトスイッチに圧電ブザー、バニラシールドがあればすぐに組み立てられそうね。

たぶん最後のカイゼン LEDのチラつきをなくしキー入力を確実に

 以下の続き。

 カイゼンCookieClicker用自動マウスクリック(TimerOne割り込みによるキー読み取り)  

Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)

 残り、気になっている点は7セグメントLEDのチラつきと、クリック送出開始・送出終了のキー反応が敏感すぎること。一回確実に押しっぱなしにしてON、離してから次に押しっぱなしにしてOFFのような動作にしたい。

 LEDのチラつきは表示を消してから書いているためで、値が変わらなければ表示の更新もしないことで解決。BASICでゲーム作る時は移動先にキャラクタを描いてから元のキャラクタを消さないとちらついてましたね。

 送出開始・終了は、割り込みルーチン内で直前は押していない、現在は押している状態を認識させればよい。押しっぱなしでも記録されるのは1回だけ。これでかなり操作性が良くなった。
 なおディレイ間隔の増減は押しっぱなしで連続的に変化してもらいたいためそのままとした。

  key=digitalRead(CBTN);
  if (key==LOW && Psend==HIGH) Send=1; // Press
  Psend=key;
 
ソースはこちら:
https://gist.github.com/houmei/6627272

現在、4.5GcpsでUncannyClickerのarchivementを得た。
 

カイゼンCookieClicker用自動マウスクリック(TimerOne割り込みによるキー読み取り)

前回作った
Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)
が大変雑だったので、スケッチを作りなおした。

 どのへんが雑だったかというと:
(1)ループ内でキーを読み込んでいるため、ループ回数などが簡単にいじれずキーの反応も悪い。
(2)1000回ループのうち指定した回数を最初の方に1ms間隔でマウスクリックを押し込めたのでどうもよろしくない(ブラウザが固まることがある)

 特に操作感が悪かったのでキー入力を取りこぼさないようタイマ割り込みで読み取り、グローバル変数に結果を置き、メインのループでそれを参照するようにした。また、マウスクリック(1ms)+指定したms何もしないで待つ、という動作を繰り返すようにしてなるべくマウスクリックを一定間隔にあけられるようにした。このため、7セグLEDでの表示は待ち時間のmsに変更。つまり数値が小さいほど時間あたりのクリック数は多い。

ソースはこちら:
https://gist.github.com/houmei/6611030 

 タイマ割り込みについてはTimerOneライブラリを使用する。これはArduino Leonardoにも対応している。動作は簡単に言うとBASICのON TIME GOSUB 行番号。通じた?

 TimeOneライブラリを使用するにはsetup()内で初期化する。

  Timer1.initialize();
  Timer1.attachInterrupt(readkey,30000); // 30ms 

これで30ms間隔でreadkey()関数を呼び出す。

 readkey()関数はプッシュボタンの状態を呼び出す。直前のボタンの状態と比較し、押されていたらグローバル変数Up,Down,Sendを1に設定する。これはボタンのチャタリングを除去するため。Up,Down,Sendはloop()内で読み出したら0にクリアする。

volatile int Send=0;
volatile int Up=0;
volatile int Down=0;

volatile int Psend=0;
volatile int Pup=0;
volatile int Pdown=0;

void readkey() {
  int key;
  key=digitalRead(ABTN);
  if (key==LOW && Pdown==LOW) Down=1;
  Pdown=key;
  key=digitalRead(BBTN);
  if (key==LOW && Pup==LOW) Up=1;
  Pup=key;
  key=digitalRead(CBTN);
  if (key==LOW && Psend==LOW) Send=1;
  Psend=key;
}

 さて、ちょっとはまったのが noInterrupts()と interrupts()。これらは割り込みを抑止/許可するのだが、Mouse.click()以前にnoIntterrupts()状態だとクリックが送出されない。つまり、USBのHIDマウス/キーボードを使うときには割り込みを許可しておかなければならない。
 
 で、だいぶ操作感は改善されましたよ。

2013cookieclick3




現在3.5Gcps (cookies per second)

http://orteil.dashnet.org/cookieclicker/ 



Arduino Leonardo (ソケット・ヘッダ付き)Arduino Leonardo (ソケット・ヘッダ付き)

Arduino
売り上げランキング : 38773

Amazonで詳しく見る
by G-Tools

Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)

 なぜか今日ツイッターの自分のTLで突然流行り始めたクッキークリッカー。最初はクッキーをクリックするだけだったのが……
http://orteil.dashnet.org/cookieclicker/

 常にクリックするのも面倒なので、勝手に連続クリックするのを作ってみた。マウスクリックの代わりはArduino Leonardoを使えば簡単にできそうだ、ということでその辺にある物で作ってみた。

https://gist.github.com/houmei/6572149

2013cookie


 Pin8,9,10にタクトスイッチを接続。もう片方はGNDへ。
 表示はシリアル接続7セグメント4桁LED(赤)を使ったけどクリック動作には直接関係ない。約1秒あたりのクリック数を表示させる。これはArduino Leonardoのハードウェアシリアル機能を使うのでPin2をモジュールのRXに接続する。以前ちょっと試した。
シリアル接続7セグメント4桁LEDとUSB-TTLシリアルコンバータケーブル
 8,9に接続したボタンでクリックする数を増減させる。10に接続したボタンでクリックの開始と停止。これはメインのループ内でポーリングしているだけなので応答が悪い。クリックを送出している時はLeonardo上のLEDを点灯させる。ま、TXランプが点滅するのでわかるんだけど。
 やってみたら1秒あたり100回ぐらい、もっと増やすとブラウザ側が応答できなくなってくる。

 こんな感じでスクリプト言語を使ってるみたいに思いついたものを作りたいんだけど、物理的な部品と使い方のストックが必要なのよねー 
 

作って遊べるArduino互換機 Uncompatinoの組み立て失敗

 愉快な製作例が満載 作って遊べる Arduino互換機鈴木哲哉著)を買ってきた。作例で使うArduino互換のUncompatino基板が付いている。部品は別に入手しなければならないが、秋月電子で1000円で売っていた。
『作って遊べるArduino互換機』パーツセット
【書籍】作って遊べるArduino互換機

2013uncompatino1
 
 さて、難関はFT232RLのハンダ付け。これだけ2.54mmピッチではない。本の通りにやってみる。ハンダの吸い取りは吸い取り線にフラックスを塗ってやってみた。
2013uncompatino2

 他の部品も取り付けた後、PC側に必要なソフト類を用意。
BitBang版avrdude(avrdude-setjtag04e.zip) (すzのAVR研究)
avrdude-GUI(avrdude-GUI-1.0.5.zip) (ゆきの研究室)
libusb-win32

 Uncompatinoのプラグを全ショートにしてUSBで接続。avrdude-GUIでFUSEを読み込んでみるが以下のエラーが発生。


 
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

ft245r:  bitclk 76800 -> ft baud 38400
ft245r:  bitclk 76800 -> ft baud 38400
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
             Double check connections and try again, or use -F to override
             this check.


avrdude.exe done.  Thank you.

 -Fオプションを付けてやってみると:
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

ft245r:  bitclk 76800 -> ft baud 38400
ft245r:  bitclk 76800 -> ft baud 38400
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions
avrdude.exe: Device signature = 0x000000
avrdude.exe: Yikes!  Invalid device signature.
avrdude.exe: Expected signature for ATMEGA328P is 1E 95 0F

avrdude.exe done.  Thank you.
 USBからFT232RLへの通信は上手く行ってるみたいだが、FT232RLとATmega328pの通信がうまく行っていない。これはもうハンダ付け不良。
2013uncompatino3
 
 目視してもわからない。ショートチェックはやったが基板とFT232RLの足がうまくついているかはわからないので、半田ごてでなぞってみる。
 そうやってからUSB接続したらLEDが薄明るく点灯。読み書き操作で点滅。これで上手く行った。 Arduino用のブートローダを書き込んで、BlinkのサンプルスケッチでLチカやって動作確認。
 これでArduinoが一枚増えた。また、AVRの書き込み器としても使えそう。
 老眼つらい。

 
作って遊べるArduino互換機作って遊べるArduino互換機
鈴木 哲哉

ソシム 2013-08-21
売り上げランキング : 119653

Amazonで詳しく見る
by G-Tools
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ