AnalogIn und Poti

Dependencies:   mbed

Committer:
Ursukar
Date:
Mon Jan 13 11:10:11 2020 +0000
Revision:
0:58c507ca5e60
AnalogIn und Poti

Who changed what in which revision?

UserRevisionLine numberNew 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 }