Mercurial > public > ostc4
comparison Discovery/Src/unit.c @ 38:5f11787b4f42
include in ostc4 repository
author | heinrichsweikamp |
---|---|
date | Sat, 28 Apr 2018 11:52:34 +0200 |
parents | |
children | 1c95f811967c |
comparison
equal
deleted
inserted
replaced
37:ccc45c0e1ea2 | 38:5f11787b4f42 |
---|---|
1 /////////////////////////////////////////////////////////////////////////////// | |
2 /// -*- coding: UTF-8 -*- | |
3 /// | |
4 /// \file Discovery/Src/unit.c | |
5 /// \brief input to meter/celsius or feet/farenheit | |
6 /// \author heinrichs weikamp gmbh | |
7 /// \date 24-Feb-2015 | |
8 /// | |
9 /// \details | |
10 /// | |
11 /// $Id$ | |
12 /////////////////////////////////////////////////////////////////////////////// | |
13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh | |
14 /// | |
15 /// This program is free software: you can redistribute it and/or modify | |
16 /// it under the terms of the GNU General Public License as published by | |
17 /// the Free Software Foundation, either version 3 of the License, or | |
18 /// (at your option) any later version. | |
19 /// | |
20 /// This program is distributed in the hope that it will be useful, | |
21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of | |
22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
23 /// GNU General Public License for more details. | |
24 /// | |
25 /// You should have received a copy of the GNU General Public License | |
26 /// along with this program. If not, see <http://www.gnu.org/licenses/>. | |
27 ////////////////////////////////////////////////////////////////////////////// | |
28 | |
29 /* Includes ------------------------------------------------------------------*/ | |
30 #include "unit.h" | |
31 #include "settings.h" | |
32 | |
33 /* Exported variables --------------------------------------------------------*/ | |
34 | |
35 /* Private types -------------------------------------------------------------*/ | |
36 uint8_t test; | |
37 | |
38 /* Private variables ---------------------------------------------------------*/ | |
39 | |
40 /* Private variables with external access via get_xxx() function -------------*/ | |
41 | |
42 /* Private function prototypes -----------------------------------------------*/ | |
43 | |
44 /* Announced function prototypes -----------------------------------------------*/ | |
45 | |
46 /* Exported functions --------------------------------------------------------*/ | |
47 | |
48 char unit_depth_char1_T105(void) | |
49 { | |
50 if(settingsGetPointer()->nonMetricalSystem) | |
51 return '\''; | |
52 else | |
53 return 'm'; | |
54 } | |
55 | |
56 char unit_depth_char2_T105(void) | |
57 { | |
58 if(settingsGetPointer()->nonMetricalSystem) | |
59 return ' '; | |
60 else | |
61 return '\004'; // 004 is nop | |
62 } | |
63 | |
64 char unit_depth_char1(void) | |
65 { | |
66 if(settingsGetPointer()->nonMetricalSystem) | |
67 return 'f'; | |
68 else | |
69 return 'm'; | |
70 } | |
71 | |
72 char unit_depth_char2(void) | |
73 { | |
74 if(settingsGetPointer()->nonMetricalSystem) | |
75 return 't'; | |
76 else | |
77 return '\004'; // 004 is nop | |
78 } | |
79 | |
80 float unit_depth_float(float input_meter) | |
81 { | |
82 if(settingsGetPointer()->nonMetricalSystem == 0) | |
83 return input_meter; | |
84 else | |
85 { | |
86 return 3.2808f * input_meter; | |
87 } | |
88 } | |
89 | |
90 uint16_t unit_depth_integer(uint16_t input_meter) | |
91 { | |
92 if(settingsGetPointer()->nonMetricalSystem == 0) | |
93 return input_meter; | |
94 else | |
95 { | |
96 return (input_meter * 10) / 3; | |
97 } | |
98 } | |
99 | |
100 float unit_temperature_float(float input_celsius) | |
101 { | |
102 if(settingsGetPointer()->nonMetricalSystem == 0) | |
103 return input_celsius; | |
104 else | |
105 { | |
106 return input_celsius * (9.0f/5.0f) + 32; | |
107 } | |
108 } | |
109 | |
110 uint16_t unit_speed_integer(uint16_t input_meterPerMinute) | |
111 { | |
112 if(settingsGetPointer()->nonMetricalSystem == 0) | |
113 return input_meterPerMinute; | |
114 else | |
115 { | |
116 return (input_meterPerMinute * 10) / 3; | |
117 } | |
118 } | |
119 | |
120 /* Quelle: https://de.wikipedia.org/wiki/Luftdruck */ | |
121 /* | |
122 const float luftdruckStartMinus300[15] = | |
123 { | |
124 1.0530f, | |
125 1.0396f, | |
126 1.0263f, | |
127 1.01325f, // 0 m | |
128 1.0003f, | |
129 0.9876f, | |
130 0.9750f, | |
131 0.9625f, | |
132 0.9503f, | |
133 0.9381f, | |
134 0.9262f, | |
135 0.9144f, | |
136 0.9027f, | |
137 0.8912f, // 1000 m | |
138 0.8358f | |
139 }; | |
140 */ | |
141 | |
142 const int luftdruckStartMinus300[15] = | |
143 { | |
144 1053, | |
145 1040, | |
146 1026, | |
147 1013, // 0 m | |
148 1000, | |
149 988, | |
150 975, | |
151 962, | |
152 950, | |
153 938, | |
154 926, | |
155 914, | |
156 903, | |
157 891, // 1000 m | |
158 836 | |
159 }; | |
160 | |
161 | |
162 int unit_SeaLevelRelation_integer(int input_atmospheric_mbar) | |
163 { | |
164 int i = 0; | |
165 int distance1, distance2; | |
166 for(i=0;i<15;i++) | |
167 { | |
168 if(input_atmospheric_mbar >= luftdruckStartMinus300[i]) | |
169 break; | |
170 } | |
171 | |
172 if(i >= 14) | |
173 return 1500; | |
174 else if(i == 0) | |
175 return -300; | |
176 else | |
177 { | |
178 distance1 = input_atmospheric_mbar - luftdruckStartMinus300[i]; | |
179 distance2 = luftdruckStartMinus300[i-1] - input_atmospheric_mbar; | |
180 if(distance2 < distance1) | |
181 i -= 1; | |
182 return (i*100) - 300; | |
183 } | |
184 } |