Software antifurto

Ho trovato in rete un antifurto con laser io lo ho modificato in modo da usarlo con degli interruttori, funziona tutto però non riesco a fare in modo che quando io attivo l'allarme suona e quando lo disattivo non suona niente.
Il software è questo:

  // Numero del pin per il led/speaker
  int pinLed  = 13;
  int pinLed2  = 10;
  // Numero del pin del bottone
  int pinBtn  = 12;
   int pinBtn2  = 11;
    int pinBtn3  = 9;
  // =====================================================
  
  // ultimo output del bottone
  int lastOut = 0;
  
  // stato dell'allarme
  int alert   = 0;
  
  // numero di rivelazioni
  int riv     = 0;
  
  void setup() 
  {                 
    pinMode(pinLed, OUTPUT);
    pinMode(pinLed2, OUTPUT);
    pinMode(pinBtn,  INPUT);
    pinMode(pinBtn2,  INPUT);
    pinMode(pinBtn3,  INPUT);
    Serial.begin(9600); 
  }
  
  void loop() 
  {
    // leggo lo stato del bottone
    int btnStt = digitalRead(pinBtn);
    
    // leggo lo stato del bottone2
    int btnStt2 = digitalRead(pinBtn2);
    int btnStt3 = digitalRead(pinBtn3);
    // log rivelazione
    Serial.println(btnStt2);
    
    // se premo il bottone
   if( btnStt == HIGH )
   {
      Serial.println("bottone reset premuto");
      alert   = 0;
      riv     = 0;
      lastOut = 0;
   }
    
    // controllo se non è la prima rivelazione
    if( riv > 0 )
    { 
       // se l'allarme non è attivo
       if( alert == 0 )
       {
           // spengo il led
           digitalWrite(pinLed, LOW); 
            digitalWrite(pinLed2, HIGH);    
           Serial.println(btnStt2);
           
           // se l'attuale rivelazione più tolleranza è inferiore all'ultima rivelazione
           if( (btnStt2) > lastOut)
     
           { 
        
     // scatta l'allarne
              Serial.println("allarme attivato");
              digitalWrite(pinLed2, LOW);  
              digitalWrite(pinLed, HIGH);
              delay(1000);  
              digitalWrite(pinLed, LOW);
              delay(1000); 
              alert = 1;
           }
           else
           {
             Serial.println("Variazione accetabile");
           }
           
           // Mi salvo l'ultima rivelazione
           lastOut = btnStt2;    
       }
       else
       {
          Serial.println("allarme già precedentemente attivato");
          digitalWrite(pinLed, HIGH); 
          delay(800);  
              digitalWrite(pinLed, LOW);
              delay(800); 
       }
    }
    else
    {
      Serial.println("Prima rivelazione");
    }
    
    // incremento il numero di rivelazioni
    riv++;
  }

Come posso modificarlo?

Posta circuito o link da dove hai copiato sto progetto perchè ci si capisce veramente poco....

Si capisce poco ma si potrebbe fare una cosa.
Se le tue intenzioni sono premere un pulsante per poi attivare l'allarme e far suonare e premere di nuovo per disattivare e sentire di nuovo il suono basterebbe fare:

int pulsante = 12;
int cicalino = 13;
int val = 0;
int stato = 0;
void setup()
{
  pinMode(pulsante, INPUT);
  pinMode(cicalino, OUTPUT);
}
void loop()
{
  val = digitalRead(pulsante);
  if(val == HIGH)
  {
    stato = stato + 1;
  }
  if(stato == 1)
  {
    digitalWrite(cicalino, HIGH);
    delay(1000);
    digitalWrite(cicalino, LOW);
    delay(1000);
  }
  else
  {
    if(stato == 2)
    {
      digitalWrite(cicalino, HIGH);
      delay(1000);
      digitalWrite(cicalino, LOW);
      delay(1000);
      stato = 0;
    }
  }
    
}

GiovanniGigantino:
Si capisce poco ma si potrebbe fare una cosa.
Se le tue intenzioni sono premere un pulsante per poi attivare l'allarme e far suonare e premere di nuovo per disattivare e sentire di nuovo il suono basterebbe fare:

int pulsante = 12;

int cicalino = 13;
int val = 0;
int stato = 0;
void setup()
{
  pinMode(pulsante, INPUT);
  pinMode(cicalino, OUTPUT);
}
void loop()
{
  val = digitalRead(pulsante);
  if(val == HIGH)
  {
    stato = stato + 1;
  }
  if(stato == 1)
  {
    digitalWrite(cicalino, HIGH);
    delay(1000);
    digitalWrite(cicalino, LOW);
    delay(1000);
  }
  else
  {
    if(stato == 2)
    {
      digitalWrite(cicalino, HIGH);
      delay(1000);
      digitalWrite(cicalino, LOW);
      delay(1000);
      stato = 0;
    }
  }
   
}

io vorrei far in modo che io premo un pulsante (pin13) è l'allarme si attiva e se uno preme il pulsante collegato al pin 12 scatta l'allarme. POi premo il pulsante collegato al pin13 e l'allarme si disattiva ma se premo il pulsante collegato al pin 12 non suona niente deve suonare solo se io per esempio premo di nuovo il pulsatne collegato al pin 13 e l'alalrme si riattiva .

