summaryrefslogtreecommitdiff
path: root/TempCalc/src/main.c
blob: ff44ecaa88dd9b8ef20fec35b0ede90378d87eac (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <tice.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define EnterKey 5
#define maxline 22

double fToC(double fahr);
double cToF(double cel);
double fToK(double fahr);
double kToF(double kel);
double getInput(void);
void output(int operation);

int main(void)
{
	while(true) {
		os_ClrHome();

		printf("TempCalc\nSelect:\n1. Fahrenheit to Celsius\n2. Celsius to Fahrenheit\n3. Fahrenheit to Kelvin\n4. Kelvin to Fahrenheit\n5. Exit");
		uint16_t key = os_GetKey();

		if(key == 147)
			break;

		output(key);
		/* Waits for a key press */
		while (!os_GetCSC());
	}
	os_ClrHome();
	return 0;
}

void output(int operation)
{
	os_ClrHome();
	double value = 0.0;
	switch(operation) {
		case 143:
			printf("Fahrenheit to Celsius\n");
			value = fToC(getInput());
			break;
		case 144:
			printf("Celsius to Fahrenheit \n");
			value = cToF(getInput());
			break;
		case 145:
			printf("Fahrenheit to Kelvin\n");
			value = fToK(getInput());
			break;
		case 146:
			printf("Kelvin to Fahrenheit \n");
			value = kToF(getInput());
			break;
		default: printf("Invalid");
	}
	printf("\nOutput: %f", value);
}

double getInput(void)
{
	uint8_t key, i = 0;
	char number[maxline];
	char *eptr;
	double value = 0.0;

	printf("Input: ");
	while((key = os_GetKey()) != EnterKey) {
		if(key == 141 || key == 140)
			key--;
		number[i] = (key - 142) + '0';
		printf("%c", number[i++]);
	}
	number[i] = '\0';
	value = strtod(number, &eptr);
	return value;
}

double fToC(double fahr)
{
	double cel = 0;
	cel = (5.0 / 9.0) * (fahr - 32.0);
	return cel;
}

double fToK(double fahr)
{
	double kel = 0;
	kel = fToC(fahr) + 273;
	return kel;
}

double cToF(double cel)
{
	double fahr = 0;
	fahr = (cel * (9.0 / 5.0)) + 32.0;
	return fahr;
}

double kToF(double kel)
{
	double fahr = 0;
	fahr = cToF(kel - 273);
	return fahr;
}