Auf den letzten Metern

Dependencies:   mbed

Revision:
19:8fdd91276de8
Parent:
18:6f0897438c03
Child:
20:0f975b296b67
--- a/main.cpp	Mon Dec 05 09:51:36 2022 +0000
+++ b/main.cpp	Mon Dec 05 13:51:24 2022 +0000
@@ -116,10 +116,6 @@
 * Description : 
 */
 
-byte bTimerDot; /*
-* Description : Zähler für Dots
-*/
-
 byte bHotKey; /*
 * Description : Auswahl der Taste
 */
@@ -188,12 +184,17 @@
 * Description : Größe der empfangenen Daten
 */
 
+word wTimerDot; /*
+* Description : Zähler für Dots
+*/
+
 int zaehler;
 
 /* 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};
-byte abTxBuffer[256];
+byte abTxBuffer[60];
+byte abTxBufferOld[60];
 
 
 
@@ -247,7 +248,7 @@
     abDisplayMemory[1] = 16;
     abDisplayMemory[2] = 16;
     abDisplayMemory[3] = 16;
-    bTimerDot = 0;
+    wTimerDot = 0;
     bDigit = 0;
     bMainState = enSchwellenwert;
     bDisplayState = enSchwellenwert;
@@ -288,39 +289,6 @@
             }
         bS1Timer = 0;
         }
-        
-    if(abTxBuffer[0] == 'b') {                            /* User-Taste gedrückt */
-
-        for(zaehler=0; zaehler<=250; zaehler++) {                                     /*Zaehlen der Tastatur-Eingabe*/
-            while(abTxBuffer[zaehler] == abTxBuffer[zaehler+1]) if(abTxBuffer[zaehler] == 'b') bSCounter++;
-        }
-
-        if(bSCounter < nTastLong+1) {            /* Abfrage max. bis Taste lange gedrückt */
-            if(bS1Timer == nTastShort) {        /* Taste "kurz gedrückt" erkannt */
-                //...
-            }
-            if(bSCounter == nTastLong) {         /* Taste "lange gedrückt" erkannt */
-                if(bDisplayState == enPotiAnzeige) {
-                    bDisplayState = enVergleich;
-                    bMainState = enVergleich;
-                } else {
-                    bDisplayState = enSchwellenwert;
-                    bMainState = enSchwellenwert;
-                }
-            }
-        }
-    } else {                                    /* Taste nicht gedrückt */
-        if(((bSCounter >= nTastShort) && (bSCounter <= nTastLong))) {            /* Taste wurde bereits erkannt */
-            if(bDisplayState == enSchwellenwert) {
-                bDisplayState = enPotiAnzeige;
-                bMainState = enPotiAnzeige;
-            } else {
-                bDisplayState = enSchwellenwert;
-                bMainState= enSchwellenwert;
-            }
-        }
-        bSCounter = 0;
-    }
     } 
 
 void vTasteS2( void ){
@@ -348,35 +316,6 @@
         bS2Timer = 0;
         bTimeLong = 0;
         }
-        
-    if(abTxBuffer[0] == ',' && bMainState == enSchwellenwert){                             /* User-Taste gedrückt */
-    
-        for(zaehler=0; zaehler<=250; zaehler++){                                      /*Zaehlen der Tastatur-Eingabe*/
-             while(abTxBuffer[zaehler] == abTxBuffer[zaehler+1]) if(abTxBuffer[zaehler] == ',') bSCounter++;
-         }
-    
-        if(bSCounter < nTastLong+1){             /* Abfrage max. bis Taste lange gedrückt */
-            if(bS2Timer == nTastShort){         /* Taste "kurz gedrückt" erkannt */
-                //...
-                }
-            if(bSCounter == nTastLong){          /* Taste "lange gedrückt" erkannt */ 
-                bTimeLong = 1;
-                if(wVorgabeWert >=3200) wVorgabeWert = 3300;
-                else wVorgabeWert = wVorgabeWert + 100;
-                bS2Timer = bS2Timer - 40;
-                }
-            }
-        }
-    else{                                       /* Taste nicht gedrückt */ 
-        if((bSCounter >= nTastShort) && (bSCounter <= nTastLong)){             /* Taste wurde bereits erkannt */
-            if(bTimeLong==0){
-                if(wVorgabeWert >=3290) wVorgabeWert = 3300;
-                else wVorgabeWert = wVorgabeWert + 10;
-            }
-            }
-        bTimeLong = 0;
-        bSCounter = 0;
-        }
     } 
 
 void vTasteS3( void ){
@@ -404,35 +343,6 @@
         bS3Timer = 0;
         bTimeLong = 0;
         }
-    
-    if(abTxBuffer[0] == '.' && bMainState == enSchwellenwert){                             /* User-Taste gedrückt */
-    
-        for(zaehler=0; zaehler<=250; zaehler++){                                      /*Zaehlen der Tastatur-Eingabe*/
-             while(abTxBuffer[zaehler] == abTxBuffer[zaehler+1]) if(abTxBuffer[zaehler] == '.') bSCounter++;
-         }
-    
-        if(bSCounter < nTastLong+1){             /* Abfrage max. bis Taste lange gedrückt */
-            if(bS3Timer == nTastShort){         /* Taste "kurz gedrückt" erkannt */
-                //...
-                }
-            if(bSCounter == nTastLong){          /* Taste "lange gedrückt" erkannt */ 
-                bTimeLong = 1;
-                if(wVorgabeWert <=100) wVorgabeWert = 0;
-                else wVorgabeWert = wVorgabeWert - 100;
-                bS3Timer = bS3Timer - 40;
-                }
-            }
-        }
-    else{                                       /* Taste nicht gedrückt */ 
-        if((bSCounter >= nTastShort) && (bSCounter <= nTastLong)){             /* Taste wurde bereits erkannt */
-            if(bTimeLong==0){
-                if(wVorgabeWert <=10) wVorgabeWert = 0;
-                else wVorgabeWert = wVorgabeWert - 10;
-            }
-            }
-        bTimeLong = 0;
-        bSCounter = 0;
-        }
     } 
 
 
