//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 {
class CompassSensor implements SensorConstants {
private Sensor s1;
private Sensor s2;
public int s1_min = 684;
public int s2_min = 665;
public int s2_min = 665;
public int s1_max = 932;
public int s2_max = 973;
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;
}
}
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.
