HAPO WS22 / Mbed 2 deprecated HAPO_WS22_Labor3_final

Dependencies:   mbed

Committer:
alexander0707
Date:
Sun Dec 04 16:29:52 2022 +0000
Revision:
13:b1d6b2285b13
Parent:
12:bd1417475c5f
Child:
14:88379565eac6
v1.25 Keine Ahnung mit UART

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prof_al 0:5ac32d240694 1 /***************************************************************************
alexander0707 5:5c9b508670cf 2 * Titel : main.cpp
prof_al 0:5ac32d240694 3 *
alexander0707 5:5c9b508670cf 4 * Description : Labormodul "HAPOA"
prof_al 0:5ac32d240694 5 *
prof_al 0:5ac32d240694 6 * Revision List:
prof_al 0:5ac32d240694 7 --------------------------------------------------------------------------
prof_al 0:5ac32d240694 8 Date | Author | Change
prof_al 0:5ac32d240694 9 --------------------------------------------------------------------------
prof_al 0:5ac32d240694 10 24.10.22 | J. Altenburg | Ersterstellung
prof_al 0:5ac32d240694 11 --------------------------------------------------------------------------
prof_al 0:5ac32d240694 12 | |
alexander0707 5:5c9b508670cf 13 ---------------------------------------------------------------------------
alexander0707 5:5c9b508670cf 14
alexander0707 5:5c9b508670cf 15 Editor List:
alexander0707 5:5c9b508670cf 16 --------------------------------------------------------------------------
alexander0707 5:5c9b508670cf 17 Date | Author | Change
alexander0707 5:5c9b508670cf 18 --------------------------------------------------------------------------
alexander0707 5:5c9b508670cf 19 30.11.22 |Tobias Zinke | Labor03
alexander0707 5:5c9b508670cf 20 --------------------------------------------------------------------------
alexander0707 5:5c9b508670cf 21 30.11.22 |Alexander Pitthan| Labor03
alexander0707 5:5c9b508670cf 22 ---------------------------------------------------------------------------
prof_al 0:5ac32d240694 23 ****************************************************************************/
prof_al 0:5ac32d240694 24 #include "mbed.h"
prof_al 0:5ac32d240694 25 #include "cdef.h"
prof_al 0:5ac32d240694 26
alexander0707 5:5c9b508670cf 27 AnalogIn pinPoti (A0);
alexander0707 5:5c9b508670cf 28
prof_al 0:5ac32d240694 29 /* Vereinbarungen zu den Tasteneingängen */
prof_al 0:5ac32d240694 30 DigitalIn pinS1(A1);
prof_al 0:5ac32d240694 31 DigitalIn pinS2(A2);
prof_al 0:5ac32d240694 32 DigitalIn pinS3(A3);
prof_al 0:5ac32d240694 33
alexander0707 12:bd1417475c5f 34 //BusOut bLedShield(D10, D11, D12, D13);
prof_al 0:5ac32d240694 35
prof_al 0:5ac32d240694 36 /* Anschlüsse der Schieberegister */
prof_al 0:5ac32d240694 37 DigitalOut pinSdo(PA_9);
prof_al 0:5ac32d240694 38 DigitalOut pinSck(PA_8);
prof_al 0:5ac32d240694 39 DigitalOut pinLoad(PB_5);
alexander0707 6:4e55101c65f4 40 DigitalOut pinBeep(PB_3);
prof_al 0:5ac32d240694 41
prof_al 0:5ac32d240694 42 /* ISR */
prof_al 0:5ac32d240694 43 Ticker stTimer;
prof_al 0:5ac32d240694 44
prof_al 0:5ac32d240694 45 /***************************************************************************
prof_al 0:5ac32d240694 46 * Defines und Makros *
prof_al 0:5ac32d240694 47 ***************************************************************************/
alexander0707 5:5c9b508670cf 48 #define nTastShort 20 /* Taste 50 Millisekunden gedrückt */
alexander0707 12:bd1417475c5f 49 #define nTastLong 240 /* Taste 0.6 Sekunden gedrückt */
alexander0707 5:5c9b508670cf 50 #define nCircleTime 2500 /* Laufzeit der Main in us */
prof_al 0:5ac32d240694 51
prof_al 0:5ac32d240694 52 #define nSegA 0x01
prof_al 0:5ac32d240694 53 #define nSegB 0x02
prof_al 0:5ac32d240694 54 #define nSegC 0x04
prof_al 0:5ac32d240694 55 #define nSegD 0x08
prof_al 0:5ac32d240694 56 #define nSegE 0x10
prof_al 0:5ac32d240694 57 #define nSegF 0x20
prof_al 0:5ac32d240694 58 #define nSegG 0x40
prof_al 0:5ac32d240694 59 #define nSegH 0x80
prof_al 0:5ac32d240694 60
prof_al 0:5ac32d240694 61 #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF)
prof_al 0:5ac32d240694 62 #define nZiffer1 ~(nSegB | nSegC)
prof_al 0:5ac32d240694 63 #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG)
prof_al 0:5ac32d240694 64 #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG)
prof_al 0:5ac32d240694 65 #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG)
prof_al 0:5ac32d240694 66 #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG)
prof_al 0:5ac32d240694 67 #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 68 #define nZiffer7 ~(nSegA | nSegB | nSegC)
prof_al 0:5ac32d240694 69 #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 70 #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG)
prof_al 0:5ac32d240694 71 #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 72 #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 73 #define nZifferC ~(nSegA | nSegD | nSegE | nSegF)
prof_al 0:5ac32d240694 74 #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG)
prof_al 0:5ac32d240694 75 #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 76 #define nZifferF ~(nSegA | nSegE | nSegF | nSegG)
prof_al 0:5ac32d240694 77 #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH)
prof_al 0:5ac32d240694 78
prof_al 0:5ac32d240694 79 byte bIdx; /*
prof_al 0:5ac32d240694 80 * Description : Index auf Ausgabe
prof_al 0:5ac32d240694 81 */
prof_al 0:5ac32d240694 82
prof_al 0:5ac32d240694 83 byte bDigit; /*
prof_al 0:5ac32d240694 84 * Description : aktives Digit
prof_al 0:5ac32d240694 85 */
prof_al 0:5ac32d240694 86
prof_al 0:5ac32d240694 87 byte bBargraph; /*
prof_al 0:5ac32d240694 88 * Description : Bargraph durchschalten
prof_al 0:5ac32d240694 89 */
prof_al 0:5ac32d240694 90
prof_al 0:5ac32d240694 91 byte bS1Timer; /*
prof_al 0:5ac32d240694 92 * Description : Timer für Taste S1
prof_al 0:5ac32d240694 93 */
prof_al 0:5ac32d240694 94
prof_al 0:5ac32d240694 95 byte bS2Timer; /*
prof_al 0:5ac32d240694 96 * Description : Timer für Taste S2
prof_al 0:5ac32d240694 97 */
prof_al 0:5ac32d240694 98
prof_al 0:5ac32d240694 99 byte bS3Timer; /*
prof_al 0:5ac32d240694 100 * Description : Timer für Taste S3
prof_al 0:5ac32d240694 101 */
prof_al 0:5ac32d240694 102
alexander0707 5:5c9b508670cf 103 byte bDisplayState; /*
alexander0707 5:5c9b508670cf 104 * Description :
alexander0707 5:5c9b508670cf 105 */
alexander0707 5:5c9b508670cf 106 const byte enSchwellenwert=0x00;
alexander0707 5:5c9b508670cf 107 const byte enPotiAnzeige = 0x01;
alexander0707 5:5c9b508670cf 108 const byte enVergleich = 0x02;
alexander0707 5:5c9b508670cf 109
alexander0707 5:5c9b508670cf 110
alexander0707 5:5c9b508670cf 111 byte bState; /*
alexander0707 5:5c9b508670cf 112 * Description :
alexander0707 5:5c9b508670cf 113 */
alexander0707 5:5c9b508670cf 114
alexander0707 5:5c9b508670cf 115 byte bTimerDot; /*
alexander0707 5:5c9b508670cf 116 * Description : Zähler für Dots
alexander0707 5:5c9b508670cf 117 */
alexander0707 5:5c9b508670cf 118
alexander0707 5:5c9b508670cf 119 byte bHotKey; /*
alexander0707 5:5c9b508670cf 120 * Description : Auswahl der Taste
alexander0707 5:5c9b508670cf 121 */
alexander0707 5:5c9b508670cf 122
alexander0707 5:5c9b508670cf 123 byte bDisplayDot; /*
alexander0707 5:5c9b508670cf 124 * Description :
alexander0707 5:5c9b508670cf 125 */
alexander0707 5:5c9b508670cf 126
alexander0707 5:5c9b508670cf 127 byte bMainState; /*
alexander0707 5:5c9b508670cf 128 * Description : Hauptzustand
alexander0707 5:5c9b508670cf 129 */
alexander0707 5:5c9b508670cf 130
alexander0707 5:5c9b508670cf 131 byte bBeepTime; /*
alexander0707 5:5c9b508670cf 132 * Description : Tondauer
alexander0707 5:5c9b508670cf 133 */
alexander0707 5:5c9b508670cf 134
alexander0707 5:5c9b508670cf 135 byte bEinstellungsModus;/*
alexander0707 5:5c9b508670cf 136 * Description : Einstellungszustand
alexander0707 5:5c9b508670cf 137 */
alexander0707 5:5c9b508670cf 138
alexander0707 5:5c9b508670cf 139 byte bSchwellenwertVergleich;/*
alexander0707 5:5c9b508670cf 140 * Description : Einstellungszustand
alexander0707 5:5c9b508670cf 141 */
alexander0707 5:5c9b508670cf 142
alexander0707 6:4e55101c65f4 143 byte bTimeLong;/*
alexander0707 6:4e55101c65f4 144 * Description : Ob Taste bereits lange gedrückt war
alexander0707 6:4e55101c65f4 145 */
alexander0707 6:4e55101c65f4 146
alexander0707 13:b1d6b2285b13 147 byte bSizeData;/*
alexander0707 13:b1d6b2285b13 148 * Description : Größe der Daten
alexander0707 13:b1d6b2285b13 149 */
alexander0707 13:b1d6b2285b13 150 byte *pUartData; /*
alexander0707 13:b1d6b2285b13 151 * Description : pointer to data
alexander0707 13:b1d6b2285b13 152 */
alexander0707 13:b1d6b2285b13 153
alexander0707 5:5c9b508670cf 154
prof_al 0:5ac32d240694 155 word wSerial; /*
prof_al 0:5ac32d240694 156 * Description : serielles Ausgaberegister
prof_al 0:5ac32d240694 157 */
prof_al 0:5ac32d240694 158
alexander0707 5:5c9b508670cf 159 word wClockTime; /*
alexander0707 5:5c9b508670cf 160 *Description : Timer für verstrichene Zeit
alexander0707 5:5c9b508670cf 161 */
alexander0707 5:5c9b508670cf 162
alexander0707 5:5c9b508670cf 163 word wClockShow; /*
alexander0707 5:5c9b508670cf 164 *Description : Timer für verstrichene Zeit
alexander0707 5:5c9b508670cf 165 */
alexander0707 5:5c9b508670cf 166
alexander0707 5:5c9b508670cf 167 word wDelayGame; /*
alexander0707 5:5c9b508670cf 168 * Description : Verzögerungstimer
alexander0707 5:5c9b508670cf 169 */
alexander0707 5:5c9b508670cf 170
alexander0707 5:5c9b508670cf 171 word wPotiWert; /*
alexander0707 5:5c9b508670cf 172 * Description : Wert des Potis
alexander0707 5:5c9b508670cf 173 */
alexander0707 5:5c9b508670cf 174
alexander0707 5:5c9b508670cf 175 word wVorgabeWert; /*
alexander0707 5:5c9b508670cf 176 * Description : engestellter Vorgabewert
alexander0707 5:5c9b508670cf 177 */
alexander0707 5:5c9b508670cf 178
alexander0707 10:fdd52c601fcc 179 int nDiffWert; /*
alexander0707 6:4e55101c65f4 180 * Description : Differenz zwischen Vorgabe und Eingang
alexander0707 6:4e55101c65f4 181 */
alexander0707 6:4e55101c65f4 182
prof_al 0:5ac32d240694 183 /* Bitmuster */
prof_al 0:5ac32d240694 184 const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff};
alexander0707 12:bd1417475c5f 185 //const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f};
alexander0707 13:b1d6b2285b13 186 byte abString[12];
alexander0707 13:b1d6b2285b13 187
prof_al 0:5ac32d240694 188
prof_al 0:5ac32d240694 189
prof_al 0:5ac32d240694 190 void vShiftLoad(word wLoad){
prof_al 0:5ac32d240694 191 word wMask = Bit15;
prof_al 0:5ac32d240694 192 pinLoad = 0;
prof_al 0:5ac32d240694 193 while(wMask){
prof_al 0:5ac32d240694 194 if(wMask & wLoad) pinSdo = 1;
prof_al 0:5ac32d240694 195 else pinSdo = 0;
prof_al 0:5ac32d240694 196 pinSck = 1;
prof_al 0:5ac32d240694 197 wMask >>= 1;
prof_al 0:5ac32d240694 198 pinSck = 0;
prof_al 0:5ac32d240694 199 }
prof_al 0:5ac32d240694 200 pinLoad = 1;
prof_al 0:5ac32d240694 201 }
prof_al 0:5ac32d240694 202
alexander0707 5:5c9b508670cf 203
alexander0707 5:5c9b508670cf 204 byte abDisplayMemory[] = {16,16,16,16}; /* alle Segmente aus */
alexander0707 5:5c9b508670cf 205
alexander0707 6:4e55101c65f4 206 void vDisplayVolt( word w )
alexander0707 5:5c9b508670cf 207 {
alexander0707 5:5c9b508670cf 208 int16 v;
alexander0707 5:5c9b508670cf 209 abDisplayMemory[0] = 16; /* Aus */
alexander0707 8:6f91c39dbabc 210 v = (byte)(w / 1000);
alexander0707 8:6f91c39dbabc 211 abDisplayMemory[1] = v; /* Hunderter */
alexander0707 8:6f91c39dbabc 212 w = w - (v * 1000);
alexander0707 5:5c9b508670cf 213 v = (byte)(w / 100);
alexander0707 8:6f91c39dbabc 214 abDisplayMemory[2] = v; /* Zehner */
alexander0707 5:5c9b508670cf 215 w = w - (v * 100);
alexander0707 5:5c9b508670cf 216 v = (byte)(w / 10);
alexander0707 8:6f91c39dbabc 217 abDisplayMemory[3] = v; /* Einer */
alexander0707 5:5c9b508670cf 218 }
alexander0707 6:4e55101c65f4 219
alexander0707 6:4e55101c65f4 220 void vDisplayDiff( word w )
alexander0707 5:5c9b508670cf 221 {
alexander0707 6:4e55101c65f4 222 int16 v;
alexander0707 6:4e55101c65f4 223 abDisplayMemory[0] = 12; /* "C" */
alexander0707 8:6f91c39dbabc 224 v = (byte)(w / 1000);
alexander0707 8:6f91c39dbabc 225 abDisplayMemory[1] = v; /* Hunderter */
alexander0707 8:6f91c39dbabc 226 w = w - (v * 1000);
alexander0707 6:4e55101c65f4 227 v = (byte)(w / 100);
alexander0707 8:6f91c39dbabc 228 abDisplayMemory[2] = v; /* Zehner */
alexander0707 6:4e55101c65f4 229 w = w - (v * 100);
alexander0707 6:4e55101c65f4 230 v = (byte)(w / 10);
alexander0707 8:6f91c39dbabc 231 abDisplayMemory[3] = v; /* Einer */
alexander0707 6:4e55101c65f4 232 }
alexander0707 6:4e55101c65f4 233
alexander0707 6:4e55101c65f4 234 void vSetForStart( void )
alexander0707 6:4e55101c65f4 235 {
alexander0707 6:4e55101c65f4 236 abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */
alexander0707 5:5c9b508670cf 237 abDisplayMemory[1] = 16;
alexander0707 5:5c9b508670cf 238 abDisplayMemory[2] = 16;
alexander0707 5:5c9b508670cf 239 abDisplayMemory[3] = 16;
alexander0707 5:5c9b508670cf 240 bTimerDot = 0;
alexander0707 5:5c9b508670cf 241 bDigit = 0;
alexander0707 6:4e55101c65f4 242 bMainState = enSchwellenwert;
alexander0707 6:4e55101c65f4 243 bDisplayState = enSchwellenwert;
alexander0707 6:4e55101c65f4 244 pinBeep = 1;
alexander0707 6:4e55101c65f4 245 wVorgabeWert = 0;
alexander0707 5:5c9b508670cf 246 }
alexander0707 6:4e55101c65f4 247 /*
alexander0707 5:5c9b508670cf 248 void vSetRunClock( void )
alexander0707 5:5c9b508670cf 249 {
alexander0707 5:5c9b508670cf 250 wClockTime = 0;
alexander0707 5:5c9b508670cf 251 bDigit = 0;
alexander0707 7:94c73e4168d8 252 abDisplayMemory[0] = 16; 7-Segment-Display ausschalten
alexander0707 5:5c9b508670cf 253 abDisplayMemory[1] = 0;
alexander0707 5:5c9b508670cf 254 abDisplayMemory[2] = 0;
alexander0707 5:5c9b508670cf 255 abDisplayMemory[3] = 0;
alexander0707 5:5c9b508670cf 256 bDisplayState = enRunClock;
alexander0707 5:5c9b508670cf 257 }
alexander0707 5:5c9b508670cf 258 */
alexander0707 5:5c9b508670cf 259 /*
alexander0707 5:5c9b508670cf 260 byte bCheckTasten( byte bState )
alexander0707 5:5c9b508670cf 261 {
alexander0707 7:94c73e4168d8 262 if((pinS1 == 0) || (pinS2 == 0) || (pinS3 == 0)) { Tastendruck erkannt
alexander0707 5:5c9b508670cf 263 wClockShow = 1200;
alexander0707 5:5c9b508670cf 264 if((pinS1 == 0) && (bHotKey == 0)) {
alexander0707 5:5c9b508670cf 265 wDelayGame = 0;
alexander0707 5:5c9b508670cf 266 bState = enShowResult;
alexander0707 5:5c9b508670cf 267 bDisplayState = enShowResult;
alexander0707 5:5c9b508670cf 268 } else if((pinS2 == 0) && (bHotKey == 1)) {
alexander0707 5:5c9b508670cf 269 wDelayGame = 0;
alexander0707 5:5c9b508670cf 270 bState = enShowResult;
alexander0707 5:5c9b508670cf 271 bDisplayState = enShowResult;
alexander0707 5:5c9b508670cf 272 } else if((pinS3 == 0) && (bHotKey == 2)) {
alexander0707 5:5c9b508670cf 273 wDelayGame = 0;
alexander0707 5:5c9b508670cf 274 bState = enShowResult;
alexander0707 5:5c9b508670cf 275 bDisplayState = enShowResult;
alexander0707 5:5c9b508670cf 276 } else {
alexander0707 5:5c9b508670cf 277 wDelayGame = 200;
alexander0707 5:5c9b508670cf 278 abDisplayMemory[1] = 15;
alexander0707 5:5c9b508670cf 279 abDisplayMemory[2] = 15;
alexander0707 5:5c9b508670cf 280 abDisplayMemory[3] = 15;
alexander0707 5:5c9b508670cf 281 bState = enShowError;
alexander0707 5:5c9b508670cf 282 bDisplayState = enShowResult;
alexander0707 5:5c9b508670cf 283 pinBeep = 0;
alexander0707 5:5c9b508670cf 284 }
alexander0707 5:5c9b508670cf 285 }
alexander0707 5:5c9b508670cf 286 return bState;
alexander0707 5:5c9b508670cf 287 }
alexander0707 5:5c9b508670cf 288 */
alexander0707 5:5c9b508670cf 289 /* Tastenabfrage */
alexander0707 5:5c9b508670cf 290 void vTasteS1( void ){
alexander0707 5:5c9b508670cf 291 if(pinS1 == 0){ /* User-Taste gedrückt */
alexander0707 5:5c9b508670cf 292 if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */
alexander0707 5:5c9b508670cf 293 if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */
alexander0707 5:5c9b508670cf 294 //...
alexander0707 5:5c9b508670cf 295 }
alexander0707 5:5c9b508670cf 296 if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
alexander0707 7:94c73e4168d8 297 if(bDisplayState == enSchwellenwert || bDisplayState == enPotiAnzeige){
alexander0707 6:4e55101c65f4 298 bDisplayState = enVergleich;
alexander0707 6:4e55101c65f4 299 bMainState = enVergleich;
alexander0707 6:4e55101c65f4 300 }
alexander0707 6:4e55101c65f4 301 else{
alexander0707 6:4e55101c65f4 302 bDisplayState = enSchwellenwert;
alexander0707 6:4e55101c65f4 303 bMainState = enSchwellenwert;
alexander0707 6:4e55101c65f4 304 }
alexander0707 6:4e55101c65f4 305 }
alexander0707 6:4e55101c65f4 306 bS1Timer++;
alexander0707 6:4e55101c65f4 307 }
alexander0707 6:4e55101c65f4 308 }
alexander0707 6:4e55101c65f4 309 else{ /* Taste nicht gedrückt */
alexander0707 6:4e55101c65f4 310 if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
alexander0707 7:94c73e4168d8 311 if(bDisplayState == enSchwellenwert){
alexander0707 5:5c9b508670cf 312 bDisplayState = enPotiAnzeige;
alexander0707 5:5c9b508670cf 313 bMainState = enPotiAnzeige;
alexander0707 5:5c9b508670cf 314 }
alexander0707 5:5c9b508670cf 315 else{
alexander0707 5:5c9b508670cf 316 bDisplayState = enSchwellenwert;
alexander0707 5:5c9b508670cf 317 bMainState= enSchwellenwert;
alexander0707 5:5c9b508670cf 318 }
alexander0707 5:5c9b508670cf 319 }
alexander0707 5:5c9b508670cf 320 bS1Timer = 0;
alexander0707 5:5c9b508670cf 321 }
alexander0707 5:5c9b508670cf 322 }
alexander0707 5:5c9b508670cf 323
alexander0707 5:5c9b508670cf 324 void vTasteS2( void ){
alexander0707 11:d08f264a6be1 325 if(pinS2 == 0 && bMainState == enSchwellenwert){ /* User-Taste gedrückt */
alexander0707 5:5c9b508670cf 326 if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */
alexander0707 5:5c9b508670cf 327 if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */
alexander0707 5:5c9b508670cf 328 //...
alexander0707 5:5c9b508670cf 329 }
alexander0707 5:5c9b508670cf 330 if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
alexander0707 6:4e55101c65f4 331 bTimeLong = 1;
alexander0707 10:fdd52c601fcc 332 if(wVorgabeWert >=3200) wVorgabeWert = 3300;
alexander0707 10:fdd52c601fcc 333 else wVorgabeWert = wVorgabeWert + 100;
alexander0707 9:b30caa6d008f 334 bS2Timer = bS2Timer - 40;
alexander0707 5:5c9b508670cf 335 }
alexander0707 5:5c9b508670cf 336 bS2Timer++;
alexander0707 5:5c9b508670cf 337 }
alexander0707 5:5c9b508670cf 338 }
alexander0707 5:5c9b508670cf 339 else{ /* Taste nicht gedrückt */
alexander0707 5:5c9b508670cf 340 if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
alexander0707 10:fdd52c601fcc 341 if(bTimeLong==0){
alexander0707 10:fdd52c601fcc 342 if(wVorgabeWert >=3290) wVorgabeWert = 3300;
alexander0707 10:fdd52c601fcc 343 else wVorgabeWert = wVorgabeWert + 10;
alexander0707 10:fdd52c601fcc 344 }
alexander0707 5:5c9b508670cf 345 }
alexander0707 5:5c9b508670cf 346 bS2Timer = 0;
alexander0707 6:4e55101c65f4 347 bTimeLong= 0;
alexander0707 5:5c9b508670cf 348 }
alexander0707 5:5c9b508670cf 349 }
alexander0707 5:5c9b508670cf 350
alexander0707 5:5c9b508670cf 351 void vTasteS3( void ){
alexander0707 11:d08f264a6be1 352 if(pinS3 == 0 && bMainState == enSchwellenwert){ /* User-Taste gedrückt */
alexander0707 5:5c9b508670cf 353 if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */
alexander0707 5:5c9b508670cf 354 if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */
alexander0707 5:5c9b508670cf 355 //...
alexander0707 5:5c9b508670cf 356 }
alexander0707 5:5c9b508670cf 357 if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
alexander0707 6:4e55101c65f4 358 bTimeLong = 1;
alexander0707 10:fdd52c601fcc 359 if(wVorgabeWert <=100) wVorgabeWert = 0;
alexander0707 10:fdd52c601fcc 360 else wVorgabeWert = wVorgabeWert - 100;
alexander0707 12:bd1417475c5f 361 bS3Timer = bS3Timer - 40;
alexander0707 5:5c9b508670cf 362 }
alexander0707 5:5c9b508670cf 363 bS3Timer++;
alexander0707 5:5c9b508670cf 364 }
alexander0707 5:5c9b508670cf 365 }
alexander0707 5:5c9b508670cf 366 else{ /* Taste nicht gedrückt */
alexander0707 5:5c9b508670cf 367 if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
alexander0707 10:fdd52c601fcc 368 if(bTimeLong==0){
alexander0707 10:fdd52c601fcc 369 if(wVorgabeWert <=10) wVorgabeWert = 0;
alexander0707 10:fdd52c601fcc 370 else wVorgabeWert = wVorgabeWert - 10;
alexander0707 10:fdd52c601fcc 371 }
alexander0707 5:5c9b508670cf 372 }
alexander0707 5:5c9b508670cf 373 bS3Timer = 0;
alexander0707 6:4e55101c65f4 374 bTimeLong= 0;
alexander0707 5:5c9b508670cf 375 }
alexander0707 5:5c9b508670cf 376 }
alexander0707 5:5c9b508670cf 377
alexander0707 5:5c9b508670cf 378
alexander0707 5:5c9b508670cf 379
alexander0707 5:5c9b508670cf 380 void vCheckTasten( void ){
alexander0707 5:5c9b508670cf 381 vTasteS1();
alexander0707 5:5c9b508670cf 382 vTasteS2();
alexander0707 5:5c9b508670cf 383 vTasteS3();
alexander0707 5:5c9b508670cf 384 }
alexander0707 5:5c9b508670cf 385 void vSegmentDigit( void ) //wichtig!!
alexander0707 5:5c9b508670cf 386 {
alexander0707 5:5c9b508670cf 387 bDigit++;
alexander0707 5:5c9b508670cf 388 wSerial = abZiffer[abDisplayMemory[bDigit&0x03]];
alexander0707 5:5c9b508670cf 389 switch(bDisplayState) {
alexander0707 5:5c9b508670cf 390 case enSchwellenwert:
alexander0707 5:5c9b508670cf 391 bTimerDot++; /* Zähler für Punktwechsel */
alexander0707 6:4e55101c65f4 392 vDisplayVolt(wVorgabeWert);
alexander0707 6:4e55101c65f4 393 if(bTimerDot == 400) {
alexander0707 7:94c73e4168d8 394 if((bDigit&0x03) == 0x01) {
alexander0707 7:94c73e4168d8 395 wSerial = wSerial & ~nSegH; /* Punktanzeigen */
alexander0707 7:94c73e4168d8 396 }
alexander0707 5:5c9b508670cf 397 bTimerDot = 0;
alexander0707 5:5c9b508670cf 398 }
alexander0707 5:5c9b508670cf 399 break;
alexander0707 5:5c9b508670cf 400 case enPotiAnzeige:
alexander0707 6:4e55101c65f4 401 vDisplayVolt(wPotiWert);
alexander0707 5:5c9b508670cf 402 if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
alexander0707 5:5c9b508670cf 403 wSerial = wSerial & ~nSegH;
alexander0707 5:5c9b508670cf 404 }
alexander0707 5:5c9b508670cf 405 break;
alexander0707 5:5c9b508670cf 406 case enVergleich:
alexander0707 10:fdd52c601fcc 407 vDisplayDiff(nDiffWert);
alexander0707 5:5c9b508670cf 408 if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
alexander0707 5:5c9b508670cf 409 wSerial = wSerial & ~nSegH;
alexander0707 5:5c9b508670cf 410 }
alexander0707 5:5c9b508670cf 411 break;
alexander0707 5:5c9b508670cf 412 }
alexander0707 5:5c9b508670cf 413 vShiftLoad(((wSerial << 8) & 0xfff0)| (1 << (bDigit&0x03)));
alexander0707 5:5c9b508670cf 414 }
alexander0707 5:5c9b508670cf 415
alexander0707 13:b1d6b2285b13 416
alexander0707 13:b1d6b2285b13 417
alexander0707 13:b1d6b2285b13 418
alexander0707 13:b1d6b2285b13 419
alexander0707 13:b1d6b2285b13 420
alexander0707 13:b1d6b2285b13 421
alexander0707 13:b1d6b2285b13 422
alexander0707 13:b1d6b2285b13 423
alexander0707 13:b1d6b2285b13 424
alexander0707 13:b1d6b2285b13 425
alexander0707 13:b1d6b2285b13 426 Serial stComX(D1,D0); /* UART-Kommunikation (Txd(D1)/Rxd(D0)) mit dem PC */
alexander0707 13:b1d6b2285b13 427
alexander0707 13:b1d6b2285b13 428
alexander0707 13:b1d6b2285b13 429
alexander0707 13:b1d6b2285b13 430
alexander0707 13:b1d6b2285b13 431
alexander0707 13:b1d6b2285b13 432
alexander0707 13:b1d6b2285b13 433
alexander0707 13:b1d6b2285b13 434
alexander0707 13:b1d6b2285b13 435
alexander0707 13:b1d6b2285b13 436
alexander0707 13:b1d6b2285b13 437
prof_al 0:5ac32d240694 438 /***************************************************************************
prof_al 0:5ac32d240694 439 * main()
prof_al 0:5ac32d240694 440 ***************************************************************************/
prof_al 0:5ac32d240694 441 int main() {
prof_al 0:5ac32d240694 442 /* Variablen initialisieren */
alexander0707 6:4e55101c65f4 443 vSetForStart();
alexander0707 13:b1d6b2285b13 444 Seriel.begin(9600);
alexander0707 5:5c9b508670cf 445
alexander0707 13:b1d6b2285b13 446
alexander0707 13:b1d6b2285b13 447 stComX.attach(&vIsrRxComX, Serial::RxIrq); /* ISR zum Datemempfang vom PC */
alexander0707 13:b1d6b2285b13 448 stComX.attach(&vIsrTxComX, Serial::TxIrq); /* Sende-ISR */
alexander0707 13:b1d6b2285b13 449
alexander0707 13:b1d6b2285b13 450
alexander0707 5:5c9b508670cf 451
alexander0707 6:4e55101c65f4 452 while(1) {
alexander0707 10:fdd52c601fcc 453 wPotiWert = pinPoti*3300;
alexander0707 6:4e55101c65f4 454 vCheckTasten();
alexander0707 10:fdd52c601fcc 455 nDiffWert = wVorgabeWert - wPotiWert;
alexander0707 5:5c9b508670cf 456 switch(bMainState) {
alexander0707 6:4e55101c65f4 457 case enSchwellenwert:
alexander0707 12:bd1417475c5f 458 pinBeep = 1;
alexander0707 5:5c9b508670cf 459 break;
alexander0707 6:4e55101c65f4 460 case enPotiAnzeige:
alexander0707 12:bd1417475c5f 461 pinBeep = 1;
alexander0707 5:5c9b508670cf 462 break;
alexander0707 6:4e55101c65f4 463 case enVergleich:
alexander0707 10:fdd52c601fcc 464 if(nDiffWert<0) pinBeep=0;
alexander0707 6:4e55101c65f4 465 else pinBeep=1;
alexander0707 5:5c9b508670cf 466 break;
prof_al 0:5ac32d240694 467 }
alexander0707 5:5c9b508670cf 468 vSegmentDigit();
alexander0707 6:4e55101c65f4 469 wait_us(nCircleTime);
prof_al 0:5ac32d240694 470 }
alexander0707 5:5c9b508670cf 471 }