Simple LIN master node emulation with background operation Simple emulation of a LIN master node via Serial3 (+ LIN transceiver) for DAI MRA2 FED1.0 with background operation. Status is printed periodically.
- Author
- Georg Icking-Konert
- Date
- 2020-03-22
#include "Tasks.h"
#define PRINT_PERIOD 1000 // period for status output
#define LIN_PERIOD 10 // LIN frame every N ms
#define PIN_TOGGLE 30
void printStatus(void);
uint8_t Rx[8];
void setup(void)
{
pinMode(PIN_TOGGLE, OUTPUT);
Serial.begin(115200); while(!Serial);
Tasks_Init();
Tasks_Add((Task) LIN_scheduler, LIN_PERIOD, 0);
Tasks_Add((Task) printStatus, PRINT_PERIOD, PRINT_PERIOD);
Tasks_Start();
}
void loop(void)
{
digitalWrite(PIN_TOGGLE, !digitalRead(PIN_TOGGLE));
}
void LIN_scheduler(void)
{
static uint8_t count = 0;
uint8_t id;
uint8_t numData;
uint8_t data[8];
if (count == 0) {
id = 0x3B;
numData = 2;
memset(data, 0, 8);
count++;
}
else {
id = 0x1B;
numData = 8;
count=0;
}
}
void printStatus(void)
{
Serial.print(millis()); Serial.println("ms");
{
for (uint8_t i=0; i<8; i++)
{
Serial.print(i); Serial.print("\t0x"); Serial.println(Rx[i], HEX);
}
}
else {
Serial.print("LIN error (0x");
Serial.print("): ");
Serial.println("statemachine");
Serial.println("echo");
Serial.println("timeout");
Serial.println("checksum");
Serial.println("misc");
}
Serial.println();
}