Lab_interaccio/2011/iaac_summerschool/iaac_slave/iaac_slave.pde
Miguel Angel de Heras 451795bb92 Second commit
2025-03-05 15:57:19 +01:00

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);
}
}
}