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:
- 14:88379565eac6
- Parent:
- 13:b1d6b2285b13
- Child:
- 15:bbcf8c3f91c5
--- a/main.cpp Sun Dec 04 16:29:52 2022 +0000 +++ b/main.cpp Sun Dec 04 21:44:45 2022 +0000 @@ -100,6 +100,10 @@ * Description : Timer für Taste S3 */ +byte bSCounter; /* +* Description : Zähler UART-Auslese für Tasterersatz +*/ + byte bDisplayState; /* * Description : */ @@ -173,17 +177,23 @@ */ word wVorgabeWert; /* -* Description : engestellter Vorgabewert +* Description : eingestellter Vorgabewert */ int nDiffWert; /* * Description : Differenz zwischen Vorgabe und Eingang */ +word wSizeData; /* +* Description : Größe der empfangenen Daten +*/ + +int zaeler; + /* 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 abString[12]; +byte abTxBuffer[256]; @@ -244,56 +254,20 @@ pinBeep = 1; wVorgabeWert = 0; } -/* -void vSetRunClock( void ) -{ - wClockTime = 0; - bDigit = 0; - abDisplayMemory[0] = 16; 7-Segment-Display ausschalten - abDisplayMemory[1] = 0; - abDisplayMemory[2] = 0; - abDisplayMemory[3] = 0; - bDisplayState = enRunClock; -} -*/ -/* -byte bCheckTasten( byte bState ) -{ - if((pinS1 == 0) || (pinS2 == 0) || (pinS3 == 0)) { Tastendruck erkannt - wClockShow = 1200; - if((pinS1 == 0) && (bHotKey == 0)) { - wDelayGame = 0; - bState = enShowResult; - bDisplayState = enShowResult; - } else if((pinS2 == 0) && (bHotKey == 1)) { - wDelayGame = 0; - bState = enShowResult; - bDisplayState = enShowResult; - } else if((pinS3 == 0) && (bHotKey == 2)) { - wDelayGame = 0; - bState = enShowResult; - bDisplayState = enShowResult; - } else { - wDelayGame = 200; - abDisplayMemory[1] = 15; - abDisplayMemory[2] = 15; - abDisplayMemory[3] = 15; - bState = enShowError; - bDisplayState = enShowResult; - pinBeep = 0; - } - } - return bState; -} -*/ + /* Tastenabfrage */ void vTasteS1( void ){ - if(pinS1 == 0){ /* User-Taste gedrückt */ - if(bS1Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ + if(pinS1 == 0 || abTxBuffer[0] == 'a'){ /* User-Taste gedrückt */ + + for(zaeler=0; zaeler<=250; zaeler++){ /*Zaehlen der Tastatur-Eingabe*/ + if(abTxBuffer[zaeler] == 'a') bSCounter++; + } + + if(bS1Timer < nTastLong+1 || bSCounter < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ if(bS1Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ //... } - if(bS1Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ + if(bS1Timer == nTastLong || bSCounter == nTastLong){ /* Taste "lange gedrückt" erkannt */ if(bDisplayState == enSchwellenwert || bDisplayState == enPotiAnzeige){ bDisplayState = enVergleich; bMainState = enVergleich; @@ -307,7 +281,7 @@ } } else{ /* Taste nicht gedrückt */ - if((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ + if(((bS1Timer >= nTastShort) && (bS1Timer <= nTastLong)) || ((bSCounter >= nTastShort) && (bSCounter <= nTastLong))){ /* Taste wurde bereits erkannt */ if(bDisplayState == enSchwellenwert){ bDisplayState = enPotiAnzeige; bMainState = enPotiAnzeige; @@ -318,16 +292,22 @@ } } bS1Timer = 0; + bSCounter = 0; } } void vTasteS2( void ){ - if(pinS2 == 0 && bMainState == enSchwellenwert){ /* User-Taste gedrückt */ - if(bS2Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ + if((pinS2 == 0 || abTxBuffer[0] == '+') && bMainState == enSchwellenwert){ /* User-Taste gedrückt */ + + for(zaeler=0; zaeler<=250; zaeler++){ /*Zählen der Tastatur-Eingabe*/ + if(abTxBuffer[zaeler] == '+') bSCounter++; + } + + if(bS2Timer < nTastLong+1 || bSCounter < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ if(bS2Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ //... } - if(bS2Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ + if(bS2Timer == nTastLong || bSCounter == nTastLong){ /* Taste "lange gedrückt" erkannt */ bTimeLong = 1; if(wVorgabeWert >=3200) wVorgabeWert = 3300; else wVorgabeWert = wVorgabeWert + 100; @@ -337,24 +317,30 @@ } } else{ /* Taste nicht gedrückt */ - if((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ + if(((bS2Timer >= nTastShort) && (bS2Timer <= nTastLong)) || ((bSCounter >= nTastShort) && (bSCounter <= nTastLong))){ /* Taste wurde bereits erkannt */ if(bTimeLong==0){ if(wVorgabeWert >=3290) wVorgabeWert = 3300; else wVorgabeWert = wVorgabeWert + 10; } } bS2Timer = 0; - bTimeLong= 0; + bTimeLong = 0; + bSCounter = 0; } } void vTasteS3( void ){ - if(pinS3 == 0 && bMainState == enSchwellenwert){ /* User-Taste gedrückt */ - if(bS3Timer < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ + if((pinS3 == 0 || abTxBuffer[0] == '-') && bMainState == enSchwellenwert){ /* User-Taste gedrückt */ + + for(zaeler=0; zaeler<=250; zaeler++){ /*Zählen der Tastatur-Eingabe*/ + if(abTxBuffer[zaeler] == '-') bSCounter++; + } + + if(bS3Timer < nTastLong+1 || bSCounter < nTastLong+1){ /* Abfrage max. bis Taste lange gedrückt */ if(bS3Timer == nTastShort){ /* Taste "kurz gedrückt" erkannt */ //... } - if(bS3Timer == nTastLong){ /* Taste "lange gedrückt" erkannt */ + if(bS3Timer == nTastLong || bSCounter == nTastLong){ /* Taste "lange gedrückt" erkannt */ bTimeLong = 1; if(wVorgabeWert <=100) wVorgabeWert = 0; else wVorgabeWert = wVorgabeWert - 100; @@ -364,14 +350,15 @@ } } else{ /* Taste nicht gedrückt */ - if((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)){ /* Taste wurde bereits erkannt */ + if(((bS3Timer >= nTastShort) && (bS3Timer <= nTastLong)) || ((bSCounter >= nTastShort) && (bSCounter <= nTastLong))){ /* Taste wurde bereits erkannt */ if(bTimeLong==0){ if(wVorgabeWert <=10) wVorgabeWert = 0; else wVorgabeWert = wVorgabeWert - 10; } } bS3Timer = 0; - bTimeLong= 0; + bTimeLong = 0; + bSCounter = 0; } } @@ -422,11 +409,49 @@ - Serial stComX(D1,D0); /* UART-Kommunikation (Txd(D1)/Rxd(D0)) mit dem PC */ + +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 */ +pUartData++; +wSizeData--; +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 */ +pUartData++; +bSizeData--; +} +else{ +USART2->CR1 &= ~USART_CR1_TXEIE; /* Interrupt sperren */ +} +} +} + + +/* 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]); +} +} + @@ -441,18 +466,21 @@ int main() { /* Variablen initialisieren */ vSetForStart(); - Seriel.begin(9600); - - - stComX.attach(&vIsrRxComX, Serial::RxIrq); /* ISR zum Datemempfang vom PC */ - stComX.attach(&vIsrTxComX, Serial::TxIrq); /* Sende-ISR */ + //Seriel.begin(9600); + while(1) { wPotiWert = pinPoti*3300; vCheckTasten(); nDiffWert = wVorgabeWert - wPotiWert; + + + stComX.attach(&vIsrRxComX, Serial::RxIrq); /* ISR zum Datemempfang vom PC */ + stComX.attach(&vIsrTxComX, Serial::TxIrq); /* Sende-ISR */ + + switch(bMainState) { case enSchwellenwert: pinBeep = 1;