Arduino 入门之小星星

原理:通过编号映射不同的频率音频信号,配合延时输出,达到演奏音乐和跑马灯的效果。

优酷视频链接:https://v.youku.com/v_show/id_XMzcxODQ4NjA3Mg==.html?spm=a2hzp.8244740.0.0

 

准备工作:Arduino开发板一块,串口线一根,电脑一台,Arduino ide,8欧喇叭一个,LED若干

#include "pitches.h"
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO 
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino model, check
  the Technical Specs of your board  at https://www.arduino.cc/en/Main/Products
  
  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
  
  modified 2 Sep 2016
  by Arturo Guadalupi
  
  modified 8 Sep 2016
  by Colby Newman
*/

int melody[] = {
  NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4,NOTE_G4,NOTE_F4,NOTE_F4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_C4
};
int noteDurations[] = {
  4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2,4, 4, 4, 4, 4, 4, 2, 4,4,4,4,4,4,2
};
//bool btnstat=true;
//bool playing=true;
int dl=50;
int pins[5]={3,5,7,9};
// the setup function runs once when you press reset or power the board
void setup() {
   //Serial.begin(9600);
  // initialize digital pin LED_BUILTIN as an output.
  for(int i=0;i<4;i++){
    pinMode(pins[i], OUTPUT);
  }    
  pinMode(12, INPUT_PULLUP);
}

//void setSwitch(){
//  int stat=digitalRead(12);
//  //Serial.println(stat);
//  if(stat==0){
//    if(btnstat){
//      btnstat=false;      
//    }else{
//      btnstat=true; 
//    }
//  }
//}
// the loop function runs over and over again forever
void loop() {
  int stat=digitalRead(12);
  if(stat==1) return;
  for (int thisNote = 0; thisNote < (sizeof(melody)/sizeof(int)); thisNote++) {
    //setSwitch();
    stat=digitalRead(12);
    if(stat==1) return;
    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000 / noteDurations[thisNote];
    long led=random(0,4);
    digitalWrite(pins[led], HIGH);
    tone(2, melody[thisNote], noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    digitalWrite(pins[led], LOW);
    // stop the tone playing:
    noTone(2);
  }
  /*
  for(int i=0;i<4;i++){
    for(int j=0;j<3;j++){
      digitalWrite(pins[i], HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(dl);                       // wait for a second
      digitalWrite(pins[i], LOW);    // turn the LED off by making the voltage LOW
      delay(dl); 
    }
    //delay(200);
  }
  delay(500);
  */
}

 

posted @ 2017-08-07 23:01  八爻老骥  阅读(1702)  评论(0编辑  收藏  举报