2019年11月21日 星期四

06160150_蔡宗芸 W11

2019年11月21日

11週

原始程式碼:

#define NOTE_C5 523
#define NOTE_E5 659
#define NOTE_G5 784

#define BUTTON 2
#define BUZZER 8

int melody[] = {
  NOTE_E5, NOTE_E5, 0, NOTE_E5, 0, NOTE_C5, NOTE_E5, 0, NOTE_G5
};

int noteDurations[] = {
  10, 10, 10, 10, 10, 10, 10, 10, 10
};

int pin;
int ledArrayHigh;
int ledArrayLow;
boolean mode = false;
boolean buttonPressed = false;

void setup()
{
  delay(1000);
  
  pinMode(BUTTON, INPUT_PULLUP);
  for (pin = 3; pin < 14; pin++) { 
    pinMode(pin, OUTPUT);
  }

  for (int thisNote = 0; thisNote < 9; thisNote++) {
    int noteDuration = 1000 / noteDurations[thisNote];
    tone(BUZZER, melody[thisNote], noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(BUZZER);
  }
}

void loop()
{
  for (pin = 0; pin < 5; pin++) {
    if (digitalRead(BUTTON) == LOW &&
        buttonPressed == false) {
      buttonPressed = true;
      mode = !mode;
      pin = 0;
      if (mode == false) {
        tone(BUZZER, NOTE_C5, 100);
        delay(100);
        tone(BUZZER, NOTE_G5, 100);
        delay(100);
        noTone(BUZZER);
      }
      else if (mode == true) {
        tone(BUZZER, NOTE_G5, 100);
        delay(100);
        tone(BUZZER, NOTE_C5, 100);
        delay(100);
        noTone(BUZZER);
      }
    }

    if (mode == false) {
      ledArrayHigh = 13 - pin;
      ledArrayLow = 7 - pin;
    }
    else if (mode == true) {
      ledArrayHigh = 9 + pin;
      ledArrayLow = 3 + pin;
    }
    digitalWrite(ledArrayHigh, HIGH);
    digitalWrite(ledArrayLow, HIGH);
    delay(100);
    digitalWrite(ledArrayHigh, LOW);
    digitalWrite(ledArrayLow, LOW);
    if (pin == 4) delay(100);
  }

  if (buttonPressed == true) {
    buttonPressed = false;
  }
}


作業(一)----發亮1個燈


void setup() 
{
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
  digitalWrite(13,HIGH);
}
void loop()
{
// put your main code here, to run repeatedly:
}


作業(二)----發亮13個燈



void setup() 
{
  // put your setup code here, to run once:
  pinMode(2,INPUT_PULLUP);

  for(int i=3;i<=13;i++)
  {
    pinMode(i,OUTPUT);
    
  }
}

bool bLightHIGH=true;

void loop()
{
  // put your main code here, to run repeatedly:
  if(digitalRead(2)==HIGH)bLightHIGH=true;
  else bLightHIGH=false;

  for(int i=3;i<=13;i++)
  {
    if(bLightHIGH)digitalWrite(i,HIGH);
    else digitalWrite(i,LOW);
  }
}

作業(三)----發聲音



#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784  (會使用的音調)

void setup() 
{
  // put your setup code here, to run once:
  pinMode(8,OUTPUT);
}

void loop() 
{
  // put your main code here, to run repeatedly:
  tone(8,NOTE_G5,330);
  delay(330);
  tone(8,NOTE_E5,330);
  delay(330);
  tone(8,NOTE_E5,330);
  delay(530);

  tone(8,NOTE_F5,230);
  delay(230);
  tone(8,NOTE_D5,230);
  delay(230);
  tone(8,NOTE_D5,430);

  delay(1300);
}

*****小星星*****
#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784

void setup() {
  pinMode(8,OUTPUT);
}
void loop() {
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(350);
  
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(350);
  
  tone(8, NOTE_C5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(350);
  
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(350);
  
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(350);
  
  tone(8, NOTE_C5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_C5, 230);
  delay(350);
}

*****按enter繼續*****

#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784

bool canSing = false;

void setup() {
    pinMode(8, OUTPUT); 
    pinMode(2, INPUT_PULLUP); 
}

void loop()
{
    if (digitalRead(2) == LOW) canSing = true;
    else canSing = false;
    
    if (canSing) sing();
}

void sing() 

{
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(350);
  
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(350);
  
  tone(8, NOTE_C5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(350);
  
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(350);
  
  tone(8, NOTE_F5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(230);
  tone(8, NOTE_D5, 230);
  delay(350);
  
  tone(8, NOTE_C5, 230);
  delay(230);
  tone(8, NOTE_E5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_G5, 230);
  delay(230);
  tone(8, NOTE_C5, 230);
  delay(350);
  canSing = false;
}

 作業(四)--讓Processing與Maker Uno連接,按下鍵盤版子就發出對應的聲音


 Processing Code: 


import processing.serial.*;

Serial myPort;

void setup() 
{
    myPort = new Serial(this, "", 9600);
}

void draw() {
    
}

void keyPressed() {
    
    if (key == '1') myPort.write('1');
    if (key == '2') myPort.write('2');
    if (key == '3') myPort.write('3');
    if (key == '4') myPort.write('4');
    if (key == '5') myPort.write('5');
}


 Arduino Code: 


#define NOTE_C5 523
#define NOTE_D5 587
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_G5 784

void setup() {
    pinMode(8, OUTPUT); //發聲音的BUZZER
    Serial.begin(9600);
}

void loop() {
    if (Serial.available()) {
    char now = Serial.read(); // 讀來自於Processing傳送過來的鍵盤訊號
    if (now == '1') tone(8, NOTE_C5, 300); // 發聲
    if (now == '2') tone(8, NOTE_D5, 300); // 發聲
    if (now == '3') tone(8, NOTE_E5, 300); // 發聲
    if (now == '4') tone(8, NOTE_F5, 300); // 發聲
    if (now == '5') tone(8, NOTE_G5, 300); // 發聲
    }
}

沒有留言:

張貼留言

alanhc 互動技術-week17 [final]

回顧這學期的作品:  期中作業:LANDING:PLANET 賣點&特點: 炫麗的特效 物理(星球重力及降落)及粒子系統(噴射) 世界地圖可根據視角縮放 困難點: 重寫3次最終改寫成物件導向的CLASS寫法...