@@ -448,11 +358,11 @@
     wSerial = abZiffer[abDisplayMemory[bDigit&0x03]];
     switch(bDisplayState) {
         case enSchwellenwert:
-            bTimerDot++; /* Zähler für Punktwechsel */
+            wTimerDot++; /* Zähler für Punktwechsel */
             vDisplayVolt(wVorgabeWert);
-            if(bTimerDot == 400) {
-                wDelayGame=2*nTastShort;
-                bTimerDot = 0;
+            if(wTimerDot == 400) {
+                wDelayGame=200;
+                wTimerDot = 0;
             }
             if(wDelayGame!=0){
                 if((bDigit&0x03) == 0x01) {
@@ -486,45 +396,44 @@
 
 
 
-Serial stComX(D1,D0); /* UART-Kommunikation (Txd(D1)/Rxd(D0)) mit dem PC */
+Serial stComX(D1,D0); // UART-Kommunikation (Txd(D1)/Rxd(D0)) mit dem PC 
  
- 
-byte SYS_vStartComX( word wSize, byte *pData ){ /* Start einer Übertragung */
+
+byte SYS_vStartComX( word wSize, byte *pData ){ // Start einer Übertragung 
 byte i;
 if(wSizeData) i = False;
 else{
-wSizeData = wSize; /* Anzahl der Sendedaten */
-pUartData = pData; /* Zeiger auf diese Daten */
-stComX.putc(*pUartData); /* erstes Zeichen senden */
+wSizeData = wSize; // Anzahl der Sendedaten 
+pUartData = pData; // Zeiger auf diese Daten 
+stComX.putc(*pUartData); // erstes Zeichen senden 
 pUartData++;
 wSizeData--;
-USART2->CR1 |= USART_CR1_TXEIE; /* TXE-Interrupt freigeben */
+USART2->CR1 |= USART_CR1_TXEIE; // TXE-Interrupt freigeben 
 i = True;
 }
 return i;
 }
 
 
-/* Senderoutine zum COM-Port am PC */
-void vIsrTxComX( void ){ /* Senderoutine */
-if(stComX.writeable()){ /* Sende-ISR */
-if(bSizeData){ /* sind Daten vorhanden ? */
-stComX.putc(*pUartData); /* daten senden */
+// Senderoutine zum COM-Port am PC 
+void vIsrTxComX( void ){ // Senderoutine 
+if(stComX.writeable()){ // Sende-ISR 
+if(bSizeData){ // sind Daten vorhanden ? 
+stComX.putc(*pUartData); // daten senden 
 pUartData++;
 bSizeData--;
 }
 else{
-USART2->CR1 &= ~USART_CR1_TXEIE; /* Interrupt sperren */
+USART2->CR1 &= ~USART_CR1_TXEIE; // Interrupt sperren 
 }
 }
 }
 
 
-/* Empfangsroutine vom COM-Port des PC */
-void vIsrRxComX( void ){ /* Empfangsroutine */
-if(stComX.readable()){ /* Empfangs-ISR */
+// Empfangsroutine vom COM-Port des PC 
+void vIsrRxComX( void ){ // Empfangsroutine 
+if(stComX.readable()){ // Empfangs-ISR 
 abTxBuffer[0] = stComX.getc();
-abTxBuffer[0] = abTxBuffer[0] + 1;
 SYS_vStartComX(1, &abTxBuffer[0]);
 }
 }
@@ -532,7 +441,42 @@
 
 
 
+void vComA(void){
+    if(abTxBuffer[0]=='a'){
+        if(bMainState==enSchwellenwert) {
+            bDisplayState = enPotiAnzeige;
+            bMainState = enPotiAnzeige;
+        }
+        if(bMainState==enPotiAnzeige) {
+            bDisplayState = enVergleich;
+            bMainState = enVergleich;
+        }
+        if(bMainState==enVergleich) {
+            bDisplayState = enSchwellenwert;
+            bMainState = enSchwellenwert;
+        }
+    }
+}
 
+void vComPlus(void){
+    if(abTxBuffer[0]=='+'){
+        if(wVorgabeWert >=3290) wVorgabeWert = 3300;
+        else wVorgabeWert = wVorgabeWert + 10;
+    }
+}
+
+void vComMinus(void){
+    if(abTxBuffer[0]=='-'){
+        if(wVorgabeWert <=10) wVorgabeWert = 0;
+        else wVorgabeWert = wVorgabeWert - 10;;
+    }
+}
+
+void vCheckCom(void){
+    vComA();
+    vComPlus();
+    vComMinus();
+}
 
 
 
@@ -556,6 +500,8 @@
         
         stComX.attach(&vIsrRxComX, Serial::RxIrq); /* ISR zum Datemempfang vom PC */
         stComX.attach(&vIsrTxComX, Serial::TxIrq); /* Sende-ISR */
+        
+        vCheckCom();
     
     
         switch(bMainState) {