2021年1月18日 星期一

week12_鄭皓文


       上星期我们学习了如何用UNO蜂鸣器播放预先准备好的音乐,这星期我们要学的是如何把UNO变成可以弹奏的乐器,不过这次我们要请出Processing帮忙才可以完成任务,程式码如下:

这边是Arduino要烧录的:

#define Do 523

#define Re 587

#define Mi 659

#define Fa 698

#define So 784

#define La 880

#define Ti 988

#define Doo 1046

void setup() {

  Serial.begin(9600);

  pinMode(2,INPUT_PULLUP);

  pinMode(8,OUTPUT);

  tone(8,Do);

  delay(1000);

  tone(8,Mi);

  delay(1000);

  tone(8,So);

  delay(1000);

  noTone(8);

}

void loop() {

 while(Serial.available()>0){

  int now = Serial.read();

  if(now=='0') noTone(8);

  if(now=='1') tone(8,Do);

  if(now=='2') tone(8,Re);

  if(now=='3') tone(8,Mi);

  if(now=='4') tone(8,Fa);

  if(now=='5') tone(8,So);

  if(now=='6') tone(8,La);

  if(now=='7') tone(8,Ti);

  if(now=='8') tone(8,Doo);

 }

}

根据网上查到的音符表可以补全剩下的音阶

 

这边是Processing里要写的:

import processing.serial.*;

Serial myPort;

void setup(){

  size(200,200);

  myPort = new Serial(this,"COM5",9600);

}

void draw(){

  

}

void keyPressed(){

  if(key=='0') myPort.write("0");

  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");

  if(key=='6') myPort.write("6");

  if(key=='7') myPort.write("7");

  if(key=='8') myPort.write("8");

}

按下0就可以静音,COM可以根据自己電腦的狀況自行调整

     

于是在最后我这个五音不全的人还是做出了一个勉强可以演奏的乐器,不过感觉还是GitHub上边那些大神的作品比较nb些。

沒有留言:

張貼留言