Помогите оптимизировать

treur
Offline
Зарегистрирован: 18.10.2015

Доброго всем времени суток,

Пишу формирователь прямоугольных импульсов по сообщению с CANbus, помогите оптимизировать код.

#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len = 0;
unsigned char rxBuf[8];
int a = 0;
int b;
int input;

MCP_CAN CAN0(10);
void setup()
 {
  CAN0.begin(CAN_500KBPS);
  pinMode(2, INPUT);
 }
void loop()
 {

    if(!digitalRead(2))
    {
      CAN0.readMsgBuf(&len, rxBuf);
      rxId = CAN0.getCanId();
  if (rxId==0x902){
		input =  uint16_t(rxBuf[4]<<8 |rxBuf[5]);
 int vehicleSpeed = input /100;
  if (input <= 95) {
  input = 0;
}
        if (b != input)
        {
        b = input;
        }
        if (input > 0)
        {
          a = (b+50000)/b;
        }
        else 
        {
          a = 0;
        }
        }
     if (a == 0) {
        digitalWrite(4, LOW);
    }
    else
    {
  digitalWrite(4, HIGH);
  delay(a);
  digitalWrite(4, LOW);
  delay(a);
    } 

    }
 }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А что с ним не так? Что именно нужно оптимизировать и дакой степени? Кстати, Вы забыли "пожалуйста" сказать.

treur
Offline
Зарегистрирован: 18.10.2015

Ну начнём тогда с конца на начало - Пожалуйста

скажем так - не нравится то, что импульсы формираются через delay(a); - в это время всё стоит и CAN не слушается, тут как бы надо, что бы частота импульсов изменялась пропорционально input в реальном времени.