littleBitsアドベントカレンダー2日目です。
Arduinoモジュールで押したら動作が変化していくもののベースとして、このように連打した値を貯めて増加していくような仕組みを作る場合があります。
Arduinoのコードは以下のように書いています。
// 入力の状態記録
int stateInput = LOW;
// カウント
int count = 0;
void setup() {
Serial.begin(9600);
pinMode(5,OUTPUT);
}
void loop() {
// 入力の状態を取得
int stateInputCurrent = digitalRead(A0);
// 入力の値の判定
if ( (stateInputCurrent != stateInput) && (stateInputCurrent == HIGH) ) {
// カウント増加
count++;
if( count > 100 ){
count = 100;
}
// カウントされた分だけ出力に反映
analogWrite(5,255 * count / 100);
Serial.println(count);
delay(100);
}
// 入力の状態を次のループまで記憶
// 長押しで増加しないように防止
stateInput = stateInputCurrent;
}
たとえば、この仕組みをサーボモジュールに付け変えると、メータが上がっていくような動作になるので、ちょっとしたスコアを貯めるような動作に使うことが可能です。
いままで、このようなコードをArduinoで作っていたのですが、最近littleBits Arduinoモジュールよりも手軽に値を貯めれるNUMBER+モジュールが登場しておりました。
以前のNUMBERモジュール
以前のNUMBERモジュールはもっとシンプルで2つの機能でした。
このようにvoltsにつまむと電流量を0~5.0Vで表示する機能と、
valuesにつまむと0~100%の度合いを示す機能でした。
NUMBER+モジュールになったら手軽に値を貯めれるようになった
ちょっといつの時期に切り替わったのかはハッキリわからないのですが、NUMBERモジュールがNUMBER+モジュールとなって手軽に値を貯めれるようになりました。
今まで通りのvolts、values機能は切り替えられつつ、
上部のcount枠につまんでいき、upの場合はボタンを押すたびに増加します。
そして、downの場合はボタンを押すたびに減少します。
最初ご紹介したとおり、Arduinoモジュールでプログラムを書き込んでももちろんできますが、このようにモジュールに機能追加されてよりコンパクトに動作できる方は使いやすいですね。
おわりに
NUMBER+モジュールの後に出力モジュールを付けたときの動作は、さきほどのArduinoモジュールの挙動と同様にカウント量に合わせて0~100%と変化します。
アドベントカレンダー1日目でLOGICモジュール群をArduinoモジュールで模写してみましたが、今回の場合はArduinoモジュールで作ると面白い動きがlittleBitsのモジュールに反映されるという逆の流れ。プログラムとハード(モジュール)が行き来できる側面もあるlittleBits、是非さわってみて下さい!
余談
本家のサイトにも Tips & Tricks: Number+ という形でリセットの発動のさせ方が載っていました。