#include #include #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(' '); }