const byte sensor_masa {2}; // pin de la entrada de señal del loop
const byte ledPin {13}; // pin del LED interno del arduino
const byte gobo {8}; // salida del relevador de control del GOBO proyector
constexpr unsigned long TIMESPAN {10000}; // 10 Seconds (10000 ms)
enum class SensorState : byte {on, isOn, off, isOff};
byte estado_sensormasa {LOW}; // Estado de lectura del sensor Accesspro
unsigned long timeStamp;
void setup() {
pinMode(ledPin, OUTPUT); // Inicializacion de led interno Arduino como salida
pinMode(sensor_masa, INPUT); // Inicializacion de pin del sensor del Accesspro como entrada
pinMode(gobo, OUTPUT); // Inicializacion del pin de gobo como salida
Serial.begin(9600);
Serial.println(F("Start..."));
}
void loop() {
static SensorState sensorState {SensorState::isOff};
checkState( digitalRead(sensor_masa), sensorState); // Lectura del estado del sensor de piso
}
void checkState(byte pinState, SensorState& state) {
if (pinState == HIGH && state == SensorState::isOff) {
Serial.println(F("Signal ON. Wait 10 Seconds to switch on"));
timeStamp = millis();
state = SensorState::on;
} else if (pinState == LOW && state == SensorState::isOn) {
Serial.println(F("Signal OFF. Wait 10 Seconds to switch off"));
timeStamp = millis();
state = SensorState::off;
}
switch (state) {
case SensorState::on:
if (millis() - timeStamp > TIMESPAN ) {
Serial.println(F("Switch On"));
digitalWrite(ledPin, HIGH);
digitalWrite(gobo, HIGH);
state = SensorState::isOn;
}
break;
case SensorState::off:
if (millis() - timeStamp > TIMESPAN ) {
Serial.println(F("Switch Off"));
digitalWrite(ledPin, LOW);
digitalWrite(gobo, LOW);
state = SensorState::isOff;
}
break;
default:
break;
}
} //