Sistema di chiamate da stanze di degenza. Pulsante di silenziamento con visualizzazione su display della numerazione assegnata al pulsante di chiamata
Codice
#include <SevenSegment.h>
#define DIM 51 // This pin turns off the display when set LOW
#define CLK 53 // This is the clock pin
#define DATA 52 // marrone
#define MAXDIGITS 2 // number of display digits
double value = 1;
const int buttonpin_1 = 25;
const int buttonpin_2 = 29;
const int buttonpin_3 = 31;
const int buttonpin_4 = 33;
const int buttonpin_5 = 35;
const int buttonpin_6 = 37;
const int buttonpin_7 = 41;
const int buttonpin_8 = 45;
const int buttonpin_9 = 20;
const int buttonpin_10 = 23;
const int buttonpin_11 = 26;
const int buttonpin_12 = 28;
const int buttonpin_13 = 30;
const int buttonpin_14 = 34;
const int buttonpin_15 = 38;
const int buttonpin_16 = 42;
const int sirenapin_1 = 24;
const int buttonpin_reset = 21;
int momento_sirena = -1;
int pinstate_1 = 0;
int pinstate_2 = 0;
int pinstate_3 = 0;
int pinstate_4 = 0;
int pinstate_5 = 0;
int pinstate_6 = 0;
int pinstate_7 = 0;
int pinstate_8 = 0;
int pinstate_9 = 0;
int pinstate_10 = 0;
int pinstate_11 = 0;
int pinstate_12 = 0;
int pinstate_13 = 0;
int pinstate_14 = 0;
int pinstate_15 = 0;
int pinstate_16 = 0;
int pinstate_reset;
long istante_spegnimento;
const int pausa_fra_due_beep = 1000;
const long tempo_sleep_digit = 300000;
unsigned char digits[2];
int stanza_da_suonare;
int intervallo_crescente;
long istante_reset =0;
long setup_intervallo_crescente = 5000;
SevenSegment seg = SevenSegment(DATA,CLK,DIM,MAXDIGITS);
void setup() {
// initialize the button pin as a input:
pinMode(DIM, OUTPUT);
pinMode(buttonpin_1, INPUT);
pinMode(buttonpin_2, INPUT);
pinMode(buttonpin_3, INPUT);
pinMode(buttonpin_4, INPUT);
pinMode(buttonpin_5, INPUT);
pinMode(buttonpin_6, INPUT);
pinMode(buttonpin_7, INPUT);
pinMode(buttonpin_8, INPUT);
pinMode(buttonpin_9, INPUT);
pinMode(buttonpin_10, INPUT);
pinMode(buttonpin_11, INPUT);
pinMode(buttonpin_12, INPUT);
pinMode(buttonpin_13, INPUT);
pinMode(buttonpin_14, INPUT);
pinMode(buttonpin_15, INPUT);
pinMode(buttonpin_16, INPUT);
pinMode(buttonpin_reset, INPUT);
// Serial.begin(9600);
}
void loop() {
if (millis() > (istante_spegnimento + pausa_fra_due_beep) && momento_sirena >= 0) {
Serial.println("millis() ");
Serial.println(millis());
Serial.println("istante spegnimento ");
Serial.println(istante_spegnimento);
momento_sirena = funzionamento_sirena (stanza_da_suonare,momento_sirena,sirenapin_1);
digitalWrite(sirenapin_1, LOW);
istante_spegnimento = millis();
if (momento_sirena == 0) {
Serial.println("Allunga la pausa ");
intervallo_crescente = intervallo_crescente + 1000;
istante_spegnimento = istante_spegnimento + intervallo_crescente;
}
}
if (millis() > (istante_reset + tempo_sleep_digit) && istante_reset > 0) {
istante_reset = 0;
// digitalWrite(DIM, 1);
// seg.displayNum(0,0,0); // display the current value with 1 decimal place
// digitalWrite(DIM, 0);
digitalWrite(DIM, 1);
digits[0] = '.';
digits[1] = '.';
seg.displayChars(digits);
digitalWrite(DIM, 0);
}
pinstate_1 = pulsante_schiacciato(buttonpin_1);
if (pinstate_1 == 1) {
momento_sirena = 0;
stanza_da_suonare = 1;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_2 = pulsante_schiacciato(buttonpin_2);
if (pinstate_2 == 1) {
momento_sirena = 0;
stanza_da_suonare = 2;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_3 = pulsante_schiacciato(buttonpin_3);
if (pinstate_3 == 1) {
momento_sirena = 0;
stanza_da_suonare = 3;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_4 = pulsante_schiacciato(buttonpin_4);
if (pinstate_4 == 1) {
momento_sirena = 0;
stanza_da_suonare = 4;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_5 = pulsante_schiacciato(buttonpin_5);
if (pinstate_5 == 1) {
momento_sirena = 0;
stanza_da_suonare = 5;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_6 = pulsante_schiacciato(buttonpin_6);
if (pinstate_6 == 1) {
momento_sirena = 0;
stanza_da_suonare = 6;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_7 = pulsante_schiacciato(buttonpin_7);
if (pinstate_7 == 1) {
momento_sirena = 0;
stanza_da_suonare = 7;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_8 = pulsante_schiacciato(buttonpin_8);
if (pinstate_8 == 1) {
momento_sirena = 0;
stanza_da_suonare = 8;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_9 = pulsante_schiacciato(buttonpin_9);
if (pinstate_9 == 1) {
momento_sirena = 0;
stanza_da_suonare = 9;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_10 = pulsante_schiacciato(buttonpin_10);
if (pinstate_10 == 1) {
momento_sirena = 0;
stanza_da_suonare = 10;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_11 = pulsante_schiacciato(buttonpin_11);
if (pinstate_11 == 1) {
momento_sirena = 0;
stanza_da_suonare = 11;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_12 = pulsante_schiacciato(buttonpin_12);
if (pinstate_12 == 1) {
momento_sirena = 0;
stanza_da_suonare = 12;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_13 = pulsante_schiacciato(buttonpin_13);
if (pinstate_13 == 1) {
momento_sirena = 0;
stanza_da_suonare = 13;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_14 = pulsante_schiacciato(buttonpin_14);
if (pinstate_14 == 1) {
momento_sirena = 0;
stanza_da_suonare = 14;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_15 = pulsante_schiacciato(buttonpin_15);
if (pinstate_15 == 1) {
momento_sirena = 0;
stanza_da_suonare = 15;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_16 = pulsante_schiacciato(buttonpin_16);
if (pinstate_16 == 1) {
momento_sirena = 0;
stanza_da_suonare = 16;
Serial.println("spinto ");
Serial.println(stanza_da_suonare);
}
pinstate_reset = pulsante_schiacciato( buttonpin_reset);
if (pinstate_reset == 1) {
istante_reset = millis();
momento_sirena = -1;
intervallo_crescente = setup_intervallo_crescente;
Serial.println("Reset spento ");
delay(300);
digitalWrite (sirenapin_1, HIGH);
delay(300);
digitalWrite (sirenapin_1, LOW);
}
}
// ....................................................................
// ....................................................................
// ....................................................................
// ....................................................................
int pulsante_schiacciato(int buttonPin){
int tasto_premuto = 0;
int debounceDelay = 100;
int lastDebounceTime;
int buttonState;
int buttonState_aggiornato;
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
lastDebounceTime = millis();
// if the state has changed, increment the counter
tasto_premuto = 1;
while ((millis() - lastDebounceTime) < debounceDelay) {
buttonState_aggiornato = digitalRead(buttonPin);
if (buttonState_aggiornato != HIGH)
{
tasto_premuto = 0;
}
}
}
return tasto_premuto;
}
// ....................................................................
// ....................................................................
// ....................................................................
// ....................................................................
int funzionamento_sirena (int stanza_da_suonare,int momento_sirena, int ledPin) {
int ritardo_lungo = 2000;
int ritardo_corto = 500;
momento_sirena = momento_sirena + 1;
Serial.println("momento sirena ");
Serial.println(momento_sirena );
digitalWrite(DIM, 1);
seg.displayNum(stanza_da_suonare,0,0); // display the current value with 1 decimal place
digitalWrite(DIM, 0);
if (momento_sirena == 1 && stanza_da_suonare > 5) {
// digitalWrite(ledPin, HIGH);
// delay(ritardo_lungo);
// Serial.println("stanza_da_suonare > 5");
// return momento_sirena;
}
if (momento_sirena == 2 && stanza_da_suonare > 10) {
// digitalWrite (ledPin, HIGH);
// delay(ritardo_lungo);
// Serial.println("stanza_da_suonare > 10");
// return momento_sirena;
}
if (momento_sirena == 3 && stanza_da_suonare > 15) {
// digitalWrite(ledPin, HIGH);
// delay(ritardo_lungo);
// Serial.println("stanza_da_suonare > 15");
// return momento_sirena;
}
if (momento_sirena == 2 && stanza_da_suonare > 5) {
// momento_sirena = 6;
}
if (momento_sirena == 3 && stanza_da_suonare > 10) {
// momento_sirena = 11;
}
if (momento_sirena == 4 && stanza_da_suonare > 15) {
// momento_sirena = 16;
}
momento_sirena = stanza_da_suonare;
digitalWrite (ledPin, HIGH);
delay(ritardo_corto);
if (momento_sirena >= stanza_da_suonare) {
Serial.println("Ripetizione sirena");
momento_sirena = 0;
}
return momento_sirena;
}