Lab_interaccio/2021/Esther_sensores/Esther_sensores.ino

83 lines
2.1 KiB
Arduino
Raw Permalink Normal View History

2025-02-25 21:29:42 +01:00
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)
{
if ((millis()-time_inc)>=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);
}
}