Pages: [1]   Go Down
Author Topic: while  (Read 286 times)
0 Members and 1 Guest are viewing this topic.
Rochefort, France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 73
Arduino is a king
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
[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:
Code:
 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!
Logged

Pages: [1]   Go Up
Jump to: