RCX-Temperature-Sensor with NXT

Discussion specific to NXT-G, NXC, NBC, RobotC, Lejos, and more.
Post Reply
lebostein
Posts: 4
Joined: 26 Jun 2011, 08:34

RCX-Temperature-Sensor with NXT

Post by lebostein »

Hi,

I have a problem to get values in Celsius. Old RCX-Temperature-Sensor is connected with LEGO adapter cable on slot 1.
What command should I use for ???. I have tried SensorValue(S1) and SensorTemperature(S1) don't work...

Code: Select all

task main()
{
  SetSensor(S1, SENSOR_CELSIUS);
  while(true)
  {
    temp = ???;
    NumOut(1, 1, temp);
  }
}
mattallen37
Posts: 1818
Joined: 02 Oct 2010, 02:19
Location: Michigan USA
Contact:

Re: RCX-Temperature-Sensor with NXT

Post by mattallen37 »

I don't know the "best" way, but I would use SENSOR_1. You also need to declare the variable. I assume you want a 16-bit signed value, so you should also add "int temp;". I would also not display the number 1 pixel from bottom and left. I would use LCD_LINE1, 0. You also need to clear the screen from previous values. I would use ClearScreen(), and to slow it down so it doesn't flicker a lot I would add a 50ms wait. I would make the program like this:

Code: Select all

int temp;
task main()
{
  SetSensor(S1, SENSOR_CELSIUS);
  while(true)
  {
    temp = SENSOR_1;
    ClearScreen();
    NumOut(LCD_LINE1, 0, temp);
    Wait(50);
  }
}
And if you only want to display the temperature, you don't even need variable temp.

Here is how I would do it simply:

Code: Select all

task main()
{
  SetSensor(S1, SENSOR_CELSIUS);
  while(true)
  {
    ClearScreen();
    NumOut(LCD_LINE1, 0, SENSOR_1);
    Wait(50);
  }
}
Or with a more fancy appearance:

Code: Select all

task main()
{
  SetSensor(S1, SENSOR_CELSIUS);
  while(true)
  {    
    string temp = NumToStr(SENSOR_1) + " C";
    ClearScreen();
    TextOut(LCD_LINE1, 0, temp);
    Wait(50);
  }
}
Note however, that I didn't test run any of these programs.
Matt
http://mattallen37.wordpress.com/

I'm all for gun control... that's why I use both hands when shooting ;)
lebostein
Posts: 4
Joined: 26 Jun 2011, 08:34

Re: RCX-Temperature-Sensor with NXT

Post by lebostein »

Code: Select all

unsigned int val = SensorValue(S1);
unsigned int val = Sensor(S1);
unsigned int val = SENSOR_1;
It seems that all 3 options get the same sensor value....

But it don't work correctly!

I get room temperatures near 240 °C!
I have tested it with old RCX and NQC too, temperature sensor works correct.
Is this a bug of NXC or Firmware?
Last edited by lebostein on 02 Jul 2011, 07:48, edited 1 time in total.
afanofosc
Site Admin
Posts: 1256
Joined: 26 Sep 2010, 19:36
Location: Nashville, TN
Contact:

Re: RCX-Temperature-Sensor with NXT

Post by afanofosc »

I would try the standard firmware and the on-board view system to see what you get. If that works with both the standard firmware and the enhanced NBC/NXC firmware then the next thing I would try is a program written in NXT-G using the legacy temperature block and a display block in a loop to display the temperature in C on your screen. If that works then I would send me the RXE from the NXT-G program and the RXE from your NXC program and let me figure out what, if anything, is different.

John Hansen
Multi-platform LEGO MINDSTORMS programming
http://bricxcc.sourceforge.net/
lebostein
Posts: 4
Joined: 26 Jun 2011, 08:34

Re: RCX-Temperature-Sensor with NXT

Post by lebostein »

Ok, I have tested:

* LEGO FW 1.29 + NXC
* LEGO FW 1.29 + NXT-G
* Bricx FW 1.31 + NXC
* Bricx FW 1.31 + NXT-G

the same result in every case: 239

It is possible, that a mistake exist in all documentations/manuals from LEGO and NXC?
It is possible, that I get the temperature in tenth of a degree, 239 = 23,9 °C?

PS: When I put the sensor in my mouth ( :lol: ), I get 362 = 36,2 °C ... sounds plausible
mattallen37
Posts: 1818
Joined: 02 Oct 2010, 02:19
Location: Michigan USA
Contact:

Re: RCX-Temperature-Sensor with NXT

Post by mattallen37 »

Indeed, it sounds most likely. Unfortunately I don't have an RCX temp sensor, but that seems right.
Matt
http://mattallen37.wordpress.com/

I'm all for gun control... that's why I use both hands when shooting ;)
mattallen37
Posts: 1818
Joined: 02 Oct 2010, 02:19
Location: Michigan USA
Contact:

Re: RCX-Temperature-Sensor with NXT

Post by mattallen37 »

I just ran a test (with a non-temp, but still analog sensor), and I can get results from -20 to 70 (once divided by 10). It looks like you were right.

Here is a program to display the temperature:

Code: Select all

string S_temp;
float F_temp;
task main()
{
  SetSensor(S1, SENSOR_CELSIUS);
  while(true)
  {
    F_temp = SENSOR_1/10;
    sprintf(S_temp, "%.1f", F_temp);
    S_temp += " C";
    ClearScreen();
    TextOut(0, LCD_LINE1, S_temp);
    Wait(50);
  }
}
Matt
http://mattallen37.wordpress.com/

I'm all for gun control... that's why I use both hands when shooting ;)
afanofosc
Site Admin
Posts: 1256
Joined: 26 Sep 2010, 19:36
Location: Nashville, TN
Contact:

Re: RCX-Temperature-Sensor with NXT

Post by afanofosc »

I noticed that the firmware now uses the NXT digital temperature sensor for its on-board view menu rather than the old RCX temperature sensor. Sorry for the mis-direction. It also divides the result by 10 to get a floating point number in 10ths of degrees.

I have also reviewed the RCX documentation and it supports the notion that the value returned by the analog temperature sensor is scaled by 10. The range for celsius is documented to be -200 to 700 and the range for fahrenheit is -40 to 1580. These are clearly scaled values. The RCX2 LASM byte codes PDF also says "When specifying temperature thresholds the threshold must be given as temperature multiplied by 10."

John Hansen
Multi-platform LEGO MINDSTORMS programming
http://bricxcc.sourceforge.net/
Post Reply

Who is online

Users browsing this forum: No registered users and 50 guests