Протокол парктроника

aleksyum
Offline
Зарегистрирован: 27.04.2014

Всем привет необходимо разгадать протокол парктроника Sho-me. Здесь была тема где рассматривалс протокол парктроника ParkMaster, оттуда взял код для определения длины импульсов на DATA. Но на результатах нет четкой картины, где было бы видно начало пакетов и конец. Может кто-то занимался такими парктрониками? Спасибо.

В приложениях код и результаты.

#include <TimerOne.h>

#define BTNPIN 2 // Вход сигнала
#define TEST 13 // Тест

volatile uint16_t startImpuls;
volatile uint16_t lengthImpuls;
volatile uint16_t timerCount=0;

void setup()
{  

/* LOW — вызов прерывания всякий раз, 
    когда на порту низкий уровень напряжения;
    CHANGE – прерывание вызывается при изменении 
    значения на входе;
    RISING – вызов прерывания при изменении уровня 
    напряжения с низкого (LOW) на высокое(HIGH)
    FALLING – вызов прерывания при изменении уровня 
    напряжения с высокого (HIGH) на низкое (LOW)*/
  
  startImpuls=0;
  lengthImpuls=0; 
  
  pinMode (TEST, OUTPUT);
  Serial.begin(115200);

  Timer1.initialize(1000);                // Интервал срабатывания таймера 1мс
  Timer1.attachInterrupt(callback);

  attachInterrupt(0, fireUp, FALLING); // Запуск таймера при наличии сигнала LOW
                                       // Замеряем только низкий уровень сигнала
}
void callback() {  timerCount++; }

void loop()
{
   if (lengthImpuls > 0) 
  {
     uint16_t li = lengthImpuls; 
     lengthImpuls=0;
  
     if (li > 7  && li < 9)   // При сигнале длинной 8мс начало пакета
     digitalWrite(13, LOW);
     
     if (li > 1  && li < 3)   // При сигнале длинной 2мс соответствует - 0
     digitalWrite(13, LOW);
     
     if (li > 4  && li < 6)   // При сигнале длинной 5мс соответствует - 1
     digitalWrite(13, HIGH);
  
     Serial.println (li, DEC);    // Отправляем в порт для тестового просмотра

}
 } 

// Функция обработки прерывания на подъем
void fireUp()
{

  detachInterrupt(0);
  startImpuls = timerCount;
  attachInterrupt(0, fireDown, RISING);
}

// Функция обработки прерывания на падение
void fireDown()
{
  detachInterrupt(0);
  lengthImpuls = timerCount - startImpuls;
  startImpuls=0;
  timerCount=0;
  attachInterrupt(0, fireUp, FALLING);
}

 

aleksyum
Offline
Зарегистрирован: 27.04.2014
25
25
25
25
25
26
26
26
26
26
26
26
26
26
34509
26
26
26
26
26
26
26
26
25
26
26
26
26
25
34509
26
26
26
25
26
25
25
26
26
26
25
25
25
25
34509
26
26
26
25
25
25
25
25
25
25
26
26
26
26
34509
25
25
25
26
25
26
26
26
26
26
26
26
26
26
34509
26
26
26
26
26
26
26
26
26
26
26
26
26
26
34509
26
26
26
26
26
26
25
25
25
25
25
25
25
25
34510
26
25
25
25
25
25
25
26
26
26
26
26
26
26
34509
25
26
26
26
26
25
26
26
26
26
26
26
26
26
34509