
ボリュームのツマミで、何回転でもできる部分には、ロータリーエンコーダがつかわれてます。
買うときの参考に、通販のページの画像で2つだけポイントを。
1回転の分解度が高いものほど、若干値段も高いです。
千石電商から買えます。
東北芸術工科大学プロダクトデザイン学科の授業用です。

//For hiraoka
//Sensor and LED
//and STEPMOTOR
//20090707
//Pin
int ledpin1 = 8;
int ledpin2 = 9;
int ledpin3 = 10;
int ledpin4 = 13;
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int Pot=5;
int Switch=6;
//Value
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;
int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;
int dly;
int Count=0;
void setup(){
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledpin3,OUTPUT);
pinMode(ledpin4,OUTPUT);
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}
void loop(){
sensor1 = analogRead(0)/4;
sensor2 = analogRead(1)/4;
sensor3 = analogRead(2)/4;
sensor4 = analogRead(5)/4;
led1 = sensor1;
led2 = sensor2;
led3 = sensor3;
//preview
led4 = sensor4;
soft_pwm();
if(digitalRead(Switch)==1){
Count=Count+1;
MoveMotor(Count);
}
else{
StopMotor();
}
}
void soft_pwm(){
for(int Duty=255; Duty>1; Duty--){
if(Duty<=led1){
digitalWrite(ledpin1, HIGH);
}
else{
digitalWrite(ledpin1, LOW);
}
if(Duty<=led2){
digitalWrite(ledpin2, HIGH);
}
else{
digitalWrite(ledpin2, LOW);
}
if(Duty<=led3){
digitalWrite(ledpin3, HIGH);
}
else{
digitalWrite(ledpin3, LOW);
}
if(Duty<=led4){
digitalWrite(ledpin4, HIGH);
}
else{
digitalWrite(ledpin4, LOW);
}
}
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin2,LOW);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin4,LOW);
}
void MoveMotor(int stp){
int s;
s=stp%8;
switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}
void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}
//For hiraoka
//Sensor and LED
//20090707
//Pin
int ledpin1 = 8;
int ledpin2 = 9;
int ledpin3 = 12;
int ledpin4 = 11;
int ledpin5 = 13;
//Value
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;
int led5 = 0;
int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;
int sensor5 = 0;
void setup(){
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledpin3,OUTPUT);
pinMode(ledpin4,OUTPUT);
pinMode(ledpin5,OUTPUT);
}
void loop(){
sensor1 = analogRead(0);
sensor2 = analogRead(1);
sensor3 = analogRead(2);
sensor4 = analogRead(3);
sensor5 = analogRead(5);
led1 = sensor1;
led2 = sensor2;
led3 = sensor3;
led4 = sensor4;
led5 = sensor5;
soft_pwm();
}
void soft_pwm(){
for(int Duty=1023; Duty>1; Duty--){
if(Duty<=led1){
digitalWrite(ledpin1, HIGH);
}
else{
digitalWrite(ledpin1, LOW);
}
if(Duty<=led2){
digitalWrite(ledpin2, HIGH);
}
else{
digitalWrite(ledpin2, LOW);
}
if(Duty<=led3){
digitalWrite(ledpin3, HIGH);
}
else{
digitalWrite(ledpin3, LOW);
}
if(Duty<=led4){
digitalWrite(ledpin4, HIGH);
}
else{
digitalWrite(ledpin4, LOW);
}
if(Duty<=led5){
digitalWrite(ledpin5, HIGH);
}
else{
digitalWrite(ledpin5, LOW);
}
}
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin2,LOW);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin4,LOW);
digitalWrite(ledpin5,LOW);
}
/*----
ボタン押してない
・モーター回らない
・LEDも光らない
ボタン押す
・モーター回る
・6つのLEDの位置を時計としてみると、
a:12時6時が光り
b:10時4時が光り
c:8時と2時が光り
d:最後に6つ全部が光る
a~d繰り返し
もう一度スイッチを押すとモーターもLEDも止まる。
LEDの色は青でお願いします
----*/
//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;
int LED1=8;
int LED2=9;
int LED3=10;
int LED4=11;
int LED5=12;
int LED6=13;
//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;
int switch_status;
void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
switch_status=0;
}
void loop(){
if(digitalRead(Switch)==1){
if(switch_status==0){
switch_status=1;
}else{
switch_status=0;
}
}
if(switch_status==1){
Count=Count+1;
if(Count>96){
Count=0;
}else if(Count<0){
Count=96;
}
LightLED(Count);
MoveMotor(Count);
}else{
StopLED();
StopMotor();
}
}
void LightLED(int stp){
int s;
s=(stp/10)%6;
switch(s){
case 0:
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 1:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,LOW);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 2:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,LOW);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 3:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,LOW);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 4:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,LOW);
digitalWrite(LED6,HIGH);
break;
case 5:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,LOW);
break;
}
}
void StopLED(){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
}
void MoveMotor(int stp){
int s;
s=stp%8;
switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}
void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}
//pin select
int MOTOR =11;
int LED=10;
//サウンドのレベル用変数
int sound_level;
//サウンド感度調整ツマミ用変数
int analog0;
//モーターの回る時間調整ツマミ用変数
int analog1;
//LEDの明るさ用変数
int led_blight;
//forループ用変数
int j;
//セットアップ
void setup(){
//モーターピンをアウトプット(電気が出るように)
pinMode(MOTOR,OUTPUT);
//LEDピンもアウトプット(電気が出るように)
pinMode(LED,OUTPUT);
}
//メインループ
void loop(){
//サウンドレベルを読む(analog5ピン)
sound_level=analogRead(5);
//サウンド感度調整ツマミを読む(analog3ピン)
analog0=analogRead(3);
//もしも、サウンドレベルが感度調整ツマミより大きくなったら、
if(sound_level>analog0){
//モーターに電気を流す(回転)
digitalWrite(MOTOR,HIGH);
//LEDの明るさ変数を最大にする
led_blight=1023;
//モーターの回転時間調整ツマミを読む(alanog4ピン)
analog1=analogRead(4);
//モーターの回転調整の数値の回数だけ、delay(1)を繰り返す
for(j=0; j < analog1; j++){
delay(1);
}
//モーターの電気をとめる(回転停止)
digitalWrite(MOTOR,LOW);
//もう一度、モーター回転時間調整ツマミを読む
//その時間を今度は4で割る
analog1=analogRead(4)/4;
//回転時間調整ツマミを4で割った回数だけ、delay(1)を繰り返す
for(j=0; j < analog1; j++){
delay(1);
}
}
//そうじゃないとき(サウンドレベルが感度調整ツマミより大きくないとき)
else{
//LEDの明るさ変数に、0.99を掛け算して、徐々に減らす
//(じんわりと消えていくような場合のテクです)
led_blight*=0.99;
//モーターの電気をストップ(回転停止)
digitalWrite(MOTOR,LOW);
}
//LEDの明るさを実際にピンに反映させる
analogWrite(LED,1023-led_blight);
}