Stefan Simbürger
/
Poti_Uebung
AnalogIn und Poti
main.cpp@0:58c507ca5e60, 2020-01-13 (annotated)
- Committer:
- Ursukar
- Date:
- Mon Jan 13 11:10:11 2020 +0000
- Revision:
- 0:58c507ca5e60
AnalogIn und Poti
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Ursukar | 0:58c507ca5e60 | 1 | ////////////////////////////////////////////// |
Ursukar | 0:58c507ca5e60 | 2 | // Übungen zum AnalogIn // |
Ursukar | 0:58c507ca5e60 | 3 | // NUCLEO-L432KC // |
Ursukar | 0:58c507ca5e60 | 4 | // Stefan Simbürger // |
Ursukar | 0:58c507ca5e60 | 5 | // 11.01.2020 // |
Ursukar | 0:58c507ca5e60 | 6 | // Übungen zum AnalogIn und // |
Ursukar | 0:58c507ca5e60 | 7 | // einem Poti. Das Programm wurde // |
Ursukar | 0:58c507ca5e60 | 8 | // von Visual Code hierher übertragen. // |
Ursukar | 0:58c507ca5e60 | 9 | ////////////////////////////////////////////// |
Ursukar | 0:58c507ca5e60 | 10 | |
Ursukar | 0:58c507ca5e60 | 11 | #include <mbed.h> |
Ursukar | 0:58c507ca5e60 | 12 | #define BtnRead A0 |
Ursukar | 0:58c507ca5e60 | 13 | #define BtnPlus7 A1 |
Ursukar | 0:58c507ca5e60 | 14 | #define BtnMinus11 A2 |
Ursukar | 0:58c507ca5e60 | 15 | #define BtnSave A5 |
Ursukar | 0:58c507ca5e60 | 16 | #define BtnAv A6 |
Ursukar | 0:58c507ca5e60 | 17 | |
Ursukar | 0:58c507ca5e60 | 18 | AnalogIn Poti1(A3); |
Ursukar | 0:58c507ca5e60 | 19 | |
Ursukar | 0:58c507ca5e60 | 20 | // Prototyping |
Ursukar | 0:58c507ca5e60 | 21 | float PotiRead(); |
Ursukar | 0:58c507ca5e60 | 22 | float PotiPlus7(float Potivalue); |
Ursukar | 0:58c507ca5e60 | 23 | float PotiMinus11(float Potivalue); |
Ursukar | 0:58c507ca5e60 | 24 | void Average(float Data); |
Ursukar | 0:58c507ca5e60 | 25 | |
Ursukar | 0:58c507ca5e60 | 26 | // All InterruptIns |
Ursukar | 0:58c507ca5e60 | 27 | InterruptIn actualRead(BtnRead); |
Ursukar | 0:58c507ca5e60 | 28 | InterruptIn add7(BtnPlus7); |
Ursukar | 0:58c507ca5e60 | 29 | InterruptIn sub11(BtnMinus11); |
Ursukar | 0:58c507ca5e60 | 30 | InterruptIn save(BtnSave); |
Ursukar | 0:58c507ca5e60 | 31 | InterruptIn average(BtnAv); |
Ursukar | 0:58c507ca5e60 | 32 | |
Ursukar | 0:58c507ca5e60 | 33 | // Default setting of the flagstates |
Ursukar | 0:58c507ca5e60 | 34 | bool _BtnReadPressed = false; |
Ursukar | 0:58c507ca5e60 | 35 | bool _BtnPlus7Pressed = false; |
Ursukar | 0:58c507ca5e60 | 36 | bool _BtnMinus11Pressed = false; |
Ursukar | 0:58c507ca5e60 | 37 | bool _BtnSavePressed = false; |
Ursukar | 0:58c507ca5e60 | 38 | bool _BtnAvPressed = false; |
Ursukar | 0:58c507ca5e60 | 39 | bool dataEnabled = false; |
Ursukar | 0:58c507ca5e60 | 40 | |
Ursukar | 0:58c507ca5e60 | 41 | // enables interruptflags |
Ursukar | 0:58c507ca5e60 | 42 | void FlagBtnRead() |
Ursukar | 0:58c507ca5e60 | 43 | { |
Ursukar | 0:58c507ca5e60 | 44 | _BtnReadPressed = true; |
Ursukar | 0:58c507ca5e60 | 45 | } |
Ursukar | 0:58c507ca5e60 | 46 | void FlagBtnPlus7() |
Ursukar | 0:58c507ca5e60 | 47 | { |
Ursukar | 0:58c507ca5e60 | 48 | _BtnPlus7Pressed = true; |
Ursukar | 0:58c507ca5e60 | 49 | } |
Ursukar | 0:58c507ca5e60 | 50 | void FlagBtnMinus11() |
Ursukar | 0:58c507ca5e60 | 51 | { |
Ursukar | 0:58c507ca5e60 | 52 | _BtnMinus11Pressed = true; |
Ursukar | 0:58c507ca5e60 | 53 | } |
Ursukar | 0:58c507ca5e60 | 54 | void FlagBtnSave() |
Ursukar | 0:58c507ca5e60 | 55 | { |
Ursukar | 0:58c507ca5e60 | 56 | _BtnSavePressed = true; |
Ursukar | 0:58c507ca5e60 | 57 | } |
Ursukar | 0:58c507ca5e60 | 58 | void FlagBtnAv() |
Ursukar | 0:58c507ca5e60 | 59 | { |
Ursukar | 0:58c507ca5e60 | 60 | _BtnAvPressed = true; |
Ursukar | 0:58c507ca5e60 | 61 | } |
Ursukar | 0:58c507ca5e60 | 62 | |
Ursukar | 0:58c507ca5e60 | 63 | // If the interrupt flag got triggered those methods |
Ursukar | 0:58c507ca5e60 | 64 | // return true and delete the flag. |
Ursukar | 0:58c507ca5e60 | 65 | int checkBtnRead() { |
Ursukar | 0:58c507ca5e60 | 66 | if( _BtnReadPressed ) { |
Ursukar | 0:58c507ca5e60 | 67 | _BtnReadPressed = false; |
Ursukar | 0:58c507ca5e60 | 68 | return 1; |
Ursukar | 0:58c507ca5e60 | 69 | } |
Ursukar | 0:58c507ca5e60 | 70 | return 0; |
Ursukar | 0:58c507ca5e60 | 71 | } |
Ursukar | 0:58c507ca5e60 | 72 | |
Ursukar | 0:58c507ca5e60 | 73 | int checkBtnPlus7() { |
Ursukar | 0:58c507ca5e60 | 74 | if( _BtnPlus7Pressed ) { |
Ursukar | 0:58c507ca5e60 | 75 | _BtnPlus7Pressed = false; |
Ursukar | 0:58c507ca5e60 | 76 | return 1; |
Ursukar | 0:58c507ca5e60 | 77 | } |
Ursukar | 0:58c507ca5e60 | 78 | return 0; |
Ursukar | 0:58c507ca5e60 | 79 | } |
Ursukar | 0:58c507ca5e60 | 80 | |
Ursukar | 0:58c507ca5e60 | 81 | int checkBtnMinus11() { |
Ursukar | 0:58c507ca5e60 | 82 | if( _BtnMinus11Pressed ) { |
Ursukar | 0:58c507ca5e60 | 83 | _BtnMinus11Pressed = false; |
Ursukar | 0:58c507ca5e60 | 84 | return 1; |
Ursukar | 0:58c507ca5e60 | 85 | } |
Ursukar | 0:58c507ca5e60 | 86 | return 0; |
Ursukar | 0:58c507ca5e60 | 87 | } |
Ursukar | 0:58c507ca5e60 | 88 | |
Ursukar | 0:58c507ca5e60 | 89 | int checkBtnSave() { |
Ursukar | 0:58c507ca5e60 | 90 | if( _BtnSavePressed ) { |
Ursukar | 0:58c507ca5e60 | 91 | _BtnSavePressed = false; |
Ursukar | 0:58c507ca5e60 | 92 | return 1; |
Ursukar | 0:58c507ca5e60 | 93 | } |
Ursukar | 0:58c507ca5e60 | 94 | return 0; |
Ursukar | 0:58c507ca5e60 | 95 | } |
Ursukar | 0:58c507ca5e60 | 96 | |
Ursukar | 0:58c507ca5e60 | 97 | int checkBtnAv() { |
Ursukar | 0:58c507ca5e60 | 98 | if( _BtnAvPressed ) { |
Ursukar | 0:58c507ca5e60 | 99 | _BtnAvPressed = false; |
Ursukar | 0:58c507ca5e60 | 100 | return 1; |
Ursukar | 0:58c507ca5e60 | 101 | } |
Ursukar | 0:58c507ca5e60 | 102 | return 0; |
Ursukar | 0:58c507ca5e60 | 103 | } |
Ursukar | 0:58c507ca5e60 | 104 | |
Ursukar | 0:58c507ca5e60 | 105 | int main() { |
Ursukar | 0:58c507ca5e60 | 106 | printf("Poti-Testprogramm copyright Stefan Simbürger \n"); |
Ursukar | 0:58c507ca5e60 | 107 | uint8_t n = 0; |
Ursukar | 0:58c507ca5e60 | 108 | float ADCarray[20], ADCData = 0; |
Ursukar | 0:58c507ca5e60 | 109 | actualRead.fall(&FlagBtnRead); |
Ursukar | 0:58c507ca5e60 | 110 | add7.fall(&FlagBtnPlus7); |
Ursukar | 0:58c507ca5e60 | 111 | sub11.fall(&FlagBtnMinus11); |
Ursukar | 0:58c507ca5e60 | 112 | save.fall(&FlagBtnSave); |
Ursukar | 0:58c507ca5e60 | 113 | average.fall(&FlagBtnAv); |
Ursukar | 0:58c507ca5e60 | 114 | |
Ursukar | 0:58c507ca5e60 | 115 | while(1) { |
Ursukar | 0:58c507ca5e60 | 116 | if(checkBtnRead()) |
Ursukar | 0:58c507ca5e60 | 117 | { |
Ursukar | 0:58c507ca5e60 | 118 | ADCData = PotiRead(); |
Ursukar | 0:58c507ca5e60 | 119 | dataEnabled = true; |
Ursukar | 0:58c507ca5e60 | 120 | } |
Ursukar | 0:58c507ca5e60 | 121 | if(checkBtnPlus7()) |
Ursukar | 0:58c507ca5e60 | 122 | { |
Ursukar | 0:58c507ca5e60 | 123 | if(dataEnabled == false) |
Ursukar | 0:58c507ca5e60 | 124 | { |
Ursukar | 0:58c507ca5e60 | 125 | printf("Bitte Poti auslesen!\n"); |
Ursukar | 0:58c507ca5e60 | 126 | } |
Ursukar | 0:58c507ca5e60 | 127 | else |
Ursukar | 0:58c507ca5e60 | 128 | { |
Ursukar | 0:58c507ca5e60 | 129 | ADCData = PotiPlus7(ADCData); |
Ursukar | 0:58c507ca5e60 | 130 | } |
Ursukar | 0:58c507ca5e60 | 131 | } |
Ursukar | 0:58c507ca5e60 | 132 | if(checkBtnMinus11()) |
Ursukar | 0:58c507ca5e60 | 133 | { |
Ursukar | 0:58c507ca5e60 | 134 | if(dataEnabled == false) |
Ursukar | 0:58c507ca5e60 | 135 | { |
Ursukar | 0:58c507ca5e60 | 136 | printf("Bitte Poti auslesen!\n"); |
Ursukar | 0:58c507ca5e60 | 137 | } |
Ursukar | 0:58c507ca5e60 | 138 | else |
Ursukar | 0:58c507ca5e60 | 139 | { |
Ursukar | 0:58c507ca5e60 | 140 | ADCData = PotiMinus11(ADCData); |
Ursukar | 0:58c507ca5e60 | 141 | } |
Ursukar | 0:58c507ca5e60 | 142 | } |
Ursukar | 0:58c507ca5e60 | 143 | |
Ursukar | 0:58c507ca5e60 | 144 | // This function saves the value of |
Ursukar | 0:58c507ca5e60 | 145 | // ADCData into an array |
Ursukar | 0:58c507ca5e60 | 146 | if(checkBtnSave()) |
Ursukar | 0:58c507ca5e60 | 147 | { |
Ursukar | 0:58c507ca5e60 | 148 | if(dataEnabled == false) |
Ursukar | 0:58c507ca5e60 | 149 | { |
Ursukar | 0:58c507ca5e60 | 150 | printf("Bitte Poti auslesen!\n"); |
Ursukar | 0:58c507ca5e60 | 151 | } |
Ursukar | 0:58c507ca5e60 | 152 | else |
Ursukar | 0:58c507ca5e60 | 153 | { |
Ursukar | 0:58c507ca5e60 | 154 | ADCarray[n] = ADCData; |
Ursukar | 0:58c507ca5e60 | 155 | n++; |
Ursukar | 0:58c507ca5e60 | 156 | printf("Gespeicherter Wert = %f\n", ADCData); |
Ursukar | 0:58c507ca5e60 | 157 | } |
Ursukar | 0:58c507ca5e60 | 158 | } |
Ursukar | 0:58c507ca5e60 | 159 | if(checkBtnAv()) |
Ursukar | 0:58c507ca5e60 | 160 | { |
Ursukar | 0:58c507ca5e60 | 161 | float sum = 0; |
Ursukar | 0:58c507ca5e60 | 162 | |
Ursukar | 0:58c507ca5e60 | 163 | if(n==0) |
Ursukar | 0:58c507ca5e60 | 164 | { |
Ursukar | 0:58c507ca5e60 | 165 | printf("Keine gespeicherten Werte!\n"); |
Ursukar | 0:58c507ca5e60 | 166 | } |
Ursukar | 0:58c507ca5e60 | 167 | else |
Ursukar | 0:58c507ca5e60 | 168 | { |
Ursukar | 0:58c507ca5e60 | 169 | for(int i = 0; i < 10; i++) |
Ursukar | 0:58c507ca5e60 | 170 | { |
Ursukar | 0:58c507ca5e60 | 171 | // calculates a summary of the last 10 positions |
Ursukar | 0:58c507ca5e60 | 172 | sum = sum + ADCarray[n-i-1]; |
Ursukar | 0:58c507ca5e60 | 173 | } |
Ursukar | 0:58c507ca5e60 | 174 | Average(sum); |
Ursukar | 0:58c507ca5e60 | 175 | } |
Ursukar | 0:58c507ca5e60 | 176 | } |
Ursukar | 0:58c507ca5e60 | 177 | } |
Ursukar | 0:58c507ca5e60 | 178 | } |
Ursukar | 0:58c507ca5e60 | 179 | |
Ursukar | 0:58c507ca5e60 | 180 | // reads the actual value of the resistor. |
Ursukar | 0:58c507ca5e60 | 181 | // This function turns the float value |
Ursukar | 0:58c507ca5e60 | 182 | // of 0 to 1 into -50 to 50 |
Ursukar | 0:58c507ca5e60 | 183 | float PotiRead() |
Ursukar | 0:58c507ca5e60 | 184 | { |
Ursukar | 0:58c507ca5e60 | 185 | float ADCvalue; |
Ursukar | 0:58c507ca5e60 | 186 | ADCvalue = Poti1.read() * 100 - 50; |
Ursukar | 0:58c507ca5e60 | 187 | printf("Wert des Potis: %f\n", ADCvalue); |
Ursukar | 0:58c507ca5e60 | 188 | return ADCvalue; |
Ursukar | 0:58c507ca5e60 | 189 | } |
Ursukar | 0:58c507ca5e60 | 190 | |
Ursukar | 0:58c507ca5e60 | 191 | // adds 7 to the value of ADCData |
Ursukar | 0:58c507ca5e60 | 192 | float PotiPlus7(float Potivalue) |
Ursukar | 0:58c507ca5e60 | 193 | { |
Ursukar | 0:58c507ca5e60 | 194 | Potivalue = Potivalue + 7; |
Ursukar | 0:58c507ca5e60 | 195 | printf("Wert des Poti plus 7: %f\n", Potivalue); |
Ursukar | 0:58c507ca5e60 | 196 | return Potivalue; |
Ursukar | 0:58c507ca5e60 | 197 | } |
Ursukar | 0:58c507ca5e60 | 198 | |
Ursukar | 0:58c507ca5e60 | 199 | // reduces the value of ADCData by 11 |
Ursukar | 0:58c507ca5e60 | 200 | float PotiMinus11(float Potivalue) |
Ursukar | 0:58c507ca5e60 | 201 | { |
Ursukar | 0:58c507ca5e60 | 202 | Potivalue = Potivalue - 11; |
Ursukar | 0:58c507ca5e60 | 203 | printf("Wert des Poti minus 11: %f\n", Potivalue); |
Ursukar | 0:58c507ca5e60 | 204 | return Potivalue; |
Ursukar | 0:58c507ca5e60 | 205 | } |
Ursukar | 0:58c507ca5e60 | 206 | |
Ursukar | 0:58c507ca5e60 | 207 | // Calcultes the average of the last 10 |
Ursukar | 0:58c507ca5e60 | 208 | // positions of ADCarray[] |
Ursukar | 0:58c507ca5e60 | 209 | void Average(float Data) |
Ursukar | 0:58c507ca5e60 | 210 | { |
Ursukar | 0:58c507ca5e60 | 211 | Data = Data / 10; |
Ursukar | 0:58c507ca5e60 | 212 | printf("Der durchschnittliche Wert beträgt: %f\n", Data); |
Ursukar | 0:58c507ca5e60 | 213 | } |