2013年12月1日 星期日

Week 13

Lesson 5 Mode Cue
利用手去轉馬達,使得風扇轉動

#include <servo .h="">
Servo myServo;
int const potPin =A0;
int potVal;
int angle;
void setup(){
  myServo.attach(9);
  Serial.begin(9600);
}
void loop(){
  potVal = analogRead(potPin);
  Serial.print("potVal: ");
  Serial.print(potVal);
  //這裡的 map function 可以把 0~1023 轉換到 0~179度
  //很方便的函示
  angle=map(potVal, 0, 1023, 0, 179);
  Serial.print(", angle: ");
  Serial.print(angle);
  Serial.print("\r\n");
  myServo.write(angle);
  delay(15);
}






Lesson 6 Light Theremin
利用光線的強弱來發出聲音

int sensorValue;
int sensorLow = 1023;
int sensorHigh = 0;
const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
  //遮住/打開光敏電阻,讓程式修正最大和最小值
  while (millis() &lt; 5000) {
    sensorValue = analogRead(A0);
    if (sensorValue &gt; sensorHigh) {
      sensorHigh = sensorValue;
    }
    if (sensorValue &lt; sensorLow) {
      sensorLow = sensorValue;
    }
  }
  //開始進入
  digitalWrite(ledPin, LOW);
}

void loop() {
  sensorValue = analogRead(A0);
  //對應最高和最低的數值,對應為 50~4000 hz
  int pitch = map(sensorValue, sensorLow, sensorHigh, 50, 4000);
  tone(8, pitch, 20);
  delay(10);
}





Lesson 7 Keyboard Instrument
按鍵發出樂器的聲音

int notes[]={262,294,330,349}; void setup() { Serial.begin(9600); } void loop() { int keyVal=analogRead(A0); Serial.println(keyVal); if(keyVal==1023) { tone(8,notes[0]); } else if (keyVal>=900 && keyVal<=1010) { tone(8,notes[1]); } else if(keyVal>=505 && keyVal<=511) { tone(8,notes[2]); } else if (keyVal>=512 && keyVal<=512) { tone(8,notes[3]); } else { noTone(8); } }

沒有留言:

張貼留言