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:
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
Post a Comment