const int pulsante1 = 12; 
const int pulsante2 = 13;
const int cicalino = 11;
const int allarme = 10;
int val1 = 0;
int val2 = 0;
int stato1 = 0;
int stato2 = 0;
void setup() {
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(cicalino, OUTPUT);
  pinMode(allarme, OUTPUT);
}

void loop() {
  val1 = digitalRead(pulsante1);
  val2 = digitalRead(pulsante2);
  if(val1 == HIGH)
  {
    stato1 = stato1 + 1;
  }
  if(val2 == HIGH)
  {
    stato2 = stato2 + 1;
  }
  if(stato2 == 1)
  {
    digitalWrite(cicalino, HIGH);
    delay(1000);
    digitalWrite(cicalino, LOW);
    delay(1000);
  }
  else
  {
    if(stato2 == 2)
    {
      digitalWrite(allarme, LOW);
      digitalWrite(cicalino, HIGH);
      delay(1000);
      digitalWrite(cicalino, LOW);
      delay(1000);
      stato2 = 0;
      stato1 = 0;
    }
  }
  if(stato1 == 1)
  {
    digitalWrite(allarme, HIGH);
  }
}

Questo programma mi sembra più che adatto a quello che devi fare...
Ti elenco i pin
PIN:
Pulsante1 = serve per far suonare l'allarme se una persona lo attiva involontariamente(non so quale sensore vuoi usare)
Pulsante2 = serve per attivare o disattivare l'allarme
cicalino = fa il bip quando attivi o disattivi l'allarme
allarme = suona quando pulsante1 indica TRUE

Ho provato ma non funziona quando l'allarme è disattivato se si tiene premuto diciamo il pulsante che simula il sensore l'allarme scatta lo stesso

Ho modificato un po il codice che ti hanno postato, prevedendo due "interruttori a livello di codice" che attivano uno l'allarme attivo-disattivo, e uno il suono suona-non suona... :slight_smile:
Se vuoi adattarlo alle tue esigenze e provarlo, poi fammi sapere.

const int pulsante1 = 12; // Stato attivo o disattivo 
const int pulsante2 = 13; // Pulsante attivazione allarme
const int allarme = 10;
int val1 = 0;
int val2 = 0;
int stato1 = 0; //Attivo disattivo
int stato2 = 0;//Allarme suona o non suona
void setup() {
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(allarme, OUTPUT);
}

void loop() {
  val1 = digitalRead(pulsante1);//Stato attivo o disattivo
  val2 = digitalRead(pulsante2);// Allarme suona o non suona
  if(val1 == HIGH)
  {    if(stato1 ==0)// Funge da interruttore acceso spento
            stato1=1;
        else {
            stato1=0;
            stato2=0;	   
       }
  }
  if(val2 == HIGH)
  {
         stato1=1;
       
  }
  if(stato2 == 1 && stato1==1)// Se stato1=Allarme attivo E stato2=Sensore attivo SUONA
  {
     /* Come in un allarme vero, dopo che viene attivato il sensore pulsante2, continua a suonare
         finché non si disattiva l'allarme*/
     /* Iserire un codice adatto a far suonare l'allarme*/
    digitalWrite(allarme, HIGH);
    delay(1000);
    digitalWrite(allarme, LOW);
    delay(1000);
  }
  else
  {
      digitalWrite(allarme, LOW);
  
  }
}

non funziona

io dico un progetto simile a questo: Allarme Con Arduino Uno - YouTube

Esisteva un piccolo errore in una linea di codice, che guardandolo avresti potuto intuire, ti posto la correzione.
Controlla che i pin siano quelli che usi nel circuito, vedi se la pausa di 100 ms faccia emettere suono o altrimenti modifica, dovrebbe funzionare o comunque se capisci il codice ti dovrebbe portare alla soluzione, perché poi il divertimento di arduino penso sia proprio farsi il codice da soli :wink:

int val1 = 0;
int val2 = 0;
int stato1 = 0; //Attivo disattivo
int stato2 = 0;//Allarme suona o non suona
void setup() {
  pinMode(pulsante1, INPUT);
  pinMode(pulsante2, INPUT);
  pinMode(allarme, OUTPUT);
}

void loop() {
  val1 = digitalRead(pulsante1);//Stato attivo o disattivo
  val2 = digitalRead(pulsante2);// Allarme suona o non suona
  if(val1 == HIGH)
  {    if(stato1 ==0)// Funge da interruttore acceso spento
            stato1=1;
        else {
            stato1=0;
            stato2=0;	   
       }
  }
  if(val2 == HIGH)
  {
         // stato1=1;  qui bisognava cambiare stato2
            
            stato2=1;
  }
  if(stato2 == 1 && stato1==1)// Se stato1=Allarme attivo E stato2=Sensore attivo SUONA
  {
     /* Come in un allarme vero, dopo che viene attivato il sensore pulsante2, continua a suonare
         finché non si disattiva l'allarme*/
     /* Iserire un codice adatto a far suonare l'allarme*/
    digitalWrite(allarme, HIGH);
    delay(100);
    digitalWrite(allarme, LOW);
    delay(100);
  }
  else
  {
      digitalWrite(allarme, LOW);
  
  }
}

Si giusto non me ne ero accorto che c'era stato 1 apposto di stato 2 come variabile.Si adesso funziona grazie mille adesso ci aggiungo il cicalino e vedo se riesco ad adattarci anche il display con la scritta disattivato o attivato :slight_smile: :slight_smile: