2019年11月21日 星期四

Week_11

1. 讓MAKER UNO的LED亮燈

 Code: 
void setup() {
  // put your setup code here, to run once:
  pinMode(13, OUTPUT); // 設定輸出腳位
  digitalWrite(13, HIGH); // 讓13號燈發光
}

void loop() {
  // put your main code here, to run repeatedly:

}



2. 還原預設的有馬力歐音效的程式

 Code: 
#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;
    }
}



3. 按下按鈕燈全開,放開就全關掉

 Code: 
bool bLightHIGH = true; // 紀錄燈被打開了沒

void setup() {
    pinMode(2, INPUT_PULLUP); // 把BUTTON(2號角位)打開

    for (int i=3; i<=13; i++) {
    // LED的腳位是3~13
    pinMode(i, OUTPUT); // 設定輸出腳位
    }
}

void loop() {
    // 如果按鈕被按下就把全部的燈都打開,放開就關掉
    if (digitalRead(2) == LOW) bLightHIGH = true;
    else bLightHIGH = false;

    for (int i=3; i<=13; i++) {
    if (bLightHIGH) digitalWrite(i, HIGH); // 讓i號燈發光
    else digitalWrite(i, LOW); // 讓i號燈關掉
    }
}



4. 按下按鈕就唱小蜜蜂

 Code: 
// 定義聲音的音頻
#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); //發聲音的BUZZER
    pinMode(2, INPUT_PULLUP); // 把BUTTON(2號角位)打開
}

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;
}



5. 讓Processing與Maker Uno連接,按下鍵盤版子就發出對應的聲音

 Processing Code: 
import processing.serial.*;

Serial myPort; // 定義Serial Port與Maker Uno連接

void setup() {
    // 初始化與Maker Uno連接的Port
    myPort = new Serial(this, "/dev/cu.wchusbserial1420", 9600);
}

void draw() {
    
}

void keyPressed() {
    // 按下鍵盤的數字鍵就會傳送給Maker Uno讓版子發出聲音
    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寫法...