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.
Diff: main.cpp
- Revision:
- 2:5a7a6d39e650
- Parent:
- 1:17722afc5909
--- a/main.cpp Fri Apr 24 14:13:21 2020 +0000
+++ b/main.cpp Tue Apr 28 15:51:16 2020 +0000
@@ -1,80 +1,98 @@
#include "mbed.h"
-DigitalOut myled(PC_0);
-DigitalOut PC1(PC_1);
+DigitalOut alarm(PC_0);
+DigitalOut anzeige(PC_1);
+InterruptIn flamme(PA_8);
+AnalogIn batterie(PA_0);
+DigitalIn test(PA_1);
-void EX1IRQhandler(void)
+bool alarmAktiv=false;
+
+void isrFlamme(void)
{
- //PC1=!PC1;
- GPIOC->ODR=~GPIOC->ODR;
- EXTI->PR=0b10;
- HAL_NVIC_ClearPendingIRQ(EXTI1_IRQn);
+ alarmAktiv=true;
+ alarm=1;
+ anzeige=1;
}
-//TIM_HandleTypeDef htim6;
+void warte(unsigned int ms)
+{
+ RCC->APB1ENR |= 0b100000; //TIM6
+ TIM7->PSC=31999; //Prescaler für 1 ms
+ TIM7->CNT=0;
+ TIM7->ARR=ms;
+ TIM7->SR=0; //UIF=0
+ TIM7->CR1=1;
+ while (TIM7->SR==0);
+ TIM7->CR1=0;
+}
+
void TIM6_IRQHandler(void)
{
- myled=!myled;
+ if (anzeige==0)
+ {
+ anzeige=1;
+ TIM6->ARR=1000; //1Sekunde
+ if (batterie<0.7) alarm=1;
+ }
+ else
+ {
+ anzeige=0;
+ TIM6->ARR=10000; //10Sekunde
+ if (!alarmAktiv) alarm=0;
+ }
+
TIM6->SR=0;
HAL_NVIC_ClearPendingIRQ(TIM6_IRQn);
}
-void EX1init(void)
+void flammeinit(void)
{
-RCC->AHBENR|=0b111;
-GPIOA->PUPDR|=0b1000;
-EXTI->IMR|=0b10;
-EXTI->RTSR|=0b10;
+flamme.rise(&isrFlamme);
}
-static void NVIC_Init(void)
+void NVIC_Init(void)
{
/* TIM6_IRQn interrupt configuration */
- //HAL_NVIC_SetPriority(TIM6_IRQn, 0, 0);
NVIC_SetVector(TIM6_IRQn, (uint32_t)&TIM6_IRQHandler);
HAL_NVIC_EnableIRQ(TIM6_IRQn);
- NVIC_SetVector(EXTI1_IRQn, (uint32_t)&EX1IRQhandler);
- HAL_NVIC_EnableIRQ(EXTI1_IRQn);
}
/* TIM6 init function */
-static void TIM6_Init(void)
+void TIM6_Init(void)
{
- /*
- __TIM6_CLK_ENABLE();
- htim6.Instance = TIM6;
- htim6.Init.Prescaler = 3200;
- htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim6.Init.Period = 5000;
- if (HAL_TIM_Base_Init(&htim6) != HAL_OK) {
- while(1) {
- }
- }
- HAL_TIM_Base_Start_IT(&htim6);
- */
-
RCC->APB1ENR|=0b10000; //Clock Enable
- TIM6->PSC=3200; //Prescaler 100µs
- TIM6->ARR=5000; //Autoreload 5000*100µs = 0,5s
+ TIM6->PSC=31999; //Prescaler 100µs
+ TIM6->ARR=1000; //Autoreload 1000*1ms = 1s
TIM6->DIER=1; //UIE = 1 (Update Interrupt Enable)
TIM6->SR=0; //UIF =0 (Update Interrupt Flag)
TIM6->CR1=1; //CEN=1 (Counter Enable)
}
+
int main()
{
TIM6_Init();
- EX1init();
+
+ flammeinit();
NVIC_Init();
+ test.mode(PullDown);
while(1) {
- /*
- if (TIM6->SR==1)
- {
- TIM6->SR=0;
- myled=!myled;
+ if (test==1)
+ {
+ warte(3000);
+ if (test==1)
+ {
+ TIM6->CR1=0;
+ alarm=1;
+ anzeige=1;
+ warte(1000);
+ alarm=0;
+ anzeige=0;
+ TIM6->CR1=1;
+ }
}
- */
}
}
\ No newline at end of file