195 lines
3.7 KiB
Plaintext
195 lines
3.7 KiB
Plaintext
#include <CAN.h>
|
|
#include <pinout.h>
|
|
|
|
// Color select transistors
|
|
byte redPin = 8;
|
|
byte greenPin = 7;
|
|
byte bluePin = 19;
|
|
|
|
// Analog inputs
|
|
int s0Pin = A0;
|
|
int s1Pin = A1;
|
|
int s2Pin = A2;
|
|
int s3Pin = A3;
|
|
int s4Pin = A4;
|
|
|
|
// Analog PWM
|
|
|
|
byte rgbPin[5] = {
|
|
5,3,9,10,6}; // deshabilito D4 como salida para usarlo com CAN_CS
|
|
|
|
byte ledR[5]={
|
|
0, 1, 1, 1, 0};
|
|
byte ledG[5]={
|
|
1, 0, 1, 0, 0};
|
|
byte ledB[5]={
|
|
1, 1, 0, 0, 1};
|
|
|
|
int i=0;
|
|
int byte1 = 0;
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
Serial.println("Starting Slave...");
|
|
|
|
// pinMode(4, OUTPUT);
|
|
|
|
CAN.begin(1);
|
|
|
|
//Transistors
|
|
pinMode(redPin, OUTPUT);
|
|
pinMode(greenPin, OUTPUT);
|
|
pinMode(bluePin, OUTPUT);
|
|
|
|
for(i=0 ; i<5; i++)
|
|
pinMode(rgbPin[i],OUTPUT);
|
|
}
|
|
|
|
|
|
void loop()
|
|
{
|
|
|
|
update_leds();
|
|
canUpdate();
|
|
|
|
}
|
|
|
|
|
|
void update_leds()
|
|
{
|
|
|
|
digitalWrite(greenPin, HIGH);
|
|
digitalWrite(bluePin, HIGH);
|
|
digitalWrite(redPin, LOW);
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledR[i]);
|
|
digitalWrite(rgbPin[i], ledR[i]);
|
|
delay(1);
|
|
}
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledB[i]);
|
|
digitalWrite(rgbPin[i], 1);
|
|
}
|
|
|
|
|
|
digitalWrite(redPin, HIGH);
|
|
digitalWrite(bluePin, HIGH);
|
|
digitalWrite(greenPin, LOW);
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledG[i]);
|
|
digitalWrite(rgbPin[i], ledG[i]);
|
|
delay(1);
|
|
}
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledB[i]);
|
|
digitalWrite(rgbPin[i], 1);
|
|
}
|
|
|
|
|
|
digitalWrite(redPin, HIGH);
|
|
digitalWrite(greenPin, HIGH);
|
|
digitalWrite(bluePin, LOW);
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledB[i]);
|
|
digitalWrite(rgbPin[i], ledB[i]);
|
|
delay(1);
|
|
}
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
//analogWrite(rgbPin[i], ledB[i]);
|
|
digitalWrite(rgbPin[i], 1);
|
|
}
|
|
|
|
}
|
|
|
|
// COMMUNICATION CAN FUNCTION
|
|
|
|
void canUpdate()
|
|
{
|
|
|
|
if (CAN.CheckNew())
|
|
{
|
|
|
|
CAN.ReadFromDevice(&CAN_RxMsg);
|
|
|
|
//Print message via Serial Port
|
|
Serial.print(CAN_RxMsg.id,HEX);
|
|
Serial.print(" => ");
|
|
Serial.print(CAN_RxMsg.data[0],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[1],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[2],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[3],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[4],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[5],HEX);
|
|
Serial.print(" - ");
|
|
Serial.print(CAN_RxMsg.data[6],HEX);
|
|
Serial.print(" - ");
|
|
Serial.println(CAN_RxMsg.data[7],HEX);
|
|
|
|
//Byte 0 => Info from the other board with the sensor status
|
|
if (CAN_RxMsg.id==0x200 && CAN_RxMsg.data[0])
|
|
{
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
ledR[i] = 255;
|
|
ledG[i] = 255;
|
|
ledB[i] = 0;
|
|
}
|
|
|
|
CAN_TxMsg.id=0x100; //Device with speaker sends ID=200, Device with sensor sends=ID=100
|
|
CAN_TxMsg.header.rtr=0;
|
|
CAN_TxMsg.header.length=8;
|
|
CAN_TxMsg.data[0]=0x01;
|
|
CAN_TxMsg.data[1]=analogRead(s4Pin)/4;
|
|
CAN_TxMsg.data[2]=0x00;
|
|
CAN_TxMsg.data[3]=0x00;
|
|
CAN_TxMsg.data[4]=0x00;
|
|
CAN_TxMsg.data[5]=0x00;
|
|
CAN_TxMsg.data[6]=0x00;
|
|
CAN_TxMsg.data[7]=0x00;
|
|
CAN.send(&CAN_TxMsg);
|
|
}
|
|
else
|
|
{
|
|
for(i=0 ; i<5; i++)
|
|
{
|
|
ledR[i] = 255;
|
|
ledG[i] = 0;
|
|
ledB[i] = 255;
|
|
}
|
|
CAN_TxMsg.id=0x100; //Device with speaker sends ID=200, Device with sensor sends=ID=100
|
|
CAN_TxMsg.header.rtr=0;
|
|
CAN_TxMsg.header.length=8;
|
|
CAN_TxMsg.data[0]=0x00;
|
|
CAN_TxMsg.data[1]=analogRead(s4Pin)/4;
|
|
CAN_TxMsg.data[2]=0x00;
|
|
CAN_TxMsg.data[3]=0x00;
|
|
CAN_TxMsg.data[4]=0x00;
|
|
CAN_TxMsg.data[5]=0x00;
|
|
CAN_TxMsg.data[6]=0x00;
|
|
CAN_TxMsg.data[7]=0x00;
|
|
CAN.send(&CAN_TxMsg);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|