From 6efbd255de9e5e2c55733d644f010256aeb818a5 Mon Sep 17 00:00:00 2001 From: Fabian Schieder Date: Wed, 18 Feb 2026 21:58:09 +0000 Subject: [PATCH] =?UTF-8?q?10.02.main.c=20gel=C3=B6scht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 10.02.main.c | 387 --------------------------------------------------- 1 file changed, 387 deletions(-) delete mode 100644 10.02.main.c diff --git a/10.02.main.c b/10.02.main.c deleted file mode 100644 index 47c4702..0000000 --- a/10.02.main.c +++ /dev/null @@ -1,387 +0,0 @@ -#include -#include -#include -//#include "nex_ui.h" -#include - - -//---------------------Nextion-Objekte------------------------ - -NexEventObj fuellstandInd; -NexEventObj pumpeInd; -NexEventObj leerInd; -NexEventObj feinInd; -NexEventObj grobInd; -NexEventObj fehlerInd; - -NexEventObj fuellstandText; - -//---------------------Alias-Defines------------------------ - -#define BITBAND_PERI(a,b) ((PERIPH_BB_BASE + (a-PERIPH_BASE)*32 + (b*4))) - -#define FEHLER *((volatile unsigned long *)(BITBAND_PERI(GPIOC_ODR,1))) // V3 -#define LEERBLASEN *((volatile unsigned long *)(BITBAND_PERI(GPIOC_ODR,2))) // V4 -#define FEIN *((volatile unsigned long *)(BITBAND_PERI(GPIOC_ODR,13))) // V5 -#define GROB *((volatile unsigned long *)(BITBAND_PERI(GPIOB_ODR,7))) // V6 -#define PUMPE *((volatile unsigned long *)(BITBAND_PERI(GPIOB_ODR,6))) // V7 - -#define Switch5 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,12))) // DIL5 -#define Switch4 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,15))) // DIL4 -#define Switch6 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,14))) // DIL6 -#define Switch7 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,13))) // DIL7 -#define Switch1 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,10))) // DIL1 -#define Switch0 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,6))) // DIL0 -#define Switch2 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_IDR,11))) // DIL2 -#define Switch3 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_IDR,12))) // DIL3 - -//---------------------Variablen------------------------ - -#define NEX_PID_MAIN 0 -#define NEX_CID_PROG 1 - -#define SOLLWERT 0x7F // 127d -#define GAP 0x5F // 95d -#define NACHLAUF 0x5 - -volatile unsigned long* Switch[8] ={&Switch0, &Switch1, &Switch2, &Switch3, &Switch4, &Switch5, &Switch6, &Switch7}; -int nachlaufOffset = 0; - -//------------------------------------------------------ - -void SysTick_Handler() -{ - STD_IncTick(); -} - -void PortConfig(void) -{ - RCC -> APB2ENR |= RCC_APB2ENR_IOPCEN; //Takt für Port C aktivieren - RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN; //Takt für Port B aktivieren - RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN; //Takt für Port A aktivieren - - GPIOB -> CRL &= 0x00000000; - GPIOB -> CRL = 0x22222222; - GPIOB -> CRH &= 0x00000000; - GPIOB -> CRH |= 0x88880000; - - GPIOA -> CRL &= 0x00000000; - GPIOA -> CRL = 0x22222222; - GPIOA -> CRH &= 0x00000000; - GPIOA -> CRH |= 0x00088000; - - GPIOC -> CRL &= 0x00000000; - GPIOC -> CRL |= 0x28222222; - GPIOC -> CRH &= 0x00000000; - GPIOC -> CRH |= 0x22222822; - - GPIOA -> ODR &= 0x0000; - GPIOB -> ODR &= 0x0000; - GPIOC -> ODR &= 0x0000; - - GPIOA -> ODR |= 0x1800; - GPIOB -> ODR |= 0xF000; - GPIOC -> ODR |= 0x0440; -} - -void uart2_init(void) -{ - RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN; // 0x4 - RCC->APB1ENR |= 0x20000; // UART2 Taktversorgung - - GPIOA->CRL &= 0xFFFFF0FF; - GPIOA->CRL |= 0xB00; - - GPIOA->CRL &= 0xFFFF0FFF; - GPIOA->CRL |= 0x4000; - - USART2->CR1 &= ~0x1000; // M:--> Start bit, 8 Data bits, n Stop bit - USART2->CR1 &= ~0x0400; // PCE: 0: Parity control disabled - USART2->CR2 &= ~0x3000; // STOP: 00: 1 Stop bit afungsbil - USART2->BRR = 0x1D4C; // set Baudrate to 9600 Baud (SysClk 72Mhz) - USART2->CR1 |= 0x0C; // enable Receiver and Transmitter - USART2->CR1 |= 0x2000; // Set USART Enable Bit -} - -void uart2_putChar(char zeichen) -{ - while(!((USART2->SR & 0x80) == 0x80)); - USART2->DR = zeichen; -} - -void uart2_putString(char* string) -{ - while(*string) - { - uart2_putChar(*string++); - } -} - -char uart2_getChar(void) -{ - while(!(USART2->SR & 0x20)); - return ((char) (USART2->DR & 0xFF)); -} - -static void NexEventObj_Init(NexEventObj *obj, uint8_t pid, uint8_t cid, const char *name) -{ - obj->pid = pid; - obj->cid = cid; - obj->name = name; - obj->pophandler = NULL; - obj->pushhandler = NULL; -} - -void configNexObjects(void) -{ - NexEventObj_Init(&fuellstandInd, NEX_PID_MAIN, NEX_CID_PROG, "fuellstand"); - NexEventObj_Init(&fehlerInd, NEX_PID_MAIN, NEX_CID_PROG, "fehlerInd"); - NexEventObj_Init(&leerInd, NEX_PID_MAIN, NEX_CID_PROG, "leerInd"); - NexEventObj_Init(&feinInd, NEX_PID_MAIN, NEX_CID_PROG, "feinInd"); - NexEventObj_Init(&grobInd, NEX_PID_MAIN, NEX_CID_PROG, "grobInd"); - NexEventObj_Init(&pumpeInd, NEX_PID_MAIN, NEX_CID_PROG, "pumpeInd"); - - NexEventObj_Init(&fuellstandText, NEX_PID_MAIN, NEX_CID_PROG, "fuellstandn"); -} - -void fehler(bool state) -{ - if(state) - { - NexProgressBar_setValue(&fehlerInd, 100); - FEHLER = 1; - //uart2_putString("Fehler aufgetreten!\r\n"); - } - else - { - NexProgressBar_setValue(&fehlerInd, 0); - FEHLER = 0; - //uart2_putString("Fehler behoben!\r\n"); - } - - return; -} - -void leerBlasen(bool state) -{ - if(state) - { - NexProgressBar_setValue(&leerInd, 100); - LEERBLASEN = 1; - //uart2_putString("Leerblasventil geoeffnet!\r\n"); - } - else - { - NexProgressBar_setValue(&leerInd, 0); - LEERBLASEN = 0; - //uart2_putString("Leerblasventil geschlossen!\r\n"); - } - - return; -} - -void fein(bool state) -{ - if(state) - { - NexProgressBar_setValue(&feinInd, 100); - FEIN = 1; - //uart2_putString("Feinventil geoeffnet!\r\n"); - } - else - { - NexProgressBar_setValue(&feinInd, 0); - FEIN = 0; - //uart2_putString("Feinventil geschlossen!\r\n"); - } - - return; -} - -void grob(bool state) -{ - if(state) - { - NexProgressBar_setValue(&grobInd, 100); - GROB = 1; - //uart2_putString("Grobventil geoeffnet!\r\n"); - } - else - { - NexProgressBar_setValue(&grobInd, 0); - GROB = 0; - //uart2_putString("Grobventil geoeffnet!\r\n"); - } - - return; -} - -void pumpe(bool state) -{ - if(state) - { - NexProgressBar_setValue(&pumpeInd, 100); - PUMPE = 1; - //uart2_putString("Pumpe eingeschaltet!\r\n"); - } - else - { - NexProgressBar_setValue(&pumpeInd, 0); - PUMPE = 0; - //uart2_putString("Pumpe ausgeschaltet!\r\n"); - } - - return; -} - -void fuellstand(int8_t value) -{ - if(value >= 0 && value <= 100) - { - NexProgressBar_setValue(&fuellstandInd, value); - //uart2_putString("Fuellstand geaendert!\r\n"); - } - else - { - NexProgressBar_setValue(&fuellstandInd, 0); - //uart2_putString("Uengueltiger Fuellstandswert!\r\n"); - } -} - -uint8_t toPercent(uint8_t value, uint8_t max) -{ - if (value > max) value = max; - return (value * 100 + max / 2) / max; -} - -void setFuellstand(uint8_t value) -{ - char buf[20]; - - sprintf(buf, "%u l", value); - - NexText_setText(&fuellstandText, buf); - fuellstand(toPercent(value, 255)); -} - -int SwitchesToInt(void) -{ - int result = 0; - uint8_t i = 0; - - for (i = 0; i < 7; i++) - { - if (!*Switch[i]) - { - result |= (1 << i); - } - } - return result; -} - -int main(void) -{ - PortConfig(); - uart2_init(); - - NexEventObj *nextlisten_list[] = {NULL}; - configNexObjects(); - Nex_Init(0); - Init_Nex_UI(); - - fuellstand(0); - fehler(false); - leerBlasen(false); - fein(false); - grob(false); - pumpe(false); - wait_sys_ms(20); - - bool leerGeblasen = false; - bool leitungBenutzt = false; - - uart2_putString("Dosieranlage V01\r\n"); - - while(1) - { - Nex_Event_Loop(nextlisten_list); - wait_sys_ms(5); - uint8_t istWert = SwitchesToInt(); - uint16_t effektiverWert = istWert + nachlaufOffset; - - if(*Switch[7] == 0) - { - leerGeblasen = true; - leitungBenutzt = false; - - pumpe(true); - - if(effektiverWert < SOLLWERT - NACHLAUF) - { - fein(true); - leitungBenutzt = true; - } - else if(effektiverWert >= SOLLWERT - NACHLAUF) - { - fein(false); - } - - if(effektiverWert < GAP) - { - grob(true); - leitungBenutzt = true; - } - else if(effektiverWert < SOLLWERT) - { - grob(false); - } - else - { - grob(false); - } - - setFuellstand(effektiverWert); - wait_sys_ms(5); - } - else - { - if(leerGeblasen) - { - pumpe(false); - grob(false); - fein(false); - leerBlasen(true); - - if(leitungBenutzt) - { - int time = 3000 / NACHLAUF; - int rest = 3000 % NACHLAUF; - - uint8_t i = 0; - for(i = 0; i < NACHLAUF; i++) - { - wait_sys_ms(time); - - if(rest > 0) - { - wait_sys_ms(1); - rest -= 1; - } - - nachlaufOffset += 1; - setFuellstand(istWert + nachlaufOffset); - } - } - else - { - wait_sys_ms(3000); - } - - leerBlasen(false); - leerGeblasen = false; - } - } - } - - return 0; -}