to determine the coordinates of a 2-d mobile i use the time-of-flight of ultrasonic pulses. the emitter is on the mobile and the two receivers are fixed. the following code works fine and send serially the data to processing:
[code]
// two variables for each input pin to read and store the values
int digitalInput_1 = 2;
int digitalInput_2 = 3;
//ultrasonic pulse is sent when ePin is HIGH
int ePin = 8;
int value_1 = 0;
int value_2 = 0;
// an identifier for each value
int id_1 = 'A';
int id_2 = 'B';
int t, tet, tou;
int ta;
int tb;
void setup() {
// declaration of pins modes
pinMode(digitalInput_1, INPUT);
pinMode(digitalInput_2, INPUT);
pinMode(ePin, OUTPUT);
// begin sending over serial port
beginSerial(9600);
}
void loop()
{
t = 0;
tou = 0;
tet = 0;
ta = 0;
tb = 0;
// read the values of the digital pins and store them in variables
value_1 = digitalRead(digitalInput_1);
value_2 = digitalRead(digitalInput_2);
digitalWrite(ePin, HIGH);
t = millis();
while(value_1 == LOW){
value_1 = digitalRead(digitalInput_1);
ta = millis() - t;
}
digitalWrite(ePin, LOW);
delay(100);
digitalWrite(ePin, HIGH);
t = millis();
while(value_2 == LOW){
value_2 = digitalRead(digitalInput_2);
tb = millis() - t;
}
digitalWrite(ePin, LOW);
// print out the variables preceeded by their IDs and followed by a carriage return
// (that allows us to know where the values end and when to expect the id)
printByte(id_1);
printInteger(ta); printByte(10);
printByte(id_2);
printInteger(tb); printByte(10);
digitalWrite(ePin, LOW);
delay(100);
}
[/code]
to achieve this i have to synchronize emitter and receivers, i.e., to link (through a wire or Xbee) ePin and the ultrasonic transducer.
NOW i want to get rid of this link!
i use three receivers instead of 2 and deduce the mobile position from the time-of-flight differences t12, t13 and t23:
int digitalInput_1 = 2;
int digitalInput_2 = 3;
int digitalInput_3 = 4;
int value_1 = 0;
int value_2 = 0;
int value_3 = 0;
// an identifier for each value
int id_1 = 'A';
int id_2 = 'B';
int id_3 = 'C';
int t,ta,tb,tc,t12,t13,t23;
void setup() {
// declaration of pins modes
pinMode(digitalInput_1, INPUT);
pinMode(digitalInput_2, INPUT);
pinMode(digitalInput_3, INPUT);
// begin sending over serial port
beginSerial(9600);
}
void loop()
{
t = 0, ta = 0, tb = 0, tc = 0, t12 = 0, t13 = 0, t23 = 0;
// read the values od the digital pins and store them in variables
value_1 = digitalRead(digitalInput_1);
value_2 = digitalRead(digitalInput_2);
value_3 = digitalRead(digitalInput_3);
t = millis();
if(value_1 == HIGH && value_2 == LOW && value_3 == LOW){
while(value_1 == HIGH && value_2 == LOW && value_3 == LOW){
value_1 = digitalRead(digitalInput_1);
value_2 = digitalRead(digitalInput_2);
value_3 = digitalRead(digitalInput_3);
ta = millis() - t;
}
if(value_2 == LOW){
t13 = ta;
}
if(value_3 == LOW){
t12 = ta;
}
}
else if(value_2 == HIGH && value_1 == LOW && value_3 == LOW){
while(value_2 == HIGH && value_1 == LOW && value_3 == LOW){
value_1 = digitalRead(digitalInput_1);
value_2 = digitalRead(digitalInput_2);
value_3 = digitalRead(digitalInput_3);
tb = millis() - t;
}
if(value_1 == LOW){
t23 = tb;
}
if(value_3 == LOW){
t12 = -tb;
}
}
else if(value_3 == HIGH && value_2 == LOW && value_1 == LOW){
while(value_3 == HIGH && value_2 == LOW && value_1 == LOW){
value_1 = digitalRead(digitalInput_1);
value_2 = digitalRead(digitalInput_2);
value_3 = digitalRead(digitalInput_3);
tc = millis() - t;
}
if(value_2 == LOW){
t13 = -tc;
}
if(value_1 == LOW){
t23 = -tc;
}
}
// print out the variables preceeded by their IDs and followed by a carriage return
// (that allows us to know where the values end and when to expect the id)
printByte(id_1);
printInteger(t12); printByte(10);
printByte(id_2);
printInteger(t13); printByte(10);
printByte(id_3);
printInteger(t23); printByte(10);
delay(100);
}
unfortunately this doesn't work, that is, i get no data sent into processing!
does anybody have a clue about what is wrong in my use of while{} embedded into if{} conditions?
thanks for your help!