//Original source by Brian Bagnall (Core Lego Mindstroms).
// i am modified and add public static void main but not work for reading angle.
//Please i need suggesst . Many Thank.
 
 import josx.platform.rcx.*;
 
 class CompassSensor implements SensorConstants {
  
  private Sensor s1;
  private Sensor s2;
  
  public int s1_min = 684;
  public int s2_min = 665;
  
  public int s1_max = 932;
  public int s2_max = 973;
  
  private float midth; 
  
 
  private float a;
  private float b;
  
 
    //this modified by me, but why don't work. Please give me sollution to give atomatic angle ?.
  public static void main(String [] args) {
   CompassSensor cs = new CompassSensor(Sensor.S1, Sensor.S2);
                while (true)
                {
                 cs.getAngle();
                }
  }
  //--------------------------------------------------------------------------
  
  public CompassSensor(Sensor sensor1, Sensor sensor2) {
   sensor1.setTypeAndMode(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW);
   sensor1.activate();
   s1 = sensor1;
   
   sensor2.setTypeAndMode(SENSOR_TYPE_LIGHT, SENSOR_MODE_RAW);
   sensor2.activate();
   s2 = sensor2;
   
      
  }
  
 
  public void initialize() {
   midth = (s1_max + s1_min) / 2;  
   
   a = (s1_max - s1_min)/(s2_max - s2_min);
   b = s2_max - (a * s1_max);
  }
  
  
  public int getAngle() {
   int s1Raw = s1.readValue();
   int s2Raw = s2.readValue();
   
  
  
   float cosine = s1Raw - midth;
   float sine = s2Raw - midth;
   
   
  
   float angle = (float)Math.atan2(sine, cosine);
   angle = (float)Math.toDegrees(angle);
   if(angle < 0)
    angle += 360;
   return (int)angle;
  }  
 }


Talk is cheap. Use Yahoo! Messenger to make PC-to-Phone calls. Great rates starting at 1¢/min.

Reply via email to