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