サウンドミニハッカソン#8自動楽器
https://effectorhack.connpass.com/event/164867/
のイベントで作った備忘録です。
#できたもの
#苦労したところ
モーターをまとめて動かそうとすると動きが悪くなる
3つくらいまでなら割と動く。
たくさんつけると、休ませながらでないと動きが悪くなる。
モーターを動かし続けてしまったりすると、モーターや回路に悪いことがおこるので気を付ける。
#プログラム
グレイコードなシーケンスをもとに、
3つのモーターまでを同時に動かすような形にしてみた。
シリアルモニターに出力される数字が1のモーターが動作するイメージ。
初回動作時はモーターが元気だけど、これでも動きがかなり弱まってしまうので、
ディレイの値を大きめにした方が良いかも。
20200216.ino
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void mPlay1(int val)
{
byte b = (val & 0x01) != 0;
if(b){digitalWrite(7, HIGH);};
b = (val & 0x02) != 0;
if(b){digitalWrite(12, HIGH);};
b = (val & 0x04) != 0;
if(b){digitalWrite(11, HIGH);};
}
void mPlay2(int val)
{
byte b = (val & 0x08) != 0;
if(b){digitalWrite(10, HIGH);};
b = (val & 0x10) != 0;
if(b){digitalWrite(9, HIGH);};
b = (val & 0x20) != 0;
if(b){digitalWrite(8, HIGH);};
}
void mStop()
{
digitalWrite(7, LOW);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
int v = 1;
// the loop function runs over and over again forever
void loop() {
v = v ^ (v >> 1);
v++;
Serial.print(v, BIN);
Serial.print("\n");
mPlay1(v);
delay(50);
mStop();
delay(50);
mPlay2(v);
delay(50);
mStop();
delay(500);
}
ディレイを多めにしたときのモーターの動き
https://twitter.com/tatmos/status/1228829692259471365
・・・
追記(21-08-12):
ArduinoMegaを使って数は増やしていますが、基本同じ構成
https://www.nicovideo.jp/watch/sm39075386