Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@9:b30caa6d008f, 2022-12-04 (annotated)
- Committer:
- alexander0707
- Date:
- Sun Dec 04 14:14:45 2022 +0000
- Revision:
- 9:b30caa6d008f
- Parent:
- 8:6f91c39dbabc
- Child:
- 10:fdd52c601fcc
v1.9
Who changed what in which revision?
| User | Revision | Line number | New 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 | |
| prof_al | 0:5ac32d240694 | 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 | 5:5c9b508670cf | 49 | #define nTastLong 600 /* Taste 1.5 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 | 5:5c9b508670cf | 147 | |
| prof_al | 0:5ac32d240694 | 148 | word wSerial; /* | 
| prof_al | 0:5ac32d240694 | 149 | * Description : serielles Ausgaberegister | 
| prof_al | 0:5ac32d240694 | 150 | */ | 
| prof_al | 0:5ac32d240694 | 151 | |
| alexander0707 | 5:5c9b508670cf | 152 | word wClockTime; /* | 
| alexander0707 | 5:5c9b508670cf | 153 | *Description : Timer für verstrichene Zeit | 
| alexander0707 | 5:5c9b508670cf | 154 | */ | 
| alexander0707 | 5:5c9b508670cf | 155 | |
| alexander0707 | 5:5c9b508670cf | 156 | word wClockShow; /* | 
| alexander0707 | 5:5c9b508670cf | 157 | *Description : Timer für verstrichene Zeit | 
| alexander0707 | 5:5c9b508670cf | 158 | */ | 
| alexander0707 | 5:5c9b508670cf | 159 | |
| alexander0707 | 5:5c9b508670cf | 160 | word wDelayGame; /* | 
| alexander0707 | 5:5c9b508670cf | 161 | * Description : Verzögerungstimer | 
| alexander0707 | 5:5c9b508670cf | 162 | */ | 
| alexander0707 | 5:5c9b508670cf | 163 | |
| alexander0707 | 5:5c9b508670cf | 164 | word wPotiWert; /* | 
| alexander0707 | 5:5c9b508670cf | 165 | * Description : Wert des Potis | 
| alexander0707 | 5:5c9b508670cf | 166 | */ | 
| alexander0707 | 5:5c9b508670cf | 167 | |
| alexander0707 | 5:5c9b508670cf | 168 | word wVorgabeWert; /* | 
| alexander0707 | 5:5c9b508670cf | 169 | * Description : engestellter Vorgabewert | 
| alexander0707 | 5:5c9b508670cf | 170 | */ | 
| alexander0707 | 5:5c9b508670cf | 171 | |
| alexander0707 | 6:4e55101c65f4 | 172 | word wDiffWert; /* | 
| alexander0707 | 6:4e55101c65f4 | 173 | * Description : Differenz zwischen Vorgabe und Eingang | 
| alexander0707 | 6:4e55101c65f4 | 174 | */ | 
| alexander0707 | 6:4e55101c65f4 | 175 | |
| prof_al | 0:5ac32d240694 | 176 | /* Bitmuster */ | 
| prof_al | 0:5ac32d240694 | 177 | const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff}; | 
| prof_al | 0:5ac32d240694 | 178 | const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f}; | 
| prof_al | 0:5ac32d240694 | 179 | |
| prof_al | 0:5ac32d240694 | 180 | |
| prof_al | 0:5ac32d240694 | 181 | void vShiftLoad(word wLoad){ | 
| prof_al | 0:5ac32d240694 | 182 | word wMask = Bit15; | 
| prof_al | 0:5ac32d240694 | 183 | pinLoad = 0; | 
| prof_al | 0:5ac32d240694 | 184 | while(wMask){ | 
| prof_al | 0:5ac32d240694 | 185 | if(wMask & wLoad) pinSdo = 1; | 
| prof_al | 0:5ac32d240694 | 186 | else pinSdo = 0; | 
| prof_al | 0:5ac32d240694 | 187 | pinSck = 1; | 
| prof_al | 0:5ac32d240694 | 188 | wMask >>= 1; | 
| prof_al | 0:5ac32d240694 | 189 | pinSck = 0; | 
| prof_al | 0:5ac32d240694 | 190 | } | 
| prof_al | 0:5ac32d240694 | 191 | pinLoad = 1; | 
| prof_al | 0:5ac32d240694 | 192 | } | 
| prof_al | 0:5ac32d240694 | 193 | |
| alexander0707 | 5:5c9b508670cf | 194 | |
| alexander0707 | 5:5c9b508670cf | 195 | byte abDisplayMemory[] = {16,16,16,16}; /* alle Segmente aus */ | 
| alexander0707 | 5:5c9b508670cf | 196 | |
| alexander0707 | 6:4e55101c65f4 | 197 | void vDisplayVolt( word w ) | 
| alexander0707 | 5:5c9b508670cf | 198 | { | 
| alexander0707 | 5:5c9b508670cf | 199 | int16 v; | 
| alexander0707 | 5:5c9b508670cf | 200 | abDisplayMemory[0] = 16; /* Aus */ | 
| alexander0707 | 8:6f91c39dbabc | 201 | v = (byte)(w / 1000); | 
| alexander0707 | 8:6f91c39dbabc | 202 | abDisplayMemory[1] = v; /* Hunderter */ | 
| alexander0707 | 8:6f91c39dbabc | 203 | w = w - (v * 1000); | 
| alexander0707 | 5:5c9b508670cf | 204 | v = (byte)(w / 100); | 
| alexander0707 | 8:6f91c39dbabc | 205 | abDisplayMemory[2] = v; /* Zehner */ | 
| alexander0707 | 5:5c9b508670cf | 206 | w = w - (v * 100); | 
| alexander0707 | 5:5c9b508670cf | 207 | v = (byte)(w / 10); | 
| alexander0707 | 8:6f91c39dbabc | 208 | abDisplayMemory[3] = v; /* Einer */ | 
| alexander0707 | 5:5c9b508670cf | 209 | } | 
| alexander0707 | 6:4e55101c65f4 | 210 | |
| alexander0707 | 6:4e55101c65f4 | 211 | void vDisplayDiff( word w ) | 
| alexander0707 | 5:5c9b508670cf | 212 | { | 
| alexander0707 | 6:4e55101c65f4 | 213 | int16 v; | 
| alexander0707 | 6:4e55101c65f4 | 214 | abDisplayMemory[0] = 12; /* "C" */ | 
| alexander0707 | 8:6f91c39dbabc | 215 | v = (byte)(w / 1000); | 
| alexander0707 | 8:6f91c39dbabc | 216 | abDisplayMemory[1] = v; /* Hunderter */ | 
| alexander0707 | 8:6f91c39dbabc | 217 | w = w - (v * 1000); | 
| alexander0707 | 6:4e55101c65f4 | 218 | v = (byte)(w / 100); | 
| alexander0707 | 8:6f91c39dbabc | 219 | abDisplayMemory[2] = v; /* Zehner */ | 
| alexander0707 | 6:4e55101c65f4 | 220 | w = w - (v * 100); | 
| alexander0707 | 6:4e55101c65f4 | 221 | v = (byte)(w / 10); | 
| alexander0707 | 8:6f91c39dbabc | 222 | abDisplayMemory[3] = v; /* Einer */ | 
| alexander0707 | 6:4e55101c65f4 | 223 | } | 
| alexander0707 | 6:4e55101c65f4 | 224 | |
| alexander0707 | 6:4e55101c65f4 | 225 | void vSetForStart( void ) | 
| alexander0707 | 6:4e55101c65f4 | 226 | { | 
| alexander0707 | 6:4e55101c65f4 | 227 | abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */ | 
| alexander0707 | 5:5c9b508670cf | 228 | abDisplayMemory[1] = 16; | 
| alexander0707 | 5:5c9b508670cf | 229 | abDisplayMemory[2] = 16; | 
| alexander0707 | 5:5c9b508670cf | 230 | abDisplayMemory[3] = 16; | 
| alexander0707 | 5:5c9b508670cf | 231 | bTimerDot = 0; | 
| alexander0707 | 5:5c9b508670cf | 232 | bDigit = 0; | 
| alexander0707 | 6:4e55101c65f4 | 233 | bMainState = enSchwellenwert; | 
| alexander0707 | 6:4e55101c65f4 | 234 | bDisplayState = enSchwellenwert; | 
| alexander0707 | 6:4e55101c65f4 | 235 | pinBeep = 1; | 
| alexander0707 | 6:4e55101c65f4 | 236 | wVorgabeWert = 0; | 
| alexander0707 | 5:5c9b508670cf | 237 | } | 
| alexander0707 | 6:4e55101c65f4 | 238 | /* | 
| alexander0707 | 5:5c9b508670cf | 239 | void vSetRunClock( void ) | 
| alexander0707 | 5:5c9b508670cf | 240 | { | 
| alexander0707 | 5:5c9b508670cf | 241 | wClockTime = 0; | 
| alexander0707 | 5:5c9b508670cf | 242 | bDigit = 0; | 
| alexander0707 | 7:94c73e4168d8 | 243 | abDisplayMemory[0] = 16; 7-Segment-Display ausschalten | 
| alexander0707 | 5:5c9b508670cf | 244 | abDisplayMemory[1] = 0; | 
| alexander0707 | 5:5c9b508670cf | 245 | abDisplayMemory[2] = 0; | 
| alexander0707 | 5:5c9b508670cf | 246 | abDisplayMemory[3] = 0; | 
| alexander0707 | 5:5c9b508670cf | 247 | bDisplayState = enRunClock; | 
| alexander0707 | 5:5c9b508670cf | 248 | } | 
| alexander0707 | 5:5c9b508670cf | 249 | */ | 
| alexander0707 | 5:5c9b508670cf | 250 | /* | 
| alexander0707 | 5:5c9b508670cf | 251 | byte bCheckTasten( byte bState ) | 
| alexander0707 | 5:5c9b508670cf | 252 | { | 
| alexander0707 | 7:94c73e4168d8 | 253 | if((pinS1 == 0) || (pinS2 == 0) || (pinS3 == 0)) { Tastendruck erkannt | 
| alexander0707 | 5:5c9b508670cf | 254 | wClockShow = 1200; | 
| alexander0707 | 5:5c9b508670cf | 255 | if((pinS1 == 0) && (bHotKey == 0)) { | 
| alexander0707 | 5:5c9b508670cf | 256 | wDelayGame = 0; | 
| alexander0707 | 5:5c9b508670cf | 257 | bState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 258 | bDisplayState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 259 | } else if((pinS2 == 0) && (bHotKey == 1)) { | 
| alexander0707 | 5:5c9b508670cf | 260 | wDelayGame = 0; | 
| alexander0707 | 5:5c9b508670cf | 261 | bState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 262 | bDisplayState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 263 | } else if((pinS3 == 0) && (bHotKey == 2)) { | 
| alexander0707 | 5:5c9b508670cf | 264 | wDelayGame = 0; | 
| alexander0707 | 5:5c9b508670cf | 265 | bState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 266 | bDisplayState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 267 | } else { | 
| alexander0707 | 5:5c9b508670cf | 268 | wDelayGame = 200; | 
| alexander0707 | 5:5c9b508670cf | 269 | abDisplayMemory[1] = 15; | 
| alexander0707 | 5:5c9b508670cf | 270 | abDisplayMemory[2] = 15; | 
| alexander0707 | 5:5c9b508670cf | 271 | abDisplayMemory[3] = 15; | 
| alexander0707 | 5:5c9b508670cf | 272 | bState = enShowError; | 
| alexander0707 | 5:5c9b508670cf | 273 | bDisplayState = enShowResult; | 
| alexander0707 | 5:5c9b508670cf | 274 | pinBeep = 0; | 
| alexander0707 | 5:5c9b508670cf | 275 | } | 
| alexander0707 | 5:5c9b508670cf | 276 | } | 
| alexander0707 | 5:5c9b508670cf | 277 | return bState; | 
| alexander0707 | 5:5c9b508670cf | 278 | } | 
| alexander0707 | 5:5c9b508670cf | 279 | */ | 
| alexander0707 | 5:5c9b508670cf | 280 | /* Tastenabfrage */ | 
| alexander0707 | 5:5c9b508670cf | 281 | void vTasteS1( void ){ | 
| alexander0707 | 5:5c9b508670cf | 282 | if(pinS1 == 0){ /* User-Taste gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 283 | if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 284 | if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ | 
| alexander0707 | 5:5c9b508670cf | 285 | //... | 
| alexander0707 | 5:5c9b508670cf | 286 | } | 
| alexander0707 | 5:5c9b508670cf | 287 | if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ | 
| alexander0707 | 7:94c73e4168d8 | 288 | if(bDisplayState == enSchwellenwert || bDisplayState == enPotiAnzeige){ | 
| alexander0707 | 6:4e55101c65f4 | 289 | bDisplayState = enVergleich; | 
| alexander0707 | 6:4e55101c65f4 | 290 | bMainState = enVergleich; | 
| alexander0707 | 6:4e55101c65f4 | 291 | } | 
| alexander0707 | 6:4e55101c65f4 | 292 | else{ | 
| alexander0707 | 6:4e55101c65f4 | 293 | bDisplayState = enSchwellenwert; | 
| alexander0707 | 6:4e55101c65f4 | 294 | bMainState = enSchwellenwert; | 
| alexander0707 | 6:4e55101c65f4 | 295 | } | 
| alexander0707 | 6:4e55101c65f4 | 296 | } | 
| alexander0707 | 6:4e55101c65f4 | 297 | bS1Timer++; | 
| alexander0707 | 6:4e55101c65f4 | 298 | } | 
| alexander0707 | 6:4e55101c65f4 | 299 | } | 
| alexander0707 | 6:4e55101c65f4 | 300 | else{ /* Taste nicht gedrückt */ | 
| alexander0707 | 6:4e55101c65f4 | 301 | if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ | 
| alexander0707 | 7:94c73e4168d8 | 302 | if(bDisplayState == enSchwellenwert){ | 
| alexander0707 | 5:5c9b508670cf | 303 | bDisplayState = enPotiAnzeige; | 
| alexander0707 | 5:5c9b508670cf | 304 | bMainState = enPotiAnzeige; | 
| alexander0707 | 5:5c9b508670cf | 305 | } | 
| alexander0707 | 5:5c9b508670cf | 306 | else{ | 
| alexander0707 | 5:5c9b508670cf | 307 | bDisplayState = enSchwellenwert; | 
| alexander0707 | 5:5c9b508670cf | 308 | bMainState= enSchwellenwert; | 
| alexander0707 | 5:5c9b508670cf | 309 | } | 
| alexander0707 | 5:5c9b508670cf | 310 | } | 
| alexander0707 | 5:5c9b508670cf | 311 | bS1Timer = 0; | 
| alexander0707 | 5:5c9b508670cf | 312 | } | 
| alexander0707 | 5:5c9b508670cf | 313 | } | 
| alexander0707 | 5:5c9b508670cf | 314 | |
| alexander0707 | 5:5c9b508670cf | 315 | void vTasteS2( void ){ | 
| alexander0707 | 5:5c9b508670cf | 316 | if(pinS2 == 0){ /* User-Taste gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 317 | if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 318 | if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ | 
| alexander0707 | 5:5c9b508670cf | 319 | //... | 
| alexander0707 | 5:5c9b508670cf | 320 | } | 
| alexander0707 | 5:5c9b508670cf | 321 | if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ | 
| alexander0707 | 6:4e55101c65f4 | 322 | bTimeLong = 1; | 
| alexander0707 | 9:b30caa6d008f | 323 | wVorgabeWert = wVorgabeWert + 100; | 
| alexander0707 | 9:b30caa6d008f | 324 | bS2Timer = bS2Timer - 40; | 
| alexander0707 | 5:5c9b508670cf | 325 | } | 
| alexander0707 | 5:5c9b508670cf | 326 | bS2Timer++; | 
| alexander0707 | 5:5c9b508670cf | 327 | } | 
| alexander0707 | 5:5c9b508670cf | 328 | } | 
| alexander0707 | 5:5c9b508670cf | 329 | else{ /* Taste nicht gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 330 | if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ | 
| alexander0707 | 9:b30caa6d008f | 331 | if(bTimeLong==0) wVorgabeWert = wVorgabeWert + 10; | 
| alexander0707 | 5:5c9b508670cf | 332 | } | 
| alexander0707 | 5:5c9b508670cf | 333 | bS2Timer = 0; | 
| alexander0707 | 6:4e55101c65f4 | 334 | bTimeLong= 0; | 
| alexander0707 | 5:5c9b508670cf | 335 | } | 
| alexander0707 | 5:5c9b508670cf | 336 | } | 
| alexander0707 | 5:5c9b508670cf | 337 | |
| alexander0707 | 5:5c9b508670cf | 338 | void vTasteS3( void ){ | 
| alexander0707 | 5:5c9b508670cf | 339 | if(pinS3 == 0){ /* User-Taste gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 340 | if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 341 | if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ | 
| alexander0707 | 5:5c9b508670cf | 342 | //... | 
| alexander0707 | 5:5c9b508670cf | 343 | } | 
| alexander0707 | 5:5c9b508670cf | 344 | if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ | 
| alexander0707 | 6:4e55101c65f4 | 345 | bTimeLong = 1; | 
| alexander0707 | 9:b30caa6d008f | 346 | wVorgabeWert = wVorgabeWert - 100; | 
| alexander0707 | 9:b30caa6d008f | 347 | bS2Timer = bS2Timer - 40; | 
| alexander0707 | 5:5c9b508670cf | 348 | } | 
| alexander0707 | 5:5c9b508670cf | 349 | bS3Timer++; | 
| alexander0707 | 5:5c9b508670cf | 350 | } | 
| alexander0707 | 5:5c9b508670cf | 351 | } | 
| alexander0707 | 5:5c9b508670cf | 352 | else{ /* Taste nicht gedrückt */ | 
| alexander0707 | 5:5c9b508670cf | 353 | if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ | 
| alexander0707 | 9:b30caa6d008f | 354 | if(bTimeLong==0) wVorgabeWert = wVorgabeWert - 10; | 
| alexander0707 | 5:5c9b508670cf | 355 | } | 
| alexander0707 | 5:5c9b508670cf | 356 | bS3Timer = 0; | 
| alexander0707 | 6:4e55101c65f4 | 357 | bTimeLong= 0; | 
| alexander0707 | 5:5c9b508670cf | 358 | } | 
| alexander0707 | 5:5c9b508670cf | 359 | } | 
| alexander0707 | 5:5c9b508670cf | 360 | |
| alexander0707 | 5:5c9b508670cf | 361 | |
| alexander0707 | 5:5c9b508670cf | 362 | |
| alexander0707 | 5:5c9b508670cf | 363 | void vCheckTasten( void ){ | 
| alexander0707 | 5:5c9b508670cf | 364 | vTasteS1(); | 
| alexander0707 | 5:5c9b508670cf | 365 | vTasteS2(); | 
| alexander0707 | 5:5c9b508670cf | 366 | vTasteS3(); | 
| alexander0707 | 5:5c9b508670cf | 367 | } | 
| alexander0707 | 5:5c9b508670cf | 368 | void vSegmentDigit( void ) //wichtig!! | 
| alexander0707 | 5:5c9b508670cf | 369 | { | 
| alexander0707 | 5:5c9b508670cf | 370 | bDigit++; | 
| alexander0707 | 5:5c9b508670cf | 371 | wSerial = abZiffer[abDisplayMemory[bDigit&0x03]]; | 
| alexander0707 | 5:5c9b508670cf | 372 | switch(bDisplayState) { | 
| alexander0707 | 5:5c9b508670cf | 373 | case enSchwellenwert: | 
| alexander0707 | 5:5c9b508670cf | 374 | bTimerDot++; /* Zähler für Punktwechsel */ | 
| alexander0707 | 6:4e55101c65f4 | 375 | vDisplayVolt(wVorgabeWert); | 
| alexander0707 | 6:4e55101c65f4 | 376 | if(bTimerDot == 400) { | 
| alexander0707 | 7:94c73e4168d8 | 377 | if((bDigit&0x03) == 0x01) { | 
| alexander0707 | 7:94c73e4168d8 | 378 | wSerial = wSerial & ~nSegH; /* Punktanzeigen */ | 
| alexander0707 | 7:94c73e4168d8 | 379 | } | 
| alexander0707 | 5:5c9b508670cf | 380 | bTimerDot = 0; | 
| alexander0707 | 5:5c9b508670cf | 381 | } | 
| alexander0707 | 5:5c9b508670cf | 382 | break; | 
| alexander0707 | 5:5c9b508670cf | 383 | case enPotiAnzeige: | 
| alexander0707 | 6:4e55101c65f4 | 384 | vDisplayVolt(wPotiWert); | 
| alexander0707 | 5:5c9b508670cf | 385 | if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */ | 
| alexander0707 | 5:5c9b508670cf | 386 | wSerial = wSerial & ~nSegH; | 
| alexander0707 | 5:5c9b508670cf | 387 | } | 
| alexander0707 | 5:5c9b508670cf | 388 | break; | 
| alexander0707 | 5:5c9b508670cf | 389 | case enVergleich: | 
| alexander0707 | 6:4e55101c65f4 | 390 | vDisplayDiff(wDiffWert); | 
| alexander0707 | 5:5c9b508670cf | 391 | if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */ | 
| alexander0707 | 5:5c9b508670cf | 392 | wSerial = wSerial & ~nSegH; | 
| alexander0707 | 5:5c9b508670cf | 393 | } | 
| alexander0707 | 5:5c9b508670cf | 394 | break; | 
| alexander0707 | 5:5c9b508670cf | 395 | } | 
| alexander0707 | 5:5c9b508670cf | 396 | vShiftLoad(((wSerial << 8) & 0xfff0)| (1 << (bDigit&0x03))); | 
| alexander0707 | 5:5c9b508670cf | 397 | } | 
| alexander0707 | 5:5c9b508670cf | 398 | |
| alexander0707 | 5:5c9b508670cf | 399 | |
| prof_al | 0:5ac32d240694 | 400 | /*************************************************************************** | 
| prof_al | 0:5ac32d240694 | 401 | * main() | 
| prof_al | 0:5ac32d240694 | 402 | ***************************************************************************/ | 
| prof_al | 0:5ac32d240694 | 403 | int main() { | 
| prof_al | 0:5ac32d240694 | 404 | /* Variablen initialisieren */ | 
| alexander0707 | 6:4e55101c65f4 | 405 | vSetForStart(); | 
| alexander0707 | 5:5c9b508670cf | 406 | |
| alexander0707 | 6:4e55101c65f4 | 407 | //Seriel.begin(9600); | 
| alexander0707 | 5:5c9b508670cf | 408 | |
| alexander0707 | 6:4e55101c65f4 | 409 | while(1) { | 
| alexander0707 | 7:94c73e4168d8 | 410 | wPotiWert = pinPoti*3,3; | 
| alexander0707 | 6:4e55101c65f4 | 411 | vCheckTasten(); | 
| alexander0707 | 6:4e55101c65f4 | 412 | wDiffWert = wVorgabeWert - wPotiWert; | 
| alexander0707 | 5:5c9b508670cf | 413 | switch(bMainState) { | 
| alexander0707 | 6:4e55101c65f4 | 414 | case enSchwellenwert: | 
| alexander0707 | 6:4e55101c65f4 | 415 | if(wVorgabeWert>3300){ | 
| alexander0707 | 6:4e55101c65f4 | 416 | wVorgabeWert=3300; | 
| alexander0707 | 6:4e55101c65f4 | 417 | } | 
| alexander0707 | 6:4e55101c65f4 | 418 | if(wVorgabeWert<0){ | 
| alexander0707 | 6:4e55101c65f4 | 419 | wVorgabeWert=0; | 
| alexander0707 | 5:5c9b508670cf | 420 | } | 
| alexander0707 | 5:5c9b508670cf | 421 | break; | 
| alexander0707 | 6:4e55101c65f4 | 422 | case enPotiAnzeige: | 
| alexander0707 | 5:5c9b508670cf | 423 | break; | 
| alexander0707 | 6:4e55101c65f4 | 424 | case enVergleich: | 
| alexander0707 | 6:4e55101c65f4 | 425 | if(wDiffWert<0) pinBeep=0; | 
| alexander0707 | 6:4e55101c65f4 | 426 | else pinBeep=1; | 
| alexander0707 | 5:5c9b508670cf | 427 | break; | 
| prof_al | 0:5ac32d240694 | 428 | } | 
| alexander0707 | 5:5c9b508670cf | 429 | vSegmentDigit(); | 
| alexander0707 | 6:4e55101c65f4 | 430 | wait_us(nCircleTime); | 
| prof_al | 0:5ac32d240694 | 431 | } | 
| alexander0707 | 5:5c9b508670cf | 432 | } |