2019年12月19日 星期四

1081219鹿港高中人體樂器




講師:台中女中王裕德

http://eclass.tcgs.tc.edu.tw/home/index.php

tcgs01
xxx22205108



9:20
解決arduino驅動問題
http://flagsupport.blogspot.com/2015/04/ft232-ftdi.html





先下載官方提供的驅動程式。下載後解壓縮等待後續使用。
在前面裝置內容的交談窗中切換到『驅動程式』頁次, 按一下『更新驅動程式』:


第一次測試arduino
開啟Arduino
偏好設定字型大小20

開發板arduino nano
選擇com
處理器 ATmega328p (oldXXXXXXX)

檔案>>範例>>1basic>>blink 

上傳
結果板子每隔一秒閃白燈

9:40
麵包板介紹






nano板數位 類比輸入










由A0偵測2.2M歐姆電阻,當人用手去接地會有一個電阻值

結果產生不同的電壓


零件清單




10:00
實際接線
看看監測視窗A0的電阻值0~1023


程式碼如下
void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);

}

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

  int i=analogRead(A0);
  Serial.println(i);
  delay(1000);
}




10:30

用手碰觸發出聲音

oid setup() {
  // put your setup code here, to run once:

Serial.begin(9600);


}

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

int i=analogRead(A0);


  if(i<850){
        tone(10,523,1000);
               }

 
  Serial.println(i);
  delay(1000);
  noTone(10);

}

10:40
3種變數各8個
音調
時間
計數器

沒有接觸,5V會流到A0(電容斷路滅少雜訊)A0讀數1023
人體電阻越大A0讀數越大

int melody[8] = {523,587,659,698,784,880,988,1046};
int noteDurations[8] = {2,2,2,2,2,2,2,2};
int note_no=0;  //設定note_no變數,記錄播放的音符號
void setup() {
  Serial.begin(9600);
  pinMode(10,OUTPUT);  //設定接腳10為輸出,供喇叭輸出聲音使用
}
void loop() {
  int a = analogRead(A0);    //讀取A0接腳的類比訊號值
  int b = analogRead(A1);    //讀取A1接腳的類比訊號值
  int c = analogRead(A2);    //讀取A2接腳的類比訊號值
  int noteDuration = 0 ;
  Serial.println(a);
  Serial.println(b);
  Serial.println(c);
  if(a<850){
     noteDuration = 1000/noteDurations[note_no]; // 音符延續時間為1000毫秒/noteDurations陣列內的元素
     tone(10, melody[note_no], noteDuration);  
     if(note_no>=7){  //如果播放到最後一個音符,就將計數器歸0,此處判斷數值為melody陣列元素-1
       note_no=0;
     }else{
       note_no=note_no+1;  //計數器+1
     }  
  }
  if(b<850){
     noteDuration = 1000/noteDurations[note_no];
     tone(10, melody[note_no], noteDuration);    
      if(note_no>=7){
       note_no=0;
     }else{
       note_no=note_no+1;
     }
  }
  if(c<850){
     noteDuration = 1000/noteDurations[note_no];
     tone(10, melody[note_no], noteDuration);  
     if(note_no>=7){
       note_no=0;
     }else{
       note_no=note_no+1;
     }
  }
  delay(noteDuration); //延時 noteDuration
  noTone(10);
}























沒有留言:

張貼留言