cellulare che chiamata se scatta l'antifurto

ciao a tutti , mi devo creare un piccolo antifurto usando un vecchio telefono cellulare, visto che ne ho un po' che non uso , portando fuori i fili del tastierino , per ora mi sono creato il listato per effettuare la chiamata .
e corretto cosi l uso di millis();
poi chiedero aiuto per il resto....
per ora grazie

unsigned long led1OnTime = 0;
boolean flag=0;
byte passaggio = 9;
void setup() {
  Serial.begin(9600);
  pinMode(11, INPUT_PULLUP);
  pinMode(4, OUTPUT);//rele tasto C
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);
  pinMode(5, OUTPUT);

}

void loop() {
 if (digitalRead(11) == HIGH&& flag == 1) {
    flag=0;
    }
  if (digitalRead(11) == LOW&& flag == 0) {
    flag=1;
    }
    if (flag == 1) {
    Serial.print("SSS    ");
    led1OnTime = millis();
    passaggio = 0;
    Serial.println(led1OnTime);
    Serial.println(passaggio);
  //flag = 0;
  }
  if ((millis() - led1OnTime  >= 3000) && (passaggio == 0)) { //
    Serial.println("premo pulsante rosso on ");
    digitalWrite(4, HIGH);  //rele tasto ROSSO on
    passaggio = 1;
  }
  if ((millis() - led1OnTime >= 4000) && (passaggio == 1)) { //
    Serial.println("alzo pulsante rosso  ");
    digitalWrite(4, LOW);  //rele tasto ROSSO off
    passaggio = 2;
  }
  if ((millis() - led1OnTime  >= 5500 ) && (passaggio == 2)) { //
    Serial.println("premo pulsante rosso  ");
    digitalWrite(4, HIGH);  //rele tasto ROSSO on
    passaggio = 3;
  }
  if ((millis() - led1OnTime >= 6000) && (passaggio == 3)) { //
    Serial.println("alzo pulsante rosso off");
    digitalWrite(4, LOW);  //rele tasto ROSSO off
    passaggio = 4;
  }
  if ((millis() - led1OnTime >= 8000) && (passaggio == 4)) { //
    Serial.println("premo tasto C ");
    digitalWrite(5, HIGH);  //rele tasto 1 on
    passaggio = 5;
  }
  if ((millis() - led1OnTime >= 8300) && (passaggio == 5)) { //
    Serial.println("alzo tasto C ");
    digitalWrite(5, LOW);  //rele tasto 1 off
    passaggio = 6;
  }
  if ((millis() - led1OnTime >= 9500) && (passaggio == 6)) { //
    Serial.println("premo tasto Chiamata ");
    digitalWrite(6, HIGH);  //rele tasto 1 on
    passaggio = 7;
  }
  if ((millis() - led1OnTime >= 11200) && (passaggio == 7)) { //
    Serial.println("alzo tasto tasto Chiamata  ");
    digitalWrite(6, LOW);  //rele tasto 1 off
    passaggio = 8;
  
  }
if ((millis() - led1OnTime >= 30000) && (passaggio == 8)) { //
    Serial.println("chiudo telefonata  premo rosso");
    digitalWrite(5, HIGH);  //rele tasto 1 off
    passaggio = 9;
}
if ((millis() - led1OnTime >= 30500) && (passaggio == 9)) { //
    Serial.println("chiudo telefonata  rilascio rosso");
    digitalWrite(5, LOW);  //rele tasto 1 off
    passaggio = 10;
}
}

Ciao, diciamo che con millis ci siamo come uso anche se puoi migliorare il codice usando uno switch al posto di tutti gli if
Es.

switch(passaggio )
{
    case 0:
      if(millis() - led1OnTime  >= 3000)
      {
          ..
       }
    break
    case 1:
       if ((millis() - led1OnTime >= 4000))
       {
          passaggio=2;
        }
    break
    ...
}

in modo che il codice divenga più leggibile.
Poi può anche andare bene calcolare i tempi partendo dall'inizio di ciò che li scatena ma puoi anche pensare di farli dipendere dal valore di millis() dell'evento che li precede in modo che se devi aggiungere uno stato intermedio o variare una tempistica non sei costretto a variare tutte le successive ti basta riassegnare alla variabile led1OnTime il valore di millis() dentro i vari if che fanno ciò che devono nei singoli passaggi:

switch(passaggio )
{
    case 0:
      if(millis() - led1OnTime  >= 3000)
      {
          ...
          led1OnTime  = millis();
       }
    break
    case 1:
       if ((millis() - led1OnTime >= 1000))  //Differenza rispetto allo sato precedente e non all'inizio
       {
          ...
          passaggio=2;
          led1OnTime  = millis();
        }
    break
    ...
}

io prima di tutto ti direi di controllare quanto sono vecchi i tuoi cellulari

perché se stanno dismettendo alcuni servizi GSM e alcuni moduli GSM comperati "adesso" per Arduino tra poco diverranno inutili, a maggior ragione temo che i i telefonini "già" vecchi non rimarranno utilizzabili a lungo

dovrebbe essere un 3 g, poi lo so ma essendo a costo zero , fino a che va avanti sono contento

giusto

ciao a tutti ho aggiunto anche il caso che il cellulare sia spento.ed ho limitato le chiamate per evento a 3 , e corretto cio' che ho scritto?
grazie mille

unsigned long led1OnTime = 0;
boolean flag = 0;
boolean flag_1 = 0;
boolean lcd_cell = 0;
byte conta = 0;
int passaggio = 99;
byte old_passaggio = 25;
void setup() {
  Serial.begin(9600);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(4, OUTPUT);//rele tasto C
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite(4, HIGH);
  delay(200);
  digitalWrite(5, HIGH);
  delay(200);
  digitalWrite(6, HIGH);
  delay(200);
  digitalWrite(7, HIGH);
  delay(200);
  Serial.println("connessione attiva");
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
}

void loop() {
  if (digitalRead(10) == LOW ) {
    lcd_cell = 1;
  }
  else {
    lcd_cell = 0;
  }
 
  if (conta > 2) { // imposto limite 3 chiamate per evento
    Serial.println("stop");
  }

  if (conta < 3) {
    // put your main code here, to run repeatedly:
    if (digitalRead(11) == LOW && flag == 0) {
      Serial.println("PREMUTO");
      Serial.println(led1OnTime);
      passaggio = 55;
      flag = 1;
    }
    else if (digitalRead(11) == HIGH ) {
      flag = 0;
    }
    if (passaggio != old_passaggio) {
      Serial.println(passaggio);
      old_passaggio = passaggio;
    }
    switch (passaggio )
    {
      case 55: {   //controllo se il cellulare
          // e' acceso
          Serial.println("premo  tsto Ce controllo se e' acceso");
          digitalWrite(5, HIGH);
          passaggio = 56;
          led1OnTime  = millis();
        }
        break;
      case 56: {//rilascio tasto C
          if (millis() - led1OnTime  >= 500) {
            Serial.println("rilascio tasto C");
            digitalWrite(5, LOW);
            led1OnTime  = millis();
            passaggio = 57;
          }
        }
        break;
      case 57: {//controllo se il display del
          // cellulare e' acceso
          if (millis() - led1OnTime  >= 1500) {
            Serial.println("controllo se acceso");
            led1OnTime  = millis();
            if (   lcd_cell == 0) { // se e' spento
              Serial.println("Spento");
              digitalWrite(5, HIGH);
              Serial.println("pressione lunga accensione");
              passaggio = 58 ;
            }
            else {//se e' acceso
              Serial.println("acceso avvio chiamate");
              passaggio = 0;
            }
          }
        }
        break;// accendo il cellulare pressione lunga
      case 58: {   //accendo il cell
          if (millis() - led1OnTime  >= 2000) {
            Serial.println("pressione lunga accansione rilascio");
            digitalWrite(5, LOW);
            passaggio = 59;
            led1OnTime  = millis();
          }
        }
        break;
      case 59: {   //aspetto il loop del cellulare
          if (millis() - led1OnTime  >= 5000) {
            Serial.println("aspetto il loop del cellulare");
            passaggio = 55;
            led1OnTime  = millis();
          }
        }
        break;
      //   cancello eventuali numeri sul display sul cell
      case 0: {        //premo tasto rosso
          if (millis() - led1OnTime  >= 3000) {
            Serial.println("premo pulsante rosso on ");
            digitalWrite(4, HIGH);  //rele tasto ROSSO on
            passaggio = 1;
            led1OnTime  = millis();
          }
        }
        break;
      case 1: {   //rilascio tasto rosso
          if ((millis() - led1OnTime  >= 500)) {
            Serial.println("rilascio tasto rosso on ");
            digitalWrite(4, LOW);  //rele tasto ROSSO off
            passaggio = 3;
            led1OnTime  = millis();
          }
        }
        break;
      case 2: {   //ri premo tasto rosso
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("ri premo pulsante rosso on ");
            digitalWrite(4, HIGH);  //rele tasto ROSSO on
            passaggio = 3;
            led1OnTime  = millis();
          }
        }
        break;
      case 3: {   //ri rilascio tasto rosso
          if ((millis() - led1OnTime  >= 500)) {
            Serial.println("ri rilascio tasto rosso  ");
            digitalWrite(4, LOW);  //rele tasto ROSSO on
            passaggio = 4;
            led1OnTime  = millis();
          }
        }
        break;
      case 4: {   //premo tasto C
          if ((millis() - led1OnTime  >= 500)) {
            Serial.println("premo tasto C");
            digitalWrite(5, HIGH);  //rele tasto ROSSO on
            passaggio = 5;
            led1OnTime  = millis();
          }
        }
        break;
      case 5: {   //rilascio tasto C
          if ((millis() - led1OnTime  >= 500)) {
            Serial.println("rilascio tasto C");
            digitalWrite(5, LOW);  //rele tasto ROSSO on
            passaggio = 6;
            led1OnTime  = millis();
          }
        }
        break;
      //da qui inizio prima telefonata
      case 6: {   //pressione lunga tasto  1 chiamata rapida
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("pressione lunga tasto 1 chiamata");
            digitalWrite(6, HIGH);  //rele tasto chiamata
            passaggio = 7;
            led1OnTime  = millis();
          }
        }
        break;
      case 7: {   //rilascio tasto 1 chiamata rapida
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("rilascio tasto 1 chiamata");
            digitalWrite(6, LOW);  //rele tasto chiamata
            passaggio = 8;
            led1OnTime  = millis();
          }
        }
        break;
      case 8: {   //chiudo telefonata premo rosso
          if ((millis() - led1OnTime  >= 30000)) {
            Serial.println("chiudo 1 telefonata premo rosso");
            digitalWrite(5, HIGH);  //rele tasto chiamata
            passaggio = 9;
            led1OnTime  = millis();
          }
        }
        break;
      case 9: {   //rilascio rosso
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("rilascio 1 rosso");
            digitalWrite(5, LOW);  //rele tasto chiamata
            passaggio = 10;
            led1OnTime  = millis();
          }
        }
        break;
      //aspetto ed faccio la 2 telefonata
      case 10: {   //pressione lunga tasto 2 chiamata rapida
          if ((millis() - led1OnTime  >= 2000)) {
            Serial.println("pressione lunga tasto 2 chiamata");
            digitalWrite(7, HIGH);  //rele tasto chiamata
            passaggio = 11;
            led1OnTime  = millis();
          }
        }
        break;
      case 11: {   //rilascio tasto 2 chiamata rapida
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("rilascio tasto 2 chiamata");
            digitalWrite(7, LOW);  //rele tasto chiamata
            passaggio = 12;
            led1OnTime  = millis();
          }
        }
        break;
      case 12: {   //chiudo telefonata premo rosso
          if ((millis() - led1OnTime  >= 30000)) {
            Serial.println("chiudo telefonata 2  premo rosso");
            digitalWrite(5, HIGH);  //rele tasto chiamata
            passaggio = 13;
            led1OnTime  = millis();
          }
        }
        break;
      //fine telefonata
      case 13: {   //rilascio rosso
          if ((millis() - led1OnTime  >= 1000)) {
            Serial.println("rilascio  2 rosso");
            digitalWrite(5, LOW);  //rele tasto chiamata
            conta = conta + 1;
            passaggio = 25;
            led1OnTime  = millis();
          }
        }
        break;
    }
  }
}

Se il tuo sistema si accende solo quando accade un evento può anche andare bene ma se, invece, resta sempre acceso non azzerando mai la variabile "conta" farai solo tre chiamate e poi non farai più nulla.
Inoltre setti la variabile passaggio a 25 e non hai la gestione di tale stato

si , grazie dell avvertimento ,ci avevo pensato, ora devo procedere con il resto, il mio dubbio era solo questo,
grazie ancora

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.