Hi,
I'm tring to use the the MIDIUSB_buzzer example, but I get the errors regarding the 'tone and noTone'.
I then found this sketch to implement tones on the Due, and have added it to the MIDIUSB_buzzer sketch, but I still get the same error?;
http://forum.arduino.cc/index.php?topic=363557.0
Hears my current example sketch;
/*
* MIDIUSB_buzzer.ino
*
* Author: Paulo Costa
*/
#include <MIDIUSB.h>
#include "pitchToFrequency.h"
#include <stdint.h>
#include <Arduino.h>
//#define BUZZ_PIN 9
#define TONE_PIN 2 // TIOA0
static Tc *chTC = TC0;
static uint32_t chNo = 0;
const char* pitch_name(byte pitch) {
static const char* names[] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
return names[pitch % 12];
}
int pitch_octave(byte pitch) {
return (pitch / 12) - 1;
}
void noteOn(byte channel, byte pitch, byte velocity) {
tone(BUZZ_PIN, pitchFrequency[pitch]);
Serial.print("Note On: ");
Serial.print(pitch_name(pitch));
Serial.print(pitch_octave(pitch));
Serial.print(", channel=");
Serial.print(channel);
Serial.print(", velocity=");
Serial.println(velocity);
}
void noteOff(byte channel, byte pitch, byte velocity) {
noTone(BUZZ_PIN);
Serial.print("Note Off: ");
Serial.print(pitch_name(pitch));
Serial.print(pitch_octave(pitch));
Serial.print(", channel=");
Serial.print(channel);
Serial.print(", velocity=");
Serial.println(velocity);
}
void controlChange(byte channel, byte control, byte value) {
Serial.print("Control change: control=");
Serial.print(control);
Serial.print(", value=");
Serial.print(value);
Serial.print(", channel=");
Serial.println(channel);
}
void setup() {
Serial.begin(115200);
configureToneTimer();
}
void loop() {
midiEventPacket_t rx = MidiUSB.read();
switch (rx.header) {
case 0:
break; //No pending events
case 0x9:
noteOn(
rx.byte1 & 0xF, //channel
rx.byte2, //pitch
rx.byte3 //velocity
);
break;
case 0x8:
noteOff(
rx.byte1 & 0xF, //channel
rx.byte2, //pitch
rx.byte3 //velocity
);
break;
case 0xB:
controlChange(
rx.byte1 & 0xF, //channel
rx.byte2, //control
rx.byte3 //value
);
break;
default:
Serial.print("Unhandled MIDI message: ");
Serial.print(rx.header, HEX);
Serial.print("-");
Serial.print(rx.byte1, HEX);
Serial.print("-");
Serial.print(rx.byte2, HEX);
Serial.print("-");
Serial.println(rx.byte3, HEX);
}
}
void configureToneTimer() {
// Configure TONE_PIN pin as timer output
pmc_enable_periph_clk( ID_PIOB ) ;
int result = PIO_Configure( PIOB,
PIO_PERIPH_B,
PIO_PB25B_TIOA0,
PIO_DEFAULT);
Serial.println(result);
pmc_set_writeprotect(false);
pmc_enable_periph_clk(ID_TC0);
TC_Configure(chTC, chNo,
TC_CMR_TCCLKS_TIMER_CLOCK4 |
TC_CMR_WAVE | // Waveform mode
TC_CMR_WAVSEL_UP_RC | // Counter running up and reset when equals to RC
TC_CMR_ACPA_SET | // RA compare sets TIOA
TC_CMR_ACPC_CLEAR ); // RC compare clears TIOA
chTC->TC_CHANNEL[chNo].TC_IER=TC_IER_CPCS; // RC compare interrupt
chTC->TC_CHANNEL[chNo].TC_IDR=~TC_IER_CPCS;
}
void setFrequencytone(uint32_t frequency)
{
if(frequency < 0 || frequency > 100001) {
TC_Stop(chTC, chNo);
return;
}
const uint32_t rc = VARIANT_MCK / 128 / frequency;
const uint32_t ra = rc >> 1; // 50% duty cycle
//const uint32_t ra = rc >> 2; // 20% duty cycle
TC_Stop(chTC, chNo);
TC_SetRA(chTC, chNo, ra);
TC_SetRC(chTC, chNo, rc);
TC_Start(chTC, chNo);
}
Does anyone know what wourds I should use instead of 'tone and noTone', to get this working?
Dizzwold.