전체상품목록 바로가기

본문 바로가기


현재 위치
  1. home
  2. community
  3. 기술문의 :)

기술문의 :)

기술문의 게시판 입니다.

상품 게시판 상세
subject 사운드센서를 이용하여 웨이브쉴드를 작동하려고 합니다.
writer 아트로봇 (ip:)
  • date 2014-11-20 00:53:54
  • like 추천하기
  • view 151
rating 0점

안녕하세요

 

소스코딩 검증이나 코딩을 대신해 드릴 수 없는점 양해부탁드립니다.

 

아트로봇 드림


---------- Original Message ----------

 사운드센서를 이용하여 일정한 소리크기 이상이 들어오면 웨이브쉴드를 작동하는 작업을 하려고 합니다.

예제중에 analoginoutserial을 통해 사운드센서가 작동하는 걸 확인했고

웨이브쉴드예제를 통해 노래가 따로 동작하는 걸 확인해서 이 둘을 합치려고 합니다.

그런데 시리얼모니터확인이 안되서 이게 작동하는건지 잘 모르겠네요.

뭐가문제일까요....ㅠㅠ



#include
#include
#include
#include "WaveUtil.h"
#include "WaveHC.h"

SdReader card;    // This object holds the information for the card
FatVolume vol;    // This holds the information for the partition on the card
FatReader root;   // This holds the information for the filesystem on the card
FatReader f;      // This holds the information for the file we're play

WaveHC wave;      // This is the only wave (audio) object, since we will only play one at a time


const int numReadings = 300;
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to


int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average
int Threshold   = 410;
int averageNoise = 0;

 

// this handy function will return the number of bytes currently free in RAM, great for debugging!  
int freeRam(void)
{
  extern int  __bss_end;
  extern int  *__brkval;
  int free_memory;
  if((int)__brkval == 0) {
    free_memory = ((int)&free_memory) - ((int)&__bss_end);
  }
  else {
    free_memory = ((int)&free_memory) - ((int)__brkval);
  }
  return free_memory;
}

void sdErrorCheck(void)
{
  if (!card.errorCode()) return;
  putstring("\n\rSD I/O error: ");
  Serial.print(card.errorCode(), HEX);
  putstring(", ");
  Serial.println(card.errorData(), HEX);
  while(1);
}

void setup() {
  byte i;
 
  // set up serial port
  Serial.begin(9600);
  putstring_nl("WaveHC with ");
  
  putstring("Free RAM: ");       // This can help with debugging, running out of RAM is bad
  Serial.println(freeRam());      // if this is under 150 bytes it may spell trouble!
 
  // Set the output pins for the DAC control. This pins are defined in the library
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
 

  for (int thisReading = 0; thisReading < numReadings; thisReading++){
    readings[thisReading] = 0;  }
  
  //  if (!card.init(true)) { //play with 4 MHz spi if 8MHz isn't working for you
  if (!card.init()) {         //play with 8 MHz spi (default faster!) 
    putstring_nl("Card init. failed!");  // Something went wrong, lets print out why
    sdErrorCheck();
    while(1);                            // then 'halt' - do nothing!
  }
 
  // enable optimize read - some cards may timeout. Disable if you're having problems
  card.partialBlockRead(true);
 
// Now we will look for a FAT partition!
  uint8_t part;
  for (part = 0; part < 5; part++) {     // we have up to 5 slots to look in
    if (vol.init(card, part))
      break;                             // we found one, lets bail
  }
  if (part == 5) {                       // if we ended up not finding one  :(
    putstring_nl("No valid FAT partition!");
    sdErrorCheck();      // Something went wrong, lets print out why
    while(1);                            // then 'halt' - do nothing!
  }
 
  // Lets tell the user about what we found
  putstring("Using partition ");
  Serial.print(part, DEC);
  putstring(", type is FAT");
  Serial.println(vol.fatType(),DEC);     // FAT16 or FAT32?
 
  // Try to open the root directory
  if (!root.openRoot(vol)) {
    putstring_nl("Can't open root dir!"); // Something went wrong,
    while(1);                             // then 'halt' - do nothing!
  }
 
  // Whew! We got past the tough parts.
  putstring_nl("Ready!");
 
  TCCR2A = 0;
  TCCR2B = 1<

  //Timer2 Overflow Interrupt Enable
  TIMSK2 |= 1<}


void loop() {
  // subtract the last reading:
  total= total - readings[readIndex];

  // read from the sensor: 
  readings[readIndex] = analogRead(analogInPin);
 
  // add the reading to the total:
  total= total + readings[readIndex];      

  // advance to the next position in the array: 
  readIndex = readIndex + 1;                   

  // if we're at the end of the array...
  if (readIndex >= numReadings)             
    // ...wrap around to the beginning:
    readIndex = 0;                          

  // calculate the average:
  average = total / numReadings;        
  // send it to the computer as ASCII digits
  //Serial.println(average);  

  delay(1);        // delay in between reads for stability 

  averageNoise = average;


  Serial.print("averageNoise = " );                      
  Serial.print(averageNoise);           
 

  if (averageNoise > Threshold) {      
      playcomplete("MUST.WAV");
  }
  else{
     wave.stop();
  }


  // wait 20000 milliseconds(20 sec) before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(20000); 
}


void HIGH_OUTPUT() {
 digitalWrite(digitalOutPin,HIGH);
 delay(200);
 digitalWrite(digitalOutPin,LOW);
}
void LOW_OUTPUT() {
 digitalWrite(digitalOutPin,LOW);
}


// Plays a full file from beginning to end with no pause.
void playcomplete(char *name) {
  // call our helper to find and play this name
  playfile(name);
  while (wave.isplaying) {
  // do nothing while its playing
  }
  // now its done playing
}

void playfile(char *name) {
  // see if the wave object is currently doing something
  if (wave.isplaying) {// already playing something, so stop it!
    wave.stop(); // stop it
  }
  // look in the root directory and open the file
  if (!f.open(root, name)) {
    putstring("Couldn't open file "); Serial.print(name); return;
  }
  // OK read the file and turn it into a wave object
  if (!wave.create(f)) {
    putstring_nl("Not a valid WAV"); return;
  }
 
  // ok time to play! start playback
  wave.play();
}

file
password 삭제하려면 비밀번호를 입력하세요.
댓글 수정

password :

/ byte

비밀번호 : 확인 취소

댓글 입력

commentsname : password : 관리자 답변 보기

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

회원에게만 댓글 작성 권한이 있습니다.

관련 글 보기

관련글 모음
번호 상품명 제목 작성자 작성일 조회
15772 [TA94] 아두이노 웨이브 쉴드 킷 (Adafruit Wave Shield for Arduino Kit) 수고 많으십니다. 고길석 2016-06-22 261
15773 [TA94] 아두이노 웨이브 쉴드 킷 (Adafruit Wave Shield for Arduino Kit) 수고 많으십니다. 아트로봇ST 2016-06-22 258
14014 [TA94] 아두이노 웨이브 쉴드 킷 (Adafruit Wave Shield for Arduino Kit) 입금했는데요! 류지원 2015-05-18 193
14017 [TA94] 아두이노 웨이브 쉴드 킷 (Adafruit Wave Shield for Arduino Kit) 입금했는데요! 아트로봇ST 2015-05-19 201
12690 [TA94] 아두이노 웨이브 쉴드 킷 (Adafruit Wave Shield for Arduino Kit) 문의드립니다~! 이충호 2014-11-26 199