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
Diff: main.cpp
- Revision:
- 6:4e55101c65f4
- Parent:
- 5:5c9b508670cf
- Child:
- 7:94c73e4168d8
--- a/main.cpp Sun Dec 04 00:14:49 2022 +0000
+++ b/main.cpp Sun Dec 04 13:08:27 2022 +0000
@@ -37,7 +37,7 @@
DigitalOut pinSdo(PA_9);
DigitalOut pinSck(PA_8);
DigitalOut pinLoad(PB_5);
-//DigitalOut pinBeep(PB_3);
+DigitalOut pinBeep(PB_3);
/* ISR */
Ticker stTimer;
@@ -142,6 +142,10 @@
* Description : Einstellungszustand
*/
+byte bTimeLong;/*
+* Description : Ob Taste bereits lange gedrückt war
+*/
+
word wSerial; /*
* Description : serielles Ausgaberegister
@@ -167,6 +171,10 @@
* Description : engestellter Vorgabewert
*/
+word wDiffWert; /*
+* Description : Differenz zwischen Vorgabe und Eingang
+*/
+
/* Bitmuster */
const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff};
const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f};
@@ -188,7 +196,7 @@
byte abDisplayMemory[] = {16,16,16,16}; /* alle Segmente aus */
-void vDisplayClock( word w )
+void vDisplayVolt( word w )
{
int16 v;
abDisplayMemory[0] = 16; /* Aus */
@@ -200,18 +208,34 @@
w = w - (v * 10);
abDisplayMemory[3] = (byte)w; /* Einer */
}
-/*
-void vSetWaitForStart( void )
+
+void vDisplayDiff( word w )
{
- abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten
+ int16 v;
+ abDisplayMemory[0] = 12; /* "C" */
+ v = (byte)(w / 100);
+ abDisplayMemory[1] = v; /* Hunderter */
+ w = w - (v * 100);
+ v = (byte)(w / 10);
+ abDisplayMemory[2] = v; /* Zehner */
+ w = w - (v * 10);
+ abDisplayMemory[3] = (byte)w; /* Einer */
+}
+
+void vSetForStart( void )
+{
+ abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */
abDisplayMemory[1] = 16;
abDisplayMemory[2] = 16;
abDisplayMemory[3] = 16;
- bDisplayState = enWaitForStart;
bTimerDot = 0;
bDigit = 0;
+ bMainState = enSchwellenwert;
+ bDisplayState = enSchwellenwert;
+ pinBeep = 1;
+ wVorgabeWert = 0;
}
-
+/*
void vSetRunClock( void )
{
wClockTime = 0;
@@ -261,7 +285,21 @@
//...
}
if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
- if(bDisplayState = enSchwellenwert){
+ if(bDisplayState = enSchwellenwert || bDisplayState = enPotiAnzeige){
+ bDisplayState = enVergleich;
+ bMainState = enVergleich;
+ }
+ else{
+ bDisplayState = enSchwellenwert;
+ bMainState = enSchwellenwert;
+ }
+ }
+ bS1Timer++;
+ }
+ }
+ else{ /* Taste nicht gedrückt */
+ if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
+ if(bDisplayState = enSchwellenwert){
bDisplayState = enPotiAnzeige;
bMainState = enPotiAnzeige;
}
@@ -269,20 +307,6 @@
bDisplayState = enSchwellenwert;
bMainState= enSchwellenwert;
}
- }
- bS1Timer++;
- }
- }
- else{ /* Taste nicht gedrückt */
- if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
- if(bDisplayState = enSchwellenwert || bDisplayState = enPotiAnzeige){
- bDisplayState = enVergleich;
- bMainState = enVergleich;
- }
- else{
- bDisplayState = enSchwellenwert;
- bMainState = enSchwellenwert;
- }
}
bS1Timer = 0;
}
@@ -295,16 +319,19 @@
//...
}
if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
- //...
+ bTimeLong = 1;
+ wVorgabeWert += 100;
+ bS2Timer -= 40;
}
bS2Timer++;
}
}
else{ /* Taste nicht gedrückt */
if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
- //...
+ if(bTimeLong=1) wVorgabeWert += 10;
}
bS2Timer = 0;
+ bTimeLong= 0;
}
}
@@ -315,16 +342,19 @@
//...
}
if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */
- //...
+ bTimeLong = 1;
+ wVorgabeWert -= 100;
+ bS2Timer -= 40;
}
bS3Timer++;
}
}
else{ /* Taste nicht gedrückt */
if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */
- //...
+ if(bTimeLong=1) wVorgabeWert += 10;
}
bS3Timer = 0;
+ bTimeLong= 0;
}
}
@@ -342,27 +372,22 @@
switch(bDisplayState) {
case enSchwellenwert:
bTimerDot++; /* Zähler für Punktwechsel */
- if(bTimerDot == 50) {
+ vDisplayVolt(wVorgabeWert);
+ if(bTimerDot == 400) {
bTimerDot = 0;
- bDisplayDot = (bDisplayDot + 1) & 0x03;
}
- if(bDisplayDot == (bDigit&0x03)) {
+ if((bDigit&0x03) == 0x01) {
wSerial = wSerial & ~nSegH; /* Punktanzeigen */
}
break;
case enPotiAnzeige:
- if((bDigit&0x03) == 0x03){ /* Ablauf von 10 ms */
- wClockTime++;
- if(wClockTime > 999) {
- wClockTime = 0;
- }
- vDisplayClock(wClockTime);
- }
+ vDisplayVolt(wPotiWert);
if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
wSerial = wSerial & ~nSegH;
}
break;
case enVergleich:
+ vDisplayDiff(wDiffWert);
if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
wSerial = wSerial & ~nSegH;
}
@@ -371,86 +396,37 @@
vShiftLoad(((wSerial << 8) & 0xfff0)| (1 << (bDigit&0x03)));
}
-void vBargraph(byte bTaste){
- switch(bTaste){
- case 0 :
- bLedShield =0b1110;
- break;
- case 1 :
- bLedShield =0b1101;
- break;
- case 2 :
- bLedShield =0b1011;
- break;
- }
-}
/***************************************************************************
* main()
***************************************************************************/
int main() {
/* Variablen initialisieren */
- byte bRandomTaste = 0;
- word wRandomClock = 0;
- bMainState = enWaitForStart;
- bDisplayState = enWaitForStart;
- pinBeep = 1;
- vSetWaitForStart();
+ vSetForStart();
- Seriel.begin(9600);
+ //Seriel.begin(9600);
- while(1) {
- bRandomTaste++;
- if(bRandomTaste > 2) bRandomTaste = 0; /* zufällige LED/Taste bestimmen */
- wRandomClock++;
- if(wRandomClock > 800) wRandomClock = 0; /* Zufallszeit erzeugen */
+ while(1) {
+ wPotiWert = analogRead(pinPoti)*3,3;
+ vCheckTasten();
+ wDiffWert = wVorgabeWert - wPotiWert;
switch(bMainState) {
- case enWaitForStart:
- wDelayGame++;
- bLedShield =0b1111;
- if(wDelayGame > 1200) { /* 3 Sekundenminimum */
- wDelayGame = wRandomClock;
- bMainState = enWaitForRun;
+ case enSchwellenwert:
+ if(wVorgabeWert>3300){
+ wVorgabeWert=3300;
+ }
+ if(wVorgabeWert<0){
+ wVorgabeWert=0;
}
break;
- case enRunClock:
- bBeepTime--;
- if(bBeepTime == 0)pinBeep = 1;
- bMainState = bCheckTasten(enRunClock);
- break;
- case enWaitForRun:
- wDelayGame--;
- if(wDelayGame == 0){
- bMainState = enRunClock;
- bDisplayState = enRunClock;
- bBeepTime = 20;
- bHotKey = bRandomTaste;
- vBargraph(bRandomTaste);
- vSetRunClock();
- pinBeep = 0;
- }
+ case enPotiAnzeige:
break;
- case enShowResult:
- wClockShow--;
- if(wClockShow==0){
- bMainState = enWaitForStart;
- bDisplayState = enWaitForStart;
- vSetWaitForStart();
- }
- break;
- case enShowError:
- wDelayGame--;
- if(wDelayGame == 0)pinBeep = 1;
- wClockShow--;
- if(wClockShow==0){
- bMainState = enWaitForStart;
- bDisplayState = enWaitForStart;
- wDelayGame = 0;
- vSetWaitForStart();
- }
+ case enVergleich:
+ if(wDiffWert<0) pinBeep=0;
+ else pinBeep=1;
break;
}
vSegmentDigit();
- wait_us(n CircleTime);
+ wait_us(nCircleTime);
}
}
\ No newline at end of file