I am working on a project that uses a potentiometer and an ultrasonic sensor to create MIDI signals. This is my first time working with an arduino. I took a class in C++, but am teaching myself some C in order to program the arduino. So far I have been looking at code that has been written, I've been trying to understand it and mess with it so that my arduino works. The first code creates notes, but I have no control over what notes play or when they play. The first code:
#include <SoftwareSerial.h>
int val;
int AnalogValue = 0;
byte note = 0;
SoftwareSerial midiSerial(2, 3);
void setup ()
{
pinMode(Pingpin, OUTPUT);
Serial.begin(9600);
midiSerial.begin(31250);
}
void loop()
{
val = 0;
digitalWrite(Pingpin, LOW);
delayMicroseconds(2);
digitalWrite(Pingpin, HIGH);
delayMicroseconds(5);
digitalWrite(Pingpin, LOW);
AnalogValue = analogRead(0);
note = AnalogValue/8;
pinMode(Pingpin, INPUT);
val = digitalRead(Pingpin);
while(val == LOW)
{
noteOn(val, note, 0x40);
}
while(val == HIGH)
{
noteOn(val, note, 0x40);
}
}
void noteOn(byte cmd, byte data1, byte data2)
{
midiSerial.write(cmd);
midiSerial.write(data1);
midiSerial.write(data2);
}
The second code makes more sense to me, but I get no notes to play. I am lost, and can't seem to get the second code to work. Second code:
#include <SoftwareSerial.h>
int val;
int timecount;
int AnalogValue;
int ultrasoundValue;
const int Pingpin = 8;
byte note = 0;
SoftwareSerial midiSerial(2, 3);
void setup ()
{
pinMode(Pingpin, OUTPUT);
Serial.begin(9600);
midiSerial.begin(31250);
}
void loop()
{
AnalogValue = analogRead(0);
note = AnalogValue/8;
Serial.print(note,HEX);
Serial.print("\t");
timecount = 0;
val = 0;
digitalWrite(Pingpin, LOW);
delayMicroseconds(2);
digitalWrite(Pingpin, HIGH);
delayMicroseconds(5);
digitalWrite(Pingpin, LOW);
pinMode(Pingpin, INPUT);
val = digitalRead(Pingpin);
while(val == LOW)
{
val = digitalRead(Pingpin);
}
while(val == HIGH)
{
val = digitalRead(Pingpin);
timecount++;
}
ultrasoundValue = timecount;
ultrasoundValue = ultrasoundValue - 14;
ultrasoundValue = ultrasoundValue / 5;
Serial.print(ultrasoundValue);
if(ultrasoundValue > 127)
{
}
else
{
noteOn(ultrasoundValue, note, 0x40);
}
}
void noteOn(byte cmd, byte data1, byte data2)
{
midiSerial.write(cmd);
midiSerial.write(data1);
midiSerial.write(data2);
}