midi error syntax issues
hello
i struggling trying finalise code working on. using ping sensor trigger different midi notes depending on proximity (3 notes in total) , although method using seems work in other midi enabled arduino code have used reason 1 keep getting following error message:
in function 'void loop()':
error: 'midiout' not declared in scope
i have used method of midiout , stuck doing wrong time around. suggestions?
i struggling trying finalise code working on. using ping sensor trigger different midi notes depending on proximity (3 notes in total) , although method using seems work in other midi enabled arduino code have used reason 1 keep getting following error message:
in function 'void loop()':
error: 'midiout' not declared in scope
i have used method of midiout , stuck doing wrong time around. suggestions?
code: [select]
/* new variables */
int delay_time = 30; // delay amount each write cycle.
byte channel = 1;
byte printing_byte = 0;
/* ultrasound sensor
*------------------
*
* reads values (00014-01199) ultrasound sensor (3m sensor)
* , writes values serialport.
*
* http://www.xlab.se | http://www.0j0.org
* copyleft 2005 mackie xlab | dojodave dojocorp
*
*/
// code edited sebastian tomczak 23 april 2008
const int pingpin = 12;
int val = 0;
int ultrasoundvalue = 0;
int timecount = 0;
int brightness = 0;// echo counter
int ledpin1 = 8;
int ledpin2 = 9;
int ledpin3 = 10;
int ledpin4 = 11;
int ledpin5 = 13;
int whitepin = 2;
const int fan = 7;
int light1 = 6;
int light2 = 5;
int light3 = 4;
int light4 = 3;
int fanstate = low; // ledstate used set led
long previousmillis = 0;
long interval = 5000;
int ledpin1state = low; // ledstate used set led
long previousmillis1 = 10;
long interval1 = 60;
int ledpin2state = low; // ledstate used set led
long previousmillis2 = 20;
long interval2 = 60;
int ledpin3state = low; // ledstate used set led
long previousmillis3 = 30;
long interval3 = 80;
int ledpin4state = low; // ledstate used set led
long previousmillis4 = 10;
long interval4 = 80;// led connected digital pin 13
void setup() {
serial.begin(31250);
pinmode(ledpin1, output);
pinmode(ledpin2, output);
pinmode(ledpin3, output);
pinmode(ledpin4, output);
pinmode(ledpin5, output);
pinmode(fan, output);
pinmode(light1, output);
pinmode(light2, output);
pinmode(light4, output);
pinmode(light3, output);
pinmode(whitepin, output); // sets digital pin output
}
void loop() {
// establish variables duration of ping,
// , distance result in inches , centimeters:
long duration, inches, cm;
// ping))) triggered high pulse of 2 or more microseconds.
// give short low pulse beforehand ensure clean high pulse:
pinmode(pingpin, output);
digitalwrite(pingpin, low);
delaymicroseconds(2);
digitalwrite(pingpin, high);
delaymicroseconds(5);
digitalwrite(pingpin, low);
// same pin used read signal ping))): high
// pulse duration time (in microseconds) sending
// of ping reception of echo off of object.
pinmode(pingpin, input);
duration = pulsein(pingpin, high);
// convert time distance
inches = microsecondstoinches(duration);
cm = microsecondstocentimeters(duration);
/* writing out values serial port
* -------------------------------------------------------------------
*/
// append echo pulse time ultrasoundvalue
if((inches >= 15) && (inches < 20)){
midiout(0x90, 85, 127);
digitalwrite(light3, high);
delay(1000);
digitalwrite(light3, low);
digitalwrite(light4, high);
delay(3000);
digitalwrite(light4, low);
}
else{
digitalwrite(light3, low);
digitalwrite(light4, low);
}
if((inches >= 60) && (inches < 66)){
midiout(0x90, 85, 127);
digitalwrite(light2, high);
delay(1000);
digitalwrite(light2, low);
}
else{
digitalwrite(light2, low);
}
if((inches >= 93) && (inches < 128)){
midiout(0x90, 85, 127);
digitalwrite(light1, high);
delay(1000);
digitalwrite(light1, low);
}
else{
digitalwrite(light1, low);
}
// wait second;
if (millis() - previousmillis > interval) {
// save last time blinked led
previousmillis = millis();
// if led off turn on , vice-versa:
if (fanstate == low)
fanstate = high;
else
fanstate = low;
// set led ledstate of variable:
digitalwrite(fan, fanstate);
}
if (millis() - previousmillis1 > interval1) {
// save last time blinked led
previousmillis1 = millis();
// if led off turn on , vice-versa:
if (ledpin1state == low)
ledpin1state = high;
else
ledpin1state = low;
// set led ledstate of variable:
digitalwrite(ledpin1, ledpin1state);
}
if (millis() - previousmillis2 - 20 > interval2) {
// save last time blinked led
previousmillis2 = millis();
// if led off turn on , vice-versa:
if (ledpin2state == low)
ledpin2state = high;
else
ledpin2state = low;
// set led ledstate of variable:
digitalwrite(ledpin2, ledpin2state);
}
if (millis() - previousmillis3 - 30 > interval3) {
// save last time blinked led
previousmillis3 = millis();
// if led off turn on , vice-versa:
if (ledpin3state == low)
ledpin3state = high;
else
ledpin3state = low;
// set led ledstate of variable:
digitalwrite(ledpin3, ledpin3state);
}
if (millis() - previousmillis4 - 10 > interval4) {
// save last time blinked led
previousmillis4 = millis();
// if led off turn on , vice-versa:
if (ledpin4state == low)
ledpin4state = high;
else
ledpin4state = low;
// set led ledstate of variable:
digitalwrite(ledpin4, ledpin4state);
}
/* begin edited code */
void midiout(char command, char value1, char value2) {
serial.print(command, byte);
serial.print(value1, byte);
serial.print(value2, byte);}
/* end edited code */
/* lite led if value passed echo pulse
* -------------------------------------------------------------------
*/
/* delay of program
* -------------------------------------------------------------------
*/
delay(delay_time);
}
long microsecondstoinches(long microseconds)
{
// according parallax's datasheet ping))), there are
// 73.746 microseconds per inch (i.e. sound travels @ 1130 feet per
// second). this gives distance travelled ping, outbound
// , return, divide 2 distance of obstacle.
// see: http://www.parallax.com/dl/docs/prod/acc/28015-ping-v1.3.pdf
return microseconds / 74 / 2;
}
long microsecondstocentimeters(long microseconds)
{
// speed of sound 340 m/s or 29 microseconds per centimeter.
// ping travels out , back, find distance of the
// object take half of distance travelled.
return microseconds / 29 / 2;
}
and here example of same midiout method working on code:
code: [select]
/*
* optical tachometer
*
* uses ir led , ir phototransistor implement optical tachometer.
* ir led connected pin 13 , ran continually. status led connected
* pin 12. pin 2 (interrupt 0) connected across ir detector.
*
*
*/
//#define debug
int ledpin = 13; // ir led connected digital pin 13
int statuspin = 12; // led connected digital pin 12
int lightpin1 = 6;
int lightpin2 = 9;
int lightpin3 = 10;
int lightpin4 = 11;
int brightness = 0;
int delay_time = 40; // delay amount each write cycle.
int notedown = low;
byte midi_channel = 0;
byte cc_number = 0;
byte incomingbyte;
byte button;
byte note;
byte printing_byte = 0;
int value = 0;
int midi_pitch = 0;
int mappedrpm = 0;
int state=0;
#ifdef debug
const int debug_rate = 9600; // serial debugging communicates @ 9600 baud
const int serial_port_rate = debug_rate;
#else
const int midi_baud_rate = 31250; // midi communicates @ 31250 baud
const int serial_port_rate = midi_baud_rate;
#endif
volatile byte rpmcount;
volatile int status;
unsigned int rpm;
unsigned long timeold;
// flag switching stuff
boolean top_speed_reached = false;
int on_threshold = 120;
int off_threshold = 90;
void rpm_fun()
{
//each rotation, interrupt function run twice, take consideration
//calculating rpm
//update count
rpmcount++;
//toggle status led
if (status == low) {
status = high;
}
else {
status = low;
}
digitalwrite(statuspin, status);
}
void setup()
{
state = 0;
serial.begin(serial_port_rate);
//interrupt 0 digital pin 2, ir detector connected
//triggers on falling (change high low)
attachinterrupt(0, rpm_fun, falling);
//turn on ir led
pinmode(ledpin, output);
digitalwrite(ledpin, high);
//use statuspin flash along interrupts
pinmode(statuspin, output);
rpmcount = 0;
rpm = 0;
timeold = 0;
status = low;
}
void loop()
{
//update rpm every second
delay(800);
//don't process interrupts during calculations
detachinterrupt(0);
//note 60*1000/(millis() - timeold)*rpmcount if interrupt
//happened once per revolution instead of twice. other multiples used
//for multi-bladed propellers or fans
rpm = 3*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
attachinterrupt(0, rpm_fun, falling);
brightness = map(rpm, 0, 50, 0, 255);
analogwrite(lightpin1, brightness);
printing_byte = map(rpm, 0, 50, 0, 127);{
midiout(0xb0, 7, printing_byte);
}
if (!top_speed_reached) {
if (printing_byte >= on_threshold) {
top_speed_reached = true;
midiout(0x90, 65, 127);
}
} else {
if (printing_byte <= off_threshold) {
top_speed_reached = false;
midiout(0x90, 45, 127);
}
}
}
//write out serial port
//restart interrupt processing
void midiout(char command, char value1, char value2) {
serial.print(command, byte);
serial.print(value1, byte);
serial.print(value2, byte);
}
Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > midi error syntax issues
arduino
Comments
Post a Comment