Temp_Schmitt-Trigger.cpp


1
#define TABLE_SIZE 5
2
3
int kennlinie[TABLE_SIZE][3] = {
4
// Lüfterleistung % , Schaltschwelle hoch, Schaltschwelle runter
5
  {  0, 20, 0 },
6
  { 20, 25, 15},
7
  { 40, 30, 20},
8
  { 50, 35, 25},
9
  {100,  0, 30},
10
};
11
12
int get_temperature(void) {
13
14
  int temp=0;
15
  // temperatur auslesen und rückliefern
16
  return temp;
17
};
18
19
void set_fan(int power) {
20
  // Lüfter einstellen, PWM und so
21
}
22
23
int main(void) {
24
25
int fan_index=0;
26
int  temperature;
27
28
  while (1) {
29
    temperature = get_temperature();
30
    
31
    // Lüfter regeln
32
    if ((fan_index <=(TABLE_SIZE-1)) && temperature >= kennlinie[fan_index][1]) {  // zu warm, hochchalten
33
      set_fan(kennlinie[fan_index][0]);
34
      if(fan_index < TABLE_SIZE-1)  fan_index++;
35
    } else if((fan_index > 0) && temperature <= kennlinie[fan_index][2]) {    // zu kalt, runter schalten
36
    /*  Will man nur mir einer Keinnlinie von [x] [2] arbeiten kann man die else if anweisung auch volgendermassen ersetzen
37
    *   Allerdings hat man hier eine Rechnung die mehr Zeit erfordert als ein einfacher vergleich
38
    } else if((fan_index > 0) && temperature <= (kennlinie[fan_index][1] - Temp.Schaltschwelle)) { 
39
    */
40
      fan_index--;
41
      set_fan(kennlinie[fan_index][0]);
42
    }
43
44
  }
45
46
}