Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Teclado serial

Aqui utilizamos um buzzer/piezo para tocar notas musicais. Tomamos proveito do fato de os microprocessadores serem capazes de produzir sinais PWM para tocarmos música. Encontre aqui algumas informações de David Cuartielles a respeito de PWM, ou mesmo aqui, no velho guia do curso K3.

Exemplo de conexão do buzzer/piezo ao pino 9

Código

/* Teclado Serial
 * --------------
 *
 * Programa feito para tocar notas dependendo dos
 * dados vindos a partir da porta serial.
 *
 * O cálculo dos tons é feito segundo a seguinte fórmula:
 *
 *       timeHigh = 1/(2 * toneFrequency) = period / 2
 *
 * sendo que as diferentes notas estão descritas na tabela:
 *
 * Nota 	Frequência 	Período LP (timeHigh)	
 * c 	        261 Hz 	        3830 	1915 	
 * d 	        294 Hz 	        3400 	1700 	
 * e 	        329 Hz 	        3038 	1519 	
 * f 	        349 Hz 	        2864 	1432 	
 * g 	        392 Hz 	        2550 	1275 	
 * a 	        440 Hz 	        2272 	1136 	
 * b 	        493 Hz 	        2028	1014	
 * C	        523 Hz	        1912 	956
 *
 * (cleft) 2005 D. Cuartielles para o K3
 */

int ledPin = 13;
int speakerOut = 9;
byte names[] ={'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'};  
int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
byte val = 0;
int serByte = -1;
int statePin = LOW;
int count = 0;

void setup() {
 pinMode(ledPin, OUTPUT); 
 pinMode(speakerOut, OUTPUT); 
 beginSerial(9600);
}

void loop() {
  digitalWrite(speakerOut, LOW);     
  serByte = serialRead();
  if (serByte != -1) {
    val = serByte;
    printByte(val);
    statePin = !statePin;
    digitalWrite(ledPin, statePin);
  }
  for (count=0;count<=8;count++) {
    if (names[count] == val) {       
      digitalWrite(speakerOut, HIGH);
      delayMicroseconds(tones[count]);
      digitalWrite(speakerOut, LOW);
      delayMicroseconds(tones[count]);
    }
  }
}