この間、マルツ電波に行ったら以前より興味があったarduino(アルデュイーノ)の互換ボードのMaruduino(マルデュイーノ)が売っていたので、衝動買いをしました。
![イメージ 1]()
![イメージ 2]()
![イメージ 3]()
![イメージ 4]()
![イメージ 5]()
arduinoはUSBポートが付いたマイコンですね。
マイコンとは何かと言えば、電気を制御する、ちっちゃなコンピューターですね・・・たぶん・・・・。
プログラムで指示を与えて、LEDをチカチカさせたり、モーターを動かしたり、インジェクターを制御したり、点火タイミングを制御したり・・・・・出来たら良いな。
現物はこんなものです。
最初からUSBケーブルもついています。
arduinoの良いところは書き込み用のソフトが無料ですし、書き込み用のライターは本体に最初から付いていることですね。
すぐに遊べるのは、うれしいですね。
基盤剥き出しなのは、寒そうなのでタッパーに入れました。![]()

とりあえず、偉大な先人たちのHpを見ながら、LEDをチカチカさせます。
プログラムはコピペしまくりです。![]()

でも、ただLEDを点滅させるだけでは、マイコンなど必要ないので7セグのLEDを制御します。
7セグのLEDをランダムにチカチカさせたり、数字を順番に表示させたりしています。
次にボタンで目的の数字を表示するようにしてみました。
これでシフトインジケーターも作れます。
どのボタンを押しても目的の表示になります。
ただ、シフトインジケーターのつもりで7個目にニュートラルようにゼロを表示させようとしてもうまくいきません。
まだいろいろ勉強中です。
まったくマイコンの知識がない自分でも、ここまで5時間位でたどり着いたのでかなり扱いやすいマイコンなのではないかと思います。
このおもちゃは、かなり楽しいです!!![]()
![]()


最後に今回のシフトインジケータ風の制御のプログラムはこんな感じです。
もっと上手くなれば、綺麗に整理できるのでしょうが、今のところはここが限界です。
いろんな方のHPを参考にさせていただきました。
const int anode_a = 12; //アノードに接続するArduinoのピン
const int anode_b = 8;
const int anode_c = 5;
const int anode_d = 3;
const int anode_e = 2;
const int anode_f = 11;
const int anode_g = 6;
const int cathode_pin = 13; // カソードに接続するArduinoのピン
// 数字と表示させるセグメントの関係
const int digits[] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00100111, // 7
0b01111111, // 8
0b01101111, // 9
};
// 数字を表示する
void display_number (int n) {
// digits[n]の各ビットを調べて対応するセグメントを点灯・消灯する
digitalWrite(anode_a, digits[n] & 0b00000001 ? HIGH : LOW);
digitalWrite(anode_b, digits[n] & 0b00000010 ? HIGH : LOW);
digitalWrite(anode_c, digits[n] & 0b00000100 ? HIGH : LOW);
digitalWrite(anode_d, digits[n] & 0b00001000 ? HIGH : LOW);
digitalWrite(anode_e, digits[n] & 0b00010000 ? HIGH : LOW);
digitalWrite(anode_f, digits[n] & 0b00100000 ? HIGH : LOW);
digitalWrite(anode_g, digits[n] & 0b01000000 ? HIGH : LOW);
}
void setup() {
pinMode(10,INPUT) ; //スイッチに接続ピンをデジタル入力に設定
pinMode(anode_a, OUTPUT);
pinMode(anode_b, OUTPUT);
pinMode(anode_c, OUTPUT);
pinMode(anode_d, OUTPUT);
pinMode(anode_e, OUTPUT);
pinMode(anode_f, OUTPUT);
pinMode(anode_g, OUTPUT);
pinMode(cathode_pin, OUTPUT);
}
void loop() {
if (digitalRead(10) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(6);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
if (digitalRead(7) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(5);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
if (digitalRead(9) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(4);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
if (digitalRead(4) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(3);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
if (digitalRead(A0) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(2);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
if (digitalRead(A1) == HIGH) { //スイッチの状態を調べる
digitalWrite(cathode_pin, LOW);
display_number(1);
} else {
digitalWrite(12,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(8,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(5,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(3,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(2,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(11,LOW) ; //スイッチが押されていないならLEDを消灯
digitalWrite(6,LOW) ; //スイッチが押されていないならLEDを消灯
}}}}}}}