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
Revision 14:88379565eac6, committed 2022-12-04
- Comitter:
- alexander0707
- Date:
- Sun Dec 04 21:44:45 2022 +0000
- Parent:
- 13:b1d6b2285b13
- Child:
- 15:bbcf8c3f91c5
- Commit message:
- v2.0 Das koennte jetzt komplett klappen.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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;