Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // -------- ПОГЛЕДАЈ КОМЕНТАР --------- //
- #include<arduinoPlatform.h>
- #include<tasks.h>
- #include<interrupts.h>
- #include<stdio.h>
- #include<serial.h>
- #include <pwm.h>
- #include<data.h>
- extern serial Serial;
- #define LED 26
- #define BTN 4
- #define SW 2
- #define RISING 0
- #define FALLING 1
- typedef void interruptFunction();
- int br = 1,
- blink_LED_task_id,
- BTN_old_state,
- SW_old_state;
- interruptFunction* sw_falling_edge_func,
- * sw_rising_edge_func;
- void blink_LED_task(int id, void* ptrt){
- digitalWrite(LED, !digitalRead(LED));
- }
- void BTN_check(int id, void* ptrt){
- if(BTN_old_state < digitalRead(BTN)){
- int task_period = getTaskPeriod(blink_LED_task_id);
- Serial.println(task_period);
- BTN_old_state = digitalRead(BTN);
- }else if(BTN_old_state > digitalRead(BTN)){
- setTaskPeriod(blink_LED_task_id, 1000 / br / 2);
- BTN_old_state = digitalRead(BTN);
- }
- }
- void SW_attachInterrupt(short mode, interruptFunction func){
- if(mode == RISING){
- sw_rising_edge_func = func;
- }else if(mode == FALLING){
- sw_falling_edge_func = func;
- }
- }
- void SW_intrptFuncs(){
- if(br + 1 > 10){
- br = 1;
- }else{
- ++br;
- }
- }
- void SW_check(int id, void* ptrt){
- if(SW_old_state < digitalRead(SW)){
- sw_rising_edge_func();
- SW_old_state = digitalRead(SW);
- }else if(SW_old_state > digitalRead(SW)){
- sw_falling_edge_func();
- SW_old_state = digitalRead(SW);
- }
- }
- void SerialHandler(int id, void* ptrt){
- if(Serial.available()){
- char tmp = Serial.read();
- if(tmp >= '0' && tmp <= '9'){
- br = tmp - '0' + 1;
- setTaskPeriod(blink_LED_task_id, 1000 / br / 2);
- }
- }
- }
- void setup()
- {
- Serial.begin(9600);
- pinMode(LED, OUTPUT);
- BTN_old_state = digitalRead(BTN);
- SW_old_state = digitalRead(SW);
- SW_attachInterrupt(RISING, SW_intrptFuncs);
- SW_attachInterrupt(FALLING, SW_intrptFuncs);
- blink_LED_task_id = createTask(blink_LED_task, 500, TASK_ENABLE, NULL);
- createTask(BTN_check, 50, TASK_ENABLE, NULL);
- createTask(SW_check, 50, TASK_ENABLE, NULL);
- createTask(SerialHandler, 500, TASK_ENABLE, NULL);
- }
- void loop()
- {
- }
Advertisement
Comments
-
- Узмите ово 1000 / br / 2 као да можда није добро (ја сам сматрао да један блинк значи и упалити и угасити)
Add Comment
Please, Sign In to add comment