You are on page 1of 3

#include "mcp_can_dfs.

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

MCP_CAN CAN(10);

int flag=0; // flag de interrupcao


char string[10];
char serie[10];byte index=0;char inchar;
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
int canID = 0x000;
/*.................ENTRADAS/SAIDAS....................*/
int saida2=4,saida1=3,saida0=7; //saidas
int entrada0=5,entrada1=6; //entradas
int interrupcao = 2; //pino de INT
unsigned char len = 0; //Ler mensagens da interrupcao
unsigned char buf[8]; // buffer para recebers

void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
//reserva 200 bytes para a inputstring
inputString.reserve(200);

pinMode(entrada0,INPUT);
pinMode(entrada1,INPUT);
pinMode(saida0,OUTPUT);
pinMode(saida1,OUTPUT);
pinMode(saida2,OUTPUT);
COMECAR:
if(CAN_OK == CAN.begin(CAN_500KBPS))
Serial.println("CAN init OK!!");
else
{
Serial.println("CAN init FAIL!!");
delay(100);
goto COMECAR;
}

attachInterrupt(0, MCP2515_ISR, LOW); //verifica se houve interrupcao


pinMode(interrupcao,INPUT);
}

void MCP2515_ISR()
{
if(flag == 0)
flag=1;
}

void loop()
{
// flag de interrupcao inicia leitura
if(flag) // check if get data
{
unsigned char bufffer[3] = {0,0,0};
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
canID = CAN.getCanId();
if(canID==0)
{Serial.print("canId");
}
else
{
Serial.print("Recebi uma interrupcao do 0x");
Serial.println(canID,HEX);
}

delay(1500);
flag = 0;// clear flag

//substring ou seja a string protocolo vai ler receber 4 indices


//como as tramas tem 5 caracteres so preciso entao 5 indices da trama de
leitura
String protocolo=inputString.substring(0,5);

//...................................INICIO DAS TRAMAS.....................//

if(protocolo=="MODID") //trama para enviar resultado da identificao de faces


{
int k=0;int id;
Serial.println("A ler IDs da rede CAN... Aguarde...");
unsigned char buffer1[3] = {0, 0, 0};
for(id=0;id<2048;id++)
{
CAN.sendMsgBuf(id, 0, 3,sizeof(buffer1),buffer1);
delay(2); // permite dar tempo para se estebelecer a comunicacao

if(flag)
{
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data
buf 8
if(k==0)
{
id=id-128;
Serial.print(id);Serial.print(" // "); Serial.print(id,HEX);
Serial.println();
k++;
}
else if (k>0 && k<9)
{
k++;
}
else k=0;
flag=0;// encerra a interrupcao
inputString = "";
}
}
}

else if(protocolo=="IDFAC")//trama para um pedido de criao/alterao de registo


de face na base de dados
{
Serial.println("Enviar pedido para tirar foto");
unsigned char buffer44[3] = {1,2,3};
//VER ENDEREO DO ATMEGA
CAN.sendMsgBuf(0x00, 0, 3,sizeof(buffer44),buffer44);
delay(2); // permite dar tempo para se estebelecer a comunicacao
}
else if(protocolo=="SAID")
{
int estado;
estado = PIND;
Serial.println("Saidas: ");
Serial.println(estado,BIN);
inputString ="";
}
else if(protocolo=="ACFG")
{
Serial.println("Configuracao dos GPIO do ATMEGA328");
String in;
int var;
//DDRD=B00011000;
in = inputString.substring(5,8);
Serial.println(in);
var= in.toInt();
PORTD=var;
inputString ="";
}
delay(10);
int var3;
var3=digitalRead(entrada0);
if(var3 == 1)
{
Serial.println("F");
}
//..........................................................................//
}

void serialEvent()
{
while (Serial.available())
{
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}

You might also like