This code works great for reading 5 sensors however I want to decrease the amount of time it takes to run through this subroutine by not trying to read a sensor if its not being used. My problem starts with the line "if sensor = 1 then" because it thinks I'm trying to compare the value stored in sensor which is not what I want it to do. I need it to compare the port associated with the number against a specific value. Any ideas on how to resolve this issue?
Code:read_sensors: for sensor = 0 to 4 temp_c = 0 temp_f = 0 temp_k = 0 dummy = 0 dq = 0 gosub ds_init gosub read_temp sign_c_array[sensor] = sign_c sign_f_array[sensor] = sign_f temp_c_array[sensor] = temp_c temp_f_array[sensor] = temp_f temp_k_array[sensor] = temp_k next sensor ds_init: low sensor ' Set the data pin low to initialize pauseus 500 ' Wait for more than 480us input sensor ' Make data pin port an input pauseus 100 ' Wait for more than 60us if sensor = 1 then ' Is there a DS18B20 detected debug cmd,line3,"Not Present" ' If not set flag indicating so SensorMissing = 1 return endif pauseus 400 ' Wait for end of presence pulse debug cmd,line3,"Present " ' Set flag indicating there is a SensorMissing = 0 ' sensor present return read_temp: if SensorMissing = 1 then ' If the sensor is not present load temp_c = 32767 ' these values in place of the temp_f = 62181 ' temperature indicating there is temp_k = 60082 ' a problem with the sensor sign_c = "+" sign_f = "+" return endif owout sensor,1,[$CC,$44] ' Send start temperature conversion ' command low portb.5 ' Turn on transistor between rail and ' data pin pause 750 ' Allow enough time to process Tconv high portb.5 ' Turn off transistor between rail and ' data pin owout sensor,1,[$CC,$BE] ' Send read scratch pad command owin sensor,0,[STR dq\9] ' Read all 9 bytes and store them in dq ' array raw_temp.Byte0 = dq[0] ' Isolate raw temperature from the rest raw_temp.Byte1 = dq[1] gosub get_crc ' Calculate the CRC of the data gosub convert_temp ' Convert raw data into real temps return




Bookmarks