int in[5] = {A1 , A2, A3, A4, A5}; #define GREEN 9 #define RED 10 #define BLUE 11 #define TIME 2000 #define TIME_INC 10 #define inc 255*TIME_INC/TIME #define COLOUR BLUE const long referenceMv = 5000; void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); analogWrite(RED, 0); analogWrite(GREEN, 0); analogWrite(BLUE, 0); } unsigned long time_sensor = millis(); unsigned long time_fade = millis(); unsigned long time_inc = millis(); int value = 0; void loop() { // put your main code herddfe, to run repeatedly: if ((millis()-time_sensor)>=100) { Serial.print("Sensor:"); for(int i=0; i<5; i++) { int val = analogRead(in[i]); int mV = (val * referenceMv) / 1023; int cm = getDistance(mV); Serial.print(cm); if (i<4)Serial.print(","); else Serial.println(); } time_sensor = millis(); } if ((millis()-time_fade)=TIME_INC) { if((value+inc)>255) value = 255; else value = value+inc; analogWrite(COLOUR, value); time_inc = millis(); } } else if ((millis()-time_fade)<2*TIME) { if ((millis()-time_inc)>=TIME_INC) { if((value-inc)<0) value = 0; else value = value-inc; analogWrite(COLOUR, value); time_inc = millis(); } } else time_fade = millis(); } //interpolaciĆ³n de la distancia a intervalos de 250mV const int TABLE_ENTRIES = 12; const int INTERVAL = 250; static int distance[TABLE_ENTRIES] = {150,140,130,100,60,50,40,35,30,25,20,15}; int getDistance(int mV) { if (mV > INTERVAL * TABLE_ENTRIES - 1) return distance[TABLE_ENTRIES - 1]; else { int index = mV / INTERVAL; float frac = (mV % 250) / (float)INTERVAL; return distance[index] - ((distance[index] - distance[index + 1]) * frac); } }