floats to ints for temperature reading


i have digital thermometer sparkfun: tmp102. used example code linked on product page values thing. have issue there. want take value given , print (strobe) them 4x7 segment display. issue getting float of unknown length 4 integers.

let's value read 70.68. need that:
a=7
b=0
c=7 (because rounded up)

or if value 101.56:
a=1
b=0
c=2 (because rounds up)

the purpose of fourth digit determine if third gets rounded. 3 digits printed display.

i've got:
code: [select]
//arduino 1.0+ only
//arduino 1.0+ only

//////////////////////////////////////////////////////////////////
//©2011 bildr
//released under mit license - please reuse change , share
//simple code tmp102, prints temperature via serial
//////////////////////////////////////////////////////////////////
// sda on analog pin 4, , scl on analog pin 5

#include <wire.h>
int tmp102address = 0x48;
const int numbers[] = {0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,0b01111010,0b11100000,0b11111110,0b11100110}; // 0-9
const int ser = 8;
const int load = 10;
const int sck = 9;
const int a1 = 2;
const int a2 = 3;
const int a3 = 4;
const int a4 = 5;

void setup(){
  wire.begin();
  pinmode(ser,output);
  pinmode(sck,output);
  pinmode(load,output);
  pinmode(a1,output);
  pinmode(a2,output);
  pinmode(a3,output);
  pinmode(a4,output);
  digitalwrite(load,0);
  shiftout(ser,sck,lsbfirst,0);
  digitalwrite(a1,1);
  digitalwrite(a2,1);
  digitalwrite(a3,1);
  digitalwrite(a4,1);
  digitalwrite(load,1);
}
int a;
int b;
int c;
int s;
void loop(){
  int dp;

  float celsius = gettemperature();
 
  float fahrenheit = (1.8 * celsius) + 32; 
 
//  delay(200); //just here slow down output. can remove this
 
int f=(int)(fahrenheit*10.0);
int g=f;
  if(g/1000 != 0){
    a=g/1000;
    b=(g/100)-(a*10);
    c=(g/10)-(((a*10)+b)*10);
    if((g-((a*100)+(b*10)+c)*10) > 4){
      c++;
    dp = 0;
    }
  }
  else{
    a=g/100;
    b=(g/100)-(a*10);
    c=g-(((a*10)+b)*10);
  }
 
  digitalwrite(load,0);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,1);
  shiftout(ser,sck,lsbfirst,0b10001110);
  digitalwrite(load,1);
  digitalwrite(a1,0);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,1);
  delay(5);
 
  digitalwrite(load,0);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,1);
  shiftout(ser,sck,lsbfirst,numbers[a]);
  digitalwrite(load,1);
  digitalwrite(a1,1);digitalwrite(a2,0);digitalwrite(a3,1);digitalwrite(a4,1);
  delay(5);
 
  if(dp==0){
    s = numbers[b];
  }
  else{
    s = numbers[b]+1;
  }
 
  digitalwrite(load,0);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,1);
  shiftout(ser,sck,lsbfirst,s); 
  digitalwrite(load,1);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,0);digitalwrite(a4,1);
  delay(5);
 
  digitalwrite(load,0);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,1);
  shiftout(ser,sck,lsbfirst,numbers[c]);
  digitalwrite(load,1);
  digitalwrite(a1,1);digitalwrite(a2,1);digitalwrite(a3,1);digitalwrite(a4,0);
//  delay(10);
}

float gettemperature(){
  wire.requestfrom(tmp102address,2);

  byte msb = wire.read();
  byte lsb = wire.read();

  //it's 12bit int, using two's compliment negative
  int temperaturesum = ((msb << 8) | lsb) >> 4;

  float celsius = temperaturesum*0.0625;
  return celsius;
}

why not take moment explain program does, , how differs want do.


Arduino Forum > Using Arduino > Project Guidance > floats to ints for temperature reading


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support