Lab_interaccio/2015/OVAL/OVAL_PAD/OVAL_PAD.ino

171 lines
3.5 KiB
Arduino
Raw Normal View History

2025-02-25 21:29:42 +01:00
#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(' ');
}