Diferencia entre revisiones de «Medidor de parpadeo de luz»
Sin resumen de edición |
|||
| (No se muestran 2 ediciones intermedias del mismo usuario) | |||
| Línea 18: | Línea 18: | ||
#include "I2C_LCD.h" | #include "I2C_LCD.h" | ||
const int COLLECTION_MS = | const int COLLECTION_MS = 100; | ||
const int SENSOR_LIMIT = 850; | const int SENSOR_LIMIT = 850; | ||
const int SENSOR_BAJO = 200; | const int SENSOR_BAJO = 200; | ||
const int STOP_PIN = 3; | |||
const int INTERRUPT_SETTLE_MS = 1000; | |||
I2C_LCD lcd(39); | I2C_LCD lcd(39); | ||
volatile bool run = true; | |||
void stop() { | |||
if (millis() > INTERRUPT_SETTLE_MS) run = false; | |||
} | |||
void setup() { | void setup() { | ||
| Línea 28: | Línea 36: | ||
Wire.setClock(100000); | Wire.setClock(100000); | ||
lcd.begin(16, 2); | lcd.begin(16, 2); | ||
pinMode(STOP_PIN, INPUT_PULLUP); | |||
attachInterrupt(digitalPinToInterrupt(STOP_PIN), stop, LOW); | |||
} | } | ||
| Línea 33: | Línea 43: | ||
int x_max = 0, x_min = 10000; | int x_max = 0, x_min = 10000; | ||
unsigned long stop_ms = millis() + COLLECTION_MS; | unsigned long stop_ms = millis() + COLLECTION_MS; | ||
int sample_count = 0; | |||
while (millis() < stop_ms) { | while (millis() < stop_ms) { | ||
int x = analogRead(A0); | int x = analogRead(A0); | ||
if (x > x_max) x_max = x; | if (x > x_max) x_max = x; | ||
if (x < x_min) x_min = x; | if (x < x_min) x_min = x; | ||
sample_count++; | |||
} | } | ||
if (!run) return; | |||
lcd.clear(); | lcd.clear(); | ||
| Línea 48: | Línea 63: | ||
float ratio = (float)x_min / x_max; | float ratio = (float)x_min / x_max; | ||
lcd.center(0, ("ratio = " + String(ratio)).c_str()); | lcd.center(0, ("ratio = " + String(ratio)).c_str()); | ||
lcd.center(1, ("samples = " + String(sample_count)).c_str()); | |||
} | } | ||
} | } | ||
</pre> | </pre> | ||