171 lines
3.5 KiB
Arduino
171 lines
3.5 KiB
Arduino
|
#include <Wire.h>
|
||
|
#include <SPI.h>
|
||
|
|
||
|
#define red 3
|
||
|
#define green 6
|
||
|
#define blue 5
|
||
|
#define CS 10
|
||
|
#define INT 9
|
||
|
|
||
|
#define CHANNEL 1 //Channel for i2c
|
||
|
|
||
|
int pad[5] = {A1,A2,A3,A0,A6};
|
||
|
|
||
|
// function that executes whenever data is received from master
|
||
|
// this function is registered as an event, see setup()
|
||
|
|
||
|
int request = 0;
|
||
|
byte r = 0;
|
||
|
byte g = 0;
|
||
|
byte b = 0;
|
||
|
|
||
|
void i2cEvent(int howMany)
|
||
|
{
|
||
|
if (Wire.available()) // loop through all but the last
|
||
|
{
|
||
|
byte var = Wire.read(); // receive byte as a character
|
||
|
request = var;
|
||
|
// Serial.println(var);
|
||
|
switch (var)
|
||
|
{
|
||
|
|
||
|
case 1:
|
||
|
|
||
|
break;
|
||
|
case 2:
|
||
|
r = Wire.read();
|
||
|
g = Wire.read();
|
||
|
b = Wire.read();
|
||
|
rgbWrite(r, g, b);
|
||
|
break;
|
||
|
case 3:
|
||
|
|
||
|
break;
|
||
|
case 4:
|
||
|
|
||
|
break;
|
||
|
case 5:
|
||
|
|
||
|
break;
|
||
|
// default:
|
||
|
// // si nada coincide, ejecuta el "default"
|
||
|
// // el "default" es opcional
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
byte value[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||
|
uint16_t temp_value = 0;
|
||
|
void requestEvent()
|
||
|
{
|
||
|
// Wire.write("hello pepe"); // respond with message of 6 bytes
|
||
|
if (request==1)
|
||
|
{
|
||
|
for (int i=0; i<10; i=i+2)
|
||
|
{
|
||
|
temp_value = analogRead(pad[i/2]);
|
||
|
value[i] = (char)(temp_value&(0x00FF));
|
||
|
value[i + 1] = (char)((temp_value>>8)&(0x00FF));
|
||
|
// Wire.write((byte)(value&(0x00FF)));
|
||
|
// Wire.write((byte)((value>>8)&(0x00FF)));
|
||
|
}
|
||
|
Wire.write(value,10);
|
||
|
digitalWrite(INT, HIGH);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void redWrite(byte color)
|
||
|
{
|
||
|
analogWrite(red, map(color, 0, 255, 255, 0));
|
||
|
}
|
||
|
|
||
|
void blueWrite(byte color)
|
||
|
{
|
||
|
analogWrite(blue, map(color, 0, 255, 255, 0));
|
||
|
}
|
||
|
|
||
|
void greenWrite(byte color)
|
||
|
{
|
||
|
analogWrite(green, map(color, 0, 255, 255, 0));
|
||
|
}
|
||
|
|
||
|
void rgbWrite(byte red_color, byte green_color, byte blue_color)
|
||
|
{
|
||
|
redWrite(red_color);
|
||
|
blueWrite(blue_color);
|
||
|
greenWrite(green_color);
|
||
|
}
|
||
|
|
||
|
uint16_t Sensor[5] = {0, 0, 0, 0, 0};
|
||
|
uint16_t Sensor_ant[5] = {0, 0, 0, 0, 0};
|
||
|
|
||
|
void setup() {
|
||
|
pinMode(green, OUTPUT);
|
||
|
pinMode(blue, OUTPUT);
|
||
|
pinMode(red, OUTPUT);
|
||
|
pinMode(INT, OUTPUT);
|
||
|
digitalWrite(INT, LOW);
|
||
|
rgbWrite(0, 0, 0);
|
||
|
Serial.begin(57600);
|
||
|
Wire.begin(CHANNEL); // join i2c bus with address #4
|
||
|
pinMode (CS, INPUT);
|
||
|
SPI.begin();
|
||
|
Wire.onReceive(i2cEvent); // register event
|
||
|
Wire.onRequest(requestEvent); // register event
|
||
|
for (int i=0; i<5; i++)
|
||
|
{
|
||
|
Sensor[i] = analogRead(pad[i]);
|
||
|
Sensor_ant[i] = Sensor[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int intensidad = 0;
|
||
|
|
||
|
|
||
|
uint16_t temp_sensor = 0;
|
||
|
uint16_t res = 4;
|
||
|
|
||
|
void loop() {
|
||
|
// for (int i=0; i<5; i++)
|
||
|
// {
|
||
|
// Sensor[i] = analogRead(pad[i]);
|
||
|
// if ((Sensor[i]>=(Sensor_ant[i] + res))||(Sensor[i]<=(Sensor_ant[i] - res)))
|
||
|
// {
|
||
|
// digitalWrite(INT, LOW);
|
||
|
// }
|
||
|
// Sensor_ant[i] = Sensor[i];
|
||
|
// }
|
||
|
|
||
|
|
||
|
|
||
|
intensidad = analogRead(pad[4]);
|
||
|
rgbWrite(map(intensidad,0,1023,255,0),map(intensidad,0,1023,255,0),map(intensidad,0,1023,150,0));
|
||
|
|
||
|
if (intensidad<(1023/3))
|
||
|
{
|
||
|
redWrite(map(intensidad,0,1023/3,255,0));
|
||
|
greenWrite(0);
|
||
|
blueWrite(0);
|
||
|
}
|
||
|
else if (intensidad<(2*1023/3))
|
||
|
{
|
||
|
greenWrite(map(intensidad,1023/3,2*1023/3,255,0));
|
||
|
redWrite(0);
|
||
|
blueWrite(0);
|
||
|
}
|
||
|
else if (intensidad<=1023)
|
||
|
{
|
||
|
greenWrite(0);
|
||
|
redWrite(0);
|
||
|
blueWrite(map(intensidad,2*1023/3,1023,255,0));
|
||
|
}
|
||
|
|
||
|
// delay(10);
|
||
|
for (int i=0; i<5; i++)
|
||
|
{
|
||
|
Serial.print(analogRead(pad[i])*(3300/1023.));
|
||
|
Serial.print(' ');
|
||
|
}
|
||
|
Serial.println(' ');
|
||
|
}
|