wildbill:
That'll get you 15. I assume you want 1523. In which case, use this in your snippet:int x = int(temp*100.0);
Thats what I ended up with was do a small amout of math to move the decimal point then use int() to cut out the remainder. Nice thanks.
/*
TMP36 - temperature sensor
For more details on this circuit: http://tinyurl.com/c89tvd
I used a 10k ohm resistor on Vout to-> ground to protect the arduino pin
Serial 7 Segment Display Datasheet
https://github.com/sparkfun/Serial7SegmentDisplay/wiki/Serial-7-Segment-Display-Datasheet
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // nuelectronics lcd-shield v1.1
int numCols = 16;
int numRows = 2;
/*
/* This is a simple program to test the 4 diget Sparkfun 7 segment serial LED display */
#include <SoftwareSerial.h>
#define rxPin 255 // 255 because we don't need a receive pin
// Connect the Arduino pin 3 to the rx pin on the 7 segment display
#define txPin 3
// set up a new serial port
SoftwareSerial LEDserial=SoftwareSerial(rxPin, txPin);
#define ARY_LEN(a) (sizeof(a)/sizeof(a[0]))
/* Pin 3 for display- delay only,
Pin 8 for CoolDown- delay only,
Pin 5 PWM Peltier- full function */
const int PWM_pin[] = { 3, 8, 5 }; // Pin numbers used
const unsigned long Fade_delayMs[] = {1000, 1000, 80 };
const int Fade_start[] = { 175, 175, 250 }; // This can be 0 to 254
const int Fade_end[] = { 255, 255, 255 }; // this can be PWMstart+1..255
const int Fade_step[] = { 1, 1, 1 };
unsigned int Fade_direction[] = { +1, +1, +1 }; // Fade direction for each pin
int Fade_value[] = { 0, 0, 0 };
unsigned long Fade_prevMillis[] = { 0, 0, 0 };
unsigned long currentMillis;
/* TMP36 temperature sensor on Analog-in A0 & A1 Pin's */
int temperaturePin = 0; // Hot sensor
int temperaturePin2 = 1; // Cold sensor
/* Temp Logic veriables */
int nexttempPin = 0;
float temperature = 0;
float ConvertTemp = 0;
int StartCooldown = 0;
int tempSet;
/* Push Button values */
const int buttonPin = 2; // the number of the pushbutton pin
unsigned int currentTemp = 2; // controles, 1 = celcius, 2 = farenheit
int buttonState = 0; // variable for reading the pushbutton status
void CheckTemp() {
temperature = getVoltage(temperaturePin);
temperature = (((temperature - .5) * 100)*1.8) + 32;
}
/* Over temperature protection */
void CoolDown() {
CheckTemp();
if (temperature <= 80) StartCooldown = 0;
}
void pwmOut(int fadeNum, int value) {
CheckTemp();
if (temperature >= 100) {
analogWrite(5, 0);
StartCooldown = 1;
}
else if (temperature >= 95) {
analogWrite(5, 0);
}
else if (temperature <= 95){
analogWrite(PWM_pin[fadeNum], value);
}
}
/* to run a simulation
void lcdOut(int fadeNum, int value) {
int col, row;
if (fadeNum <= 3) {
row = 0;
col = fadeNum * 4;
}
else {
row = 1;
col = (fadeNum - 4) * 4;
}
lcd.setCursor(col, row);
lcd.print(" ");
lcd.setCursor(col, row);
lcd.print(value, DEC);
}
*/
/* 4 diget, 7-segment serial display, SparkFun
Set as PWM_pin 3 to only use a 1000ms delay and not fading part of the method */
void LEDdisplay() {
LEDserial.print('v'); // this is the reset display command
if (nexttempPin == temperaturePin) nexttempPin = temperaturePin2;
else nexttempPin = temperaturePin;
temperature = getVoltage(nexttempPin); //getting the voltage reading from the temperature sensor
if (currentTemp == 2) ConvertTemp = (((temperature - .5) * 100)*1.8) + 32;
else ConvertTemp = (temperature - .5) * 100;
LEDserial.print('w'); // send the command char for decimal control
if (ConvertTemp >= 100 && ConvertTemp <= 999
|| ConvertTemp <= -10 && ConvertTemp >= -99.9) {
SetTemp(1, ConvertTemp);
if (nexttempPin == temperaturePin2) LEDserial.write(0b00100100); // turn on apostrophe for temp 2
else if (nexttempPin == temperaturePin) LEDserial.write(0b00000100);
}
else if (ConvertTemp >= 1000 && ConvertTemp <= 9999
|| ConvertTemp <= -100 && ConvertTemp >= -999) {
SetTemp(3, ConvertTemp);
if (nexttempPin == temperaturePin2) LEDserial.write(0b00100000);
}
else if (ConvertTemp < -999 || ConvertTemp > 9999) {
tempSet = 9999;
}
else {
SetTemp(2, ConvertTemp);
if (nexttempPin == temperaturePin2) LEDserial.write(0b00100010);
else if (nexttempPin == temperaturePin) LEDserial.write(0x02);
}
LEDserial.print(tempSet);
}
void SetTemp(int value, float temp) {
if (value == 1) { // 999.9 or -99.9 numbers
temp = temp * 10;
}
else if (value == 2) {// 99.99 or -9.99 numbers
temp = temp * 100;
}
// 9999 or -999 numbers too
tempSet = int(temp);
}
/* converting from a 0 to 1023 digital range
to 0 to 5 volts (each 1 reading equals ~ 5 millivolts */
float getVoltage(int pin) {
return (analogRead(pin) * .004882814);
}
void Fade_outFunc(int fadeNum, int value) {
// run one or both output functions...
//lcdOut(fadeNum, value);
if (StartCooldown == 0 && PWM_pin[fadeNum] == 5) pwmOut(fadeNum, value);
if (StartCooldown == 1 && PWM_pin[fadeNum] == 8) CoolDown();
if (PWM_pin[fadeNum] == 3) LEDdisplay();
}
void setup() {
//lcd.begin(numCols, numRows);
//lcd.clear();
// 4 diget, 7-segment serial display, SparkFun
pinMode(txPin, OUTPUT);
LEDserial.begin(9600);
for (unsigned int i = 0; i < ARY_LEN(PWM_pin); i++){
Fade_value[i] = Fade_start[i];
Fade_outFunc(i, Fade_value[i]);
}
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void Fade_run(int fadeNum) {
currentMillis = millis();
if(currentMillis - Fade_prevMillis[fadeNum] > Fade_delayMs[fadeNum]) {
Fade_prevMillis[fadeNum] = currentMillis;
Fade_value[fadeNum] += Fade_direction[fadeNum] * Fade_step[fadeNum];
if (Fade_value[fadeNum] >= Fade_end[fadeNum]) {
Fade_value[fadeNum] = Fade_end[fadeNum];
Fade_direction[fadeNum] = -Fade_direction[fadeNum];
}
else if (Fade_value[fadeNum] <= Fade_start[fadeNum]) {
Fade_value[fadeNum] = Fade_start[fadeNum];
Fade_direction[fadeNum] = -Fade_direction[fadeNum];
}
Fade_outFunc(fadeNum, Fade_value[fadeNum]);
}
}
unsigned int i = 0;
void loop() {
/* Push Button */
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH && currentTemp == 2) currentTemp = 1;
else if (buttonState == HIGH && currentTemp == 1) currentTemp = 2;
/* Fade Loop */
for (i = 0; i < ARY_LEN(PWM_pin); i++) Fade_run(i);
}