Sistema Di Allarme V2.0 Come posso ottimizzare le variabili? Arduino uno

Ciao ragazzi sono nuovo su questo forum e anche su arduino
Volevo chiedervi se è possibile ottimizzare questo sketch in modo che occupi meno memoria…magari utilizzando meno variabili!
Lo sketch consiste nell’ottenere dei dati da un sensore pir e a seconda del tasto premuto sulla tastiera eseguire delle funzioni e scrivere il tutto su un monitor seriale.
Ci sono 2 modalità la prima è automatica e consiste nel far scattare un’allarme se il sensore vede qualcuno o qualcosa muoversi nella stanza. La seconda è manuale ovvero: quando il pir rileva movimenti ti chiede se continuare con la ricerca di qualcosa in movimento oppure se suonare l’allarme in base hai tasti che premi!
Lo so lo sketch non è ben chiaro ma spero di avervi facilitato le cose con questa introduzione…in futuro metterò una scheda Ethernet o un modulo Bluetooth Per gestire il tutto da android senza cavo otg…e anche dei commenti così da non farvi impazzire…scusate e grazie :slight_smile:

int buzzer=11;
int pir=3;
char tastiera=0;
int a=0;
int z=0;
int b=0;
int s=0;
int limite=10;
int ti=0;
int tf=0;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
pinMode(buzzer,OUTPUT);
pinMode(pir,INPUT);
digitalWrite(pir,LOW);
}

void loop() {
  if(a<1){
    Serial.println("| [][][][][][][][][][][][][][][][][] |");
    Serial.println("|      Sistema Di Sicurezza V2.0     |");
    Serial.println("|_-_-_-_-_-_||-_-_-_-_-_-||-_-_-_-_-_|"); 
    Serial.println("|            Menu Iniziale           |"); 
    Serial.println("|-_-_-_-_-_-||-_-_-_-_-_-||-_-_-_-_-_|");
    Serial.println("| Premi 0 Per La Modalita Automatica |");
    Serial.println("|-_-_-_-_-_-||-_-_-_-_-_-||-_-_-_-_-_|");
    Serial.println("|  Premi 1 Per La Modalita Manuale   |");
    Serial.println("|-_-_-_-_-_-||-_-_-_-_-_-||-_-_-_-_-_|");
    Serial.println("| Premi 2 Per Vedere Tutto Lo Sketch |");
    Serial.println("|-_-_-_-_-_-||-_-_-_-_-_-||-_-_-_-_-_|");
    Serial.println("| __________________________________ |");
    a=1;
  }

  tastiera=Serial.read();
  
  switch(tastiera){
    case '0':
    funzioneA();
    break;
    case '1':
    funzioneB();
    break;
     case 'a':
    allarmeB();
    break;
    case 'b':
    funzioneB();
    break;
    default:
    Serial.flush();
    break;
  }
}

void funzioneA(){
  if(z<1){
  Serial.println("Avvio Modalita Controllo Automatico");
  z=1;
  }
if(digitalRead(pir)==HIGH){
  ti=millis()/1000;
 Serial.println("===================");
 Serial.println("Movimento Rilevato dopo");
 Serial.print(millis()/1000);
 Serial.println(" sec"); 
 Serial.println("==================="); 

 delay(1000); 
 
}
if(digitalRead(pir)==LOW){
  tf=millis()/1000;
 Serial.println("===================");
 Serial.println("Movimento Finito a");
 Serial.print(millis()/1000);
 Serial.println(" sec"); 
 Serial.println("==================="); 
 
 delay(1000);
 
}

if(tf-ti==limite){
  allarme();
 }else if(tf-ti<10000){
  Serial.println("Sicuro");
  
  funzioneA();
 }
 



}
void funzioneB(){
  if(s<1){
   Serial.println("Avvio Modalita Controllo Manuale");
   s=1;
  }
  if(digitalRead(pir)==HIGH){
 Serial.println("===================");
 Serial.println("Movimento Rilevato dopo");
 Serial.print(millis()/1000);
 Serial.println(" sec"); 
 Serial.println("Premi a Per L'ALLARME o Premi c Per Continuare");
 Serial.println("==================="); 
 delay(1000); 
  

}if(digitalRead(pir)==LOW){
 Serial.println("===================");
 Serial.println("Movimento Finito a");
 Serial.print(millis()/1000);
 Serial.println(" sec"); 
 Serial.println("==================="); 
 delay(1000);
 funzioneB();
}

 
}


   void allarme(){
    
  
      Serial.println("Avvio Allarme Tra 10 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 9 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 8 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 7 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 6 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 5 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 4 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 3 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 2 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 1 secondi");
      delay(1000);
for(int i=0; i<30; i++){
         tone(buzzer,400);
         delay(500);
          tone(buzzer,200);
          delay(500);
          noTone(buzzer);
          
         }
         funzioneA();
  }
  void allarmeB(){
      Serial.println("Avvio Allarme Tra 10 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 9 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 8 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 7 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 6 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 5 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 4 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 3 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 2 secondi");
      delay(1000);
          Serial.println("Avvio Allarme Tra 1 secondi");
      delay(1000);
for(int i=0; i<30; i++){
         tone(buzzer,400);
         delay(500);
          tone(buzzer,200);
          delay(500);
          noTone(buzzer);
          
         }
         funzioneB();
  }

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum "Italiano"

Quello che ti occupa RAM non sono le variabili, ma le dozzine di stringhe. Studiati la macro F(), ti aiuterà.

Occhio che prima di fare Serial.read() devi verificare che ci siano dati available().