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@0:94f9242d336c, 2022-11-16 (annotated)
- Committer:
- alexander0707
- Date:
- Wed Nov 16 18:49:31 2022 +0000
- Revision:
- 0:94f9242d336c
- Child:
- 1:ff198413587f
testttt;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alexander0707 | 0:94f9242d336c | 1 | /*************************************************************************** |
alexander0707 | 0:94f9242d336c | 2 | * Titel : main.c |
alexander0707 | 0:94f9242d336c | 3 | * |
alexander0707 | 0:94f9242d336c | 4 | * Description : Labormodul "DIBI" |
alexander0707 | 0:94f9242d336c | 5 | * |
alexander0707 | 0:94f9242d336c | 6 | * Revision List: |
alexander0707 | 0:94f9242d336c | 7 | -------------------------------------------------------------------------- |
alexander0707 | 0:94f9242d336c | 8 | Date | Author | Change |
alexander0707 | 0:94f9242d336c | 9 | -------------------------------------------------------------------------- |
alexander0707 | 0:94f9242d336c | 10 | 24.10.22 | J. Altenburg | Ersterstellung |
alexander0707 | 0:94f9242d336c | 11 | -------------------------------------------------------------------------- |
alexander0707 | 0:94f9242d336c | 12 | | | |
alexander0707 | 0:94f9242d336c | 13 | ---------------------------------------------------------------------------- |
alexander0707 | 0:94f9242d336c | 14 | ****************************************************************************/ |
alexander0707 | 0:94f9242d336c | 15 | #include "mbed.h" |
alexander0707 | 0:94f9242d336c | 16 | #include "cdef.h" |
alexander0707 | 0:94f9242d336c | 17 | |
alexander0707 | 0:94f9242d336c | 18 | /* Vereinbarungen zu den Tasteneingängen */ |
alexander0707 | 0:94f9242d336c | 19 | DigitalIn pinS1(A1); |
alexander0707 | 0:94f9242d336c | 20 | DigitalIn pinS2(A2); |
alexander0707 | 0:94f9242d336c | 21 | DigitalIn pinS3(A3); |
alexander0707 | 0:94f9242d336c | 22 | |
alexander0707 | 0:94f9242d336c | 23 | BusOut bLedShield(D10, D11, D12, D13); |
alexander0707 | 0:94f9242d336c | 24 | |
alexander0707 | 0:94f9242d336c | 25 | /* Anschlüsse der Schieberegister */ |
alexander0707 | 0:94f9242d336c | 26 | DigitalOut pinSdo(PA_9); |
alexander0707 | 0:94f9242d336c | 27 | DigitalOut pinSck(PA_8); |
alexander0707 | 0:94f9242d336c | 28 | DigitalOut pinLoad(PB_5); |
alexander0707 | 0:94f9242d336c | 29 | |
alexander0707 | 0:94f9242d336c | 30 | /* ISR */ |
alexander0707 | 0:94f9242d336c | 31 | Ticker stTimer; |
alexander0707 | 0:94f9242d336c | 32 | |
alexander0707 | 0:94f9242d336c | 33 | /*************************************************************************** |
alexander0707 | 0:94f9242d336c | 34 | * Defines und Makros * |
alexander0707 | 0:94f9242d336c | 35 | ***************************************************************************/ |
alexander0707 | 0:94f9242d336c | 36 | #define nTastShort 4 /* Taste 50 Millisekunden gedrückt */ |
alexander0707 | 0:94f9242d336c | 37 | #define nTastLong 150 /* Taste 1.5 Sekunden gedrückt */ |
alexander0707 | 0:94f9242d336c | 38 | |
alexander0707 | 0:94f9242d336c | 39 | #define nSegA 0x01 |
alexander0707 | 0:94f9242d336c | 40 | #define nSegB 0x02 |
alexander0707 | 0:94f9242d336c | 41 | #define nSegC 0x04 |
alexander0707 | 0:94f9242d336c | 42 | #define nSegD 0x08 |
alexander0707 | 0:94f9242d336c | 43 | #define nSegE 0x10 |
alexander0707 | 0:94f9242d336c | 44 | #define nSegF 0x20 |
alexander0707 | 0:94f9242d336c | 45 | #define nSegG 0x40 |
alexander0707 | 0:94f9242d336c | 46 | #define nSegH 0x80 |
alexander0707 | 0:94f9242d336c | 47 | |
alexander0707 | 0:94f9242d336c | 48 | #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF) |
alexander0707 | 0:94f9242d336c | 49 | #define nZiffer1 ~(nSegB | nSegC) |
alexander0707 | 0:94f9242d336c | 50 | #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG) |
alexander0707 | 0:94f9242d336c | 51 | #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG) |
alexander0707 | 0:94f9242d336c | 52 | #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 53 | #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 54 | #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 55 | #define nZiffer7 ~(nSegA | nSegB | nSegC) |
alexander0707 | 0:94f9242d336c | 56 | #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 57 | #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 58 | #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 59 | #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 60 | #define nZifferC ~(nSegA | nSegD | nSegE | nSegF) |
alexander0707 | 0:94f9242d336c | 61 | #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG) |
alexander0707 | 0:94f9242d336c | 62 | #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 63 | #define nZifferF ~(nSegA | nSegE | nSegF | nSegG) |
alexander0707 | 0:94f9242d336c | 64 | #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH) |
alexander0707 | 0:94f9242d336c | 65 | |
alexander0707 | 0:94f9242d336c | 66 | byte bIdx; /* |
alexander0707 | 0:94f9242d336c | 67 | * Description : Index auf Ausgabe |
alexander0707 | 0:94f9242d336c | 68 | */ |
alexander0707 | 0:94f9242d336c | 69 | |
alexander0707 | 0:94f9242d336c | 70 | byte bDigit; /* |
alexander0707 | 0:94f9242d336c | 71 | * Description : aktives Digit |
alexander0707 | 0:94f9242d336c | 72 | */ |
alexander0707 | 0:94f9242d336c | 73 | |
alexander0707 | 0:94f9242d336c | 74 | byte bBargraph; /* |
alexander0707 | 0:94f9242d336c | 75 | * Description : Bargraph durchschalten |
alexander0707 | 0:94f9242d336c | 76 | */ |
alexander0707 | 0:94f9242d336c | 77 | |
alexander0707 | 0:94f9242d336c | 78 | byte bS1Timer; /* |
alexander0707 | 0:94f9242d336c | 79 | * Description : Timer für Taste S1 |
alexander0707 | 0:94f9242d336c | 80 | */ |
alexander0707 | 0:94f9242d336c | 81 | |
alexander0707 | 0:94f9242d336c | 82 | byte bS2Timer; /* |
alexander0707 | 0:94f9242d336c | 83 | * Description : Timer für Taste S2 |
alexander0707 | 0:94f9242d336c | 84 | */ |
alexander0707 | 0:94f9242d336c | 85 | |
alexander0707 | 0:94f9242d336c | 86 | byte bS3Timer; /* |
alexander0707 | 0:94f9242d336c | 87 | * Description : Timer für Taste S3 |
alexander0707 | 0:94f9242d336c | 88 | */ |
alexander0707 | 0:94f9242d336c | 89 | |
alexander0707 | 0:94f9242d336c | 90 | word wSerial; /* |
alexander0707 | 0:94f9242d336c | 91 | * Description : serielles Ausgaberegister |
alexander0707 | 0:94f9242d336c | 92 | */ |
alexander0707 | 0:94f9242d336c | 93 | |
alexander0707 | 0:94f9242d336c | 94 | /* Bitmuster */ |
alexander0707 | 0:94f9242d336c | 95 | const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff}; |
alexander0707 | 0:94f9242d336c | 96 | const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f}; |
alexander0707 | 0:94f9242d336c | 97 | |
alexander0707 | 0:94f9242d336c | 98 | |
alexander0707 | 0:94f9242d336c | 99 | /* Tastenabfrage */ |
alexander0707 | 0:94f9242d336c | 100 | void vTasteS1( void ){ |
alexander0707 | 0:94f9242d336c | 101 | if(pinS1 == 0){ /* User-Taste gedrückt */ |
alexander0707 | 0:94f9242d336c | 102 | if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
alexander0707 | 0:94f9242d336c | 103 | if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 104 | //... |
alexander0707 | 0:94f9242d336c | 105 | } |
alexander0707 | 0:94f9242d336c | 106 | if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 107 | if(bIdx > 0) bIdx--; |
alexander0707 | 0:94f9242d336c | 108 | else bIdx = 16; |
alexander0707 | 0:94f9242d336c | 109 | } |
alexander0707 | 0:94f9242d336c | 110 | bS1Timer++; |
alexander0707 | 0:94f9242d336c | 111 | } |
alexander0707 | 0:94f9242d336c | 112 | } |
alexander0707 | 0:94f9242d336c | 113 | else{ /* Taste nicht gedrückt */ |
alexander0707 | 0:94f9242d336c | 114 | if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
alexander0707 | 0:94f9242d336c | 115 | if(bIdx < 16) bIdx++; |
alexander0707 | 0:94f9242d336c | 116 | else bIdx = 0; |
alexander0707 | 0:94f9242d336c | 117 | } |
alexander0707 | 0:94f9242d336c | 118 | bS1Timer = 0; |
alexander0707 | 0:94f9242d336c | 119 | } |
alexander0707 | 0:94f9242d336c | 120 | } |
alexander0707 | 0:94f9242d336c | 121 | |
alexander0707 | 0:94f9242d336c | 122 | void vTasteS2( void ){ |
alexander0707 | 0:94f9242d336c | 123 | if(pinS2 == 0){ /* User-Taste gedrückt */ |
alexander0707 | 0:94f9242d336c | 124 | if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
alexander0707 | 0:94f9242d336c | 125 | if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 126 | //... |
alexander0707 | 0:94f9242d336c | 127 | } |
alexander0707 | 0:94f9242d336c | 128 | if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 129 | if(bDigit > 0b00000001) bDigit = bDigit>>1; |
alexander0707 | 0:94f9242d336c | 130 | else bDigit = 0b00001000; |
alexander0707 | 0:94f9242d336c | 131 | } |
alexander0707 | 0:94f9242d336c | 132 | bS2Timer++; |
alexander0707 | 0:94f9242d336c | 133 | } |
alexander0707 | 0:94f9242d336c | 134 | } |
alexander0707 | 0:94f9242d336c | 135 | else{ /* Taste nicht gedrückt */ |
alexander0707 | 0:94f9242d336c | 136 | if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
alexander0707 | 0:94f9242d336c | 137 | if(bDigit < 0b00001000) bDigit = bDigit<<1; |
alexander0707 | 0:94f9242d336c | 138 | else bDigit = 0b00000001; |
alexander0707 | 0:94f9242d336c | 139 | } |
alexander0707 | 0:94f9242d336c | 140 | bS2Timer = 0; |
alexander0707 | 0:94f9242d336c | 141 | } |
alexander0707 | 0:94f9242d336c | 142 | } |
alexander0707 | 0:94f9242d336c | 143 | |
alexander0707 | 0:94f9242d336c | 144 | void vTasteS3( void ){ |
alexander0707 | 0:94f9242d336c | 145 | if(pinS3 == 0){ /* User-Taste gedrückt */ |
alexander0707 | 0:94f9242d336c | 146 | if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ |
alexander0707 | 0:94f9242d336c | 147 | if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 148 | //... |
alexander0707 | 0:94f9242d336c | 149 | } |
alexander0707 | 0:94f9242d336c | 150 | if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ |
alexander0707 | 0:94f9242d336c | 151 | bBargraph--; |
alexander0707 | 0:94f9242d336c | 152 | } |
alexander0707 | 0:94f9242d336c | 153 | bS3Timer++; |
alexander0707 | 0:94f9242d336c | 154 | } |
alexander0707 | 0:94f9242d336c | 155 | } |
alexander0707 | 0:94f9242d336c | 156 | else{ /* Taste nicht gedrückt */ |
alexander0707 | 0:94f9242d336c | 157 | if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ |
alexander0707 | 0:94f9242d336c | 158 | bBargraph++; |
alexander0707 | 0:94f9242d336c | 159 | } |
alexander0707 | 0:94f9242d336c | 160 | bS3Timer = 0; |
alexander0707 | 0:94f9242d336c | 161 | } |
alexander0707 | 0:94f9242d336c | 162 | } |
alexander0707 | 0:94f9242d336c | 163 | |
alexander0707 | 0:94f9242d336c | 164 | |
alexander0707 | 0:94f9242d336c | 165 | |
alexander0707 | 0:94f9242d336c | 166 | void vCheckTasten( void ){ |
alexander0707 | 0:94f9242d336c | 167 | vTasteS1(); |
alexander0707 | 0:94f9242d336c | 168 | vTasteS2(); |
alexander0707 | 0:94f9242d336c | 169 | vTasteS3(); |
alexander0707 | 0:94f9242d336c | 170 | } |
alexander0707 | 0:94f9242d336c | 171 | |
alexander0707 | 0:94f9242d336c | 172 | /* Ausschieben der 16 Bits für die Anzeige */ |
alexander0707 | 0:94f9242d336c | 173 | void vShiftLoad(word wLoad){ |
alexander0707 | 0:94f9242d336c | 174 | word wMask = Bit15; |
alexander0707 | 0:94f9242d336c | 175 | pinLoad = 0; |
alexander0707 | 0:94f9242d336c | 176 | while(wMask){ |
alexander0707 | 0:94f9242d336c | 177 | if(wMask & wLoad) pinSdo = 1; |
alexander0707 | 0:94f9242d336c | 178 | else pinSdo = 0; |
alexander0707 | 0:94f9242d336c | 179 | pinSck = 1; |
alexander0707 | 0:94f9242d336c | 180 | wMask >>= 1; |
alexander0707 | 0:94f9242d336c | 181 | pinSck = 0; |
alexander0707 | 0:94f9242d336c | 182 | } |
alexander0707 | 0:94f9242d336c | 183 | pinLoad = 1; |
alexander0707 | 0:94f9242d336c | 184 | } |
alexander0707 | 0:94f9242d336c | 185 | |
alexander0707 | 0:94f9242d336c | 186 | /*************************************************************************** |
alexander0707 | 0:94f9242d336c | 187 | * main() |
alexander0707 | 0:94f9242d336c | 188 | ***************************************************************************/ |
alexander0707 | 0:94f9242d336c | 189 | int main() { |
alexander0707 | 0:94f9242d336c | 190 | /* Variablen initialisieren */ |
alexander0707 | 0:94f9242d336c | 191 | bIdx = 0; |
alexander0707 | 0:94f9242d336c | 192 | bDigit = 0b00000001; |
alexander0707 | 0:94f9242d336c | 193 | bLedShield = 0x00; |
alexander0707 | 0:94f9242d336c | 194 | while(1) { |
alexander0707 | 0:94f9242d336c | 195 | bRandomTaste++; |
alexander0707 | 0:94f9242d336c | 196 | if(bRandomTaste > 2) bRandomTaste = 0; /* zufällige LED/Taste bestimmen */ |
alexander0707 | 0:94f9242d336c | 197 | wRandomClock++; |
alexander0707 | 0:94f9242d336c | 198 | if(wRandomClock > 800) wRandomClock = 0; /* Zufallszeit erzeugen */ |
alexander0707 | 0:94f9242d336c | 199 | switch(bMainState) { |
alexander0707 | 0:94f9242d336c | 200 | case enWaitForStart: |
alexander0707 | 0:94f9242d336c | 201 | wDelayGame++; |
alexander0707 | 0:94f9242d336c | 202 | if(wDelayGame > 1200) { /* 3 Sekundenminimum */ |
alexander0707 | 0:94f9242d336c | 203 | wDelayGame = wRandomClock; |
alexander0707 | 0:94f9242d336c | 204 | bMainState = enWaitForRun; |
alexander0707 | 0:94f9242d336c | 205 | } |
alexander0707 | 0:94f9242d336c | 206 | break; |
alexander0707 | 0:94f9242d336c | 207 | case enRunClock: |
alexander0707 | 0:94f9242d336c | 208 | bBeepTime--; |
alexander0707 | 0:94f9242d336c | 209 | if(bBeepTime == 0)pinBeep = 1; |
alexander0707 | 0:94f9242d336c | 210 | bMainState = bCheckTasten(enRunClock); |
alexander0707 | 0:94f9242d336c | 211 | break; |
alexander0707 | 0:94f9242d336c | 212 | case enWaitForRun: |
alexander0707 | 0:94f9242d336c | 213 | break; |
alexander0707 | 0:94f9242d336c | 214 | case enShowResult: |
alexander0707 | 0:94f9242d336c | 215 | break; |
alexander0707 | 0:94f9242d336c | 216 | case enShowError: |
alexander0707 | 0:94f9242d336c | 217 | break; |
alexander0707 | 0:94f9242d336c | 218 | } |
alexander0707 | 0:94f9242d336c | 219 | } |