HAPO WS22 / Mbed 2 deprecated HAPO_WS22_Labor2_reicht_jetzt

Dependencies:   mbed

Committer:
alexander0707
Date:
Wed Nov 16 18:49:31 2022 +0000
Revision:
0:94f9242d336c
Child:
1:ff198413587f
testttt;

Who changed what in which revision?

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