From 4df6403e1aefd928547859b50687d657ec7c19b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20V=C3=ADtek?= <fotomartinkv@gmail.com>
Date: Sun, 11 Sep 2016 14:04:19 +0200
Subject: [PATCH] Fixes of badly designed current measuring

- removed waiting_for_current_reversation()
- add double check of closing current
---
 SW/Controller.cpp | 29 ++++++++++++++---------------
 SW/Controller.h   |  1 +
 2 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/SW/Controller.cpp b/SW/Controller.cpp
index cab8e8e..3741e4f 100644
--- a/SW/Controller.cpp
+++ b/SW/Controller.cpp
@@ -29,7 +29,8 @@ static usart_regs uart_regs
 
 Controller::Controller(): servo(&DDRB, PB1, &OCR1A, blue_servo_data),
                           adc(),
-                          uart(uart_regs)
+                          uart(uart_regs),
+                          count(0)
 {
     //Servo ini
     TCCR1A |= (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11);	//Fast PWM non-inverted
@@ -85,9 +86,6 @@ void Controller::gate_handler()
         case WAITING_FOR_CLOSING_CURRENT:       waiting_for_closing_current();
             break;
 
-        case WAITING_FOR_CURRENT_REVERSATION:   waiting_for_current_reversation();
-            break;
-
         case WAITING_FOR_CURRENT_DROP:          waiting_for_current_drop();
             break;
 
@@ -120,16 +118,20 @@ void Controller::waiting_for_closing_current()
 {
     if ((current_negative > ON_TRESHOLD) && (current_negative < 1020))
     {
-        gate_mode = WAITING_FOR_CURRENT_DROP;
+        if (!count)
+        {
+            count++;
+            return;
+        }
+
+        else
+        {
+            count = 0;
+            gate_mode = WAITING_FOR_CURRENT_DROP;
+        }
     }
-}
 
-void Controller::waiting_for_current_reversation()
-{
-    if (current_positive > ON_TRESHOLD)
-    {
-        gate_mode = WAITING_FOR_CURRENT_DROP;
-    }
+    else count = 0;
 }
 
 void Controller::waiting_for_current_drop()
@@ -176,9 +178,6 @@ void Controller::print_debug()
         case WAITING_FOR_CLOSING_CURRENT:       uart.transmit_string("Waiting for closing current");
             break;
 
-        case WAITING_FOR_CURRENT_REVERSATION:   uart.transmit_string("Waiting for current reversation");
-            break;
-
         case WAITING_FOR_CURRENT_DROP:          uart.transmit_string("Waiting for current drop");
             break;
 
diff --git a/SW/Controller.h b/SW/Controller.h
index 7bda471..5c7515b 100644
--- a/SW/Controller.h
+++ b/SW/Controller.h
@@ -53,6 +53,7 @@ class Controller
     private:
         volatile uint16_t samples[SAMPLES_COUNT];
         volatile uint8_t samples_item;
+        uint8_t count;
 
     public:
         volatile uint16_t current_positive;
-- 
GitLab