Pages: 1 [2]   Go Down
Author Topic: aiuto con codice timer  (Read 1546 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ci riprovo. ma usando quello che ho fatto fin'ora come faccio semplicemente a tenere in memoria tre pressioni del pulsante e alla terza far suonare il buzzer? almeno intanto fa grossomodo quello che deve poi continuo a perfezionarlo
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova così, l'ho buttato di fretta
Code:
//dichiarazione costanti: sono tutti i pin assegnati
const int Pulsante = 8;
const int led1rosso = 7;
const int led2rosso = 6;
const int led1giallo = 4;
const int led2giallo = 5;
const int led1verde = 2;
const int led2verde = 3;
const int ledARMED = 9;
const int ledDISARMED = A0;
const int Buzzer = A1;
const int Combinazione = A2;
const int PulsanteTerminale = A3;

//dichiarazione variabili. stato pulsante e buzzer.
int old_statopulsante = LOW;
int old_statopulsanteterminale = LOW;
int old_statocombinazione = LOW;
int statopulsante = 0;
int statoled = 0;
int statobuzzer = 0;
int statocombinazione = 0;
int statopulsanteterminale = 0;
int tentativi = 0;

unsigned long T0 = 0;
unsigned long T1 = 0;
unsigned long Tint = 0;
unsigned int Tindex = 0;

void setup () {
  delay(1000);
  Serial.begin(9600);

  //definisco i pin di output
  pinMode(led1verde, OUTPUT);
  pinMode(led2verde, OUTPUT);
  pinMode(led1giallo, OUTPUT);
  pinMode(led2giallo, OUTPUT);
  pinMode(led1rosso, OUTPUT);
  pinMode(led2rosso, OUTPUT);
  pinMode(ledARMED, OUTPUT);
  pinMode(ledDISARMED, OUTPUT);
  pinMode(Buzzer, OUTPUT);

  //definisco i pin di input
  pinMode(Pulsante, INPUT);
  pinMode(PulsanteTerminale, INPUT);
  pinMode(Combinazione, INPUT);

  T0 = millis();
  Serial.print(F("Go at "));
  Serial.print(T0);
  Serial.println(F(" milliseconds."));   
}

void loop(){
  digitalWrite(ledDISARMED, HIGH);

  statopulsante = digitalRead(Pulsante); //Lettura stato pulsante
  statocombinazione = digitalRead(Combinazione); //Lettura stato pulsante terminale
  statopulsanteterminale = digitalRead(PulsanteTerminale); //Lettura stato pulsante terminale
  delay(20);

  //se il pulsante è premuto lo stato è HIGH e avvia il ciclo
  if ((statopulsante == HIGH) && (old_statopulsante == LOW)){
    statopulsante = 1 ;
    Serial.println(F("Armed - start countdown..."));
  }

  if (statopulsante == 1) { //accendo tutti i led ed inizio il countdown
    armed();
  }
  else {
    disarmed();
    Serial.println(F("Disarmed."));
  }

  //codice che include il terminale nel processo
  //se il pulsante è premuto lo stato è HIGH controlla la combinazione il ciclo
  if ((statocombinazione == HIGH) && (old_statocombinazione == LOW)){
    statocombinazione = 1 ;
    Serial.println(F("combinazione"));
  }

  //se il pulsante è premuto lo stato è HIGH e avvia il ciclo
  if ((statopulsanteterminale == HIGH) && (old_statopulsanteterminale == LOW)){
    statopulsanteterminale = 1 ;
    Serial.println(F("terminale"));
  }

  if ((statocombinazione == HIGH) && (statopulsanteterminale == HIGH)){
    Serial.println(F("All stop"));
    digitalWrite(ledDISARMED, HIGH);
    digitalWrite(led1rosso, LOW);
    digitalWrite(led2rosso, LOW);
    digitalWrite(led1giallo, LOW);
    digitalWrite(led2giallo, LOW);
    digitalWrite(led1verde, LOW);
    digitalWrite(led2verde, LOW);
    digitalWrite(ledARMED, LOW);
  }

  if ((statocombinazione == LOW) && (statopulsanteterminale == HIGH)){
    tentativi++;
    digitalWrite(Buzzer, HIGH);
    delay (100);
    digitalWrite(Buzzer, LOW);
    Serial.println(F("tentativi"));
    Serial.println(tentativi);
  }

  if (tentativi = 3){
    Serial.println(F("Hai raggiunto 3 tentativi"));
    digitalWrite(ledDISARMED, LOW);
    digitalWrite(led1rosso, LOW);
    digitalWrite(led2rosso, LOW);
    digitalWrite(led1giallo, LOW);
    digitalWrite(led2giallo, LOW);
    digitalWrite(led1verde, LOW);
    digitalWrite(led2verde, LOW);
    digitalWrite(ledARMED, HIGH);
    digitalWrite(Buzzer, HIGH);
    delay(1000);
    digitalWrite(Buzzer, LOW);
    delay(500);
    digitalWrite(Buzzer, HIGH);
    delay(1000);
    digitalWrite(Buzzer, LOW);
    delay(500);
    digitalWrite(Buzzer, HIGH);
    delay(3000);
    digitalWrite(Buzzer, LOW);
    delay(500);
  }
}

void armed(){
  T1 = millis();
  if ( (T1-T0)>Tint ) {
    Tindex++;
    Serial.print(F("Index: "));
    Serial.println(Tindex);

    switch(Tindex){
    case 1:
      Tint +=5000;
      break;

    case 2:
      digitalWrite(ledDISARMED, LOW);
      digitalWrite(led1rosso, HIGH);
      digitalWrite(led2rosso, HIGH);
      digitalWrite(led1giallo, HIGH);
      digitalWrite(led2giallo, HIGH);
      digitalWrite(led1verde, HIGH);
      digitalWrite(led2verde, HIGH);
      digitalWrite(ledARMED, HIGH);
      //countdown totale minuti 30
      Tint +=300000;
      break;

    case 3:
      digitalWrite(led1verde, LOW);
      Tint +=300000;
      break;

    case 4:
      digitalWrite(led2verde, LOW);
      Tint +=300000;
      break;

    case 5:
      digitalWrite(led1giallo, LOW);
      Tint +=300000;
      break;

    case 6:
      digitalWrite(led2giallo, LOW);
      Tint +=300000;
      break;

    case 7:
      digitalWrite(led1rosso, LOW);
      Tint +=300000;
      break;

    case 8:
      digitalWrite(led2rosso, LOW);
      Tint +=250;
      break;

    case 9:
      digitalWrite(Buzzer, HIGH);
      Tint +=1000;
      break;

    case 10:
      digitalWrite(Buzzer, LOW);
      Tint +=500;
      break;

    case 11:
      digitalWrite(Buzzer, HIGH);
      Tint +=1000;
      break;

    case 12:
      digitalWrite(Buzzer, LOW);
      Tint +=500;
      break;

    case 13:
      digitalWrite(Buzzer, HIGH);
      Tint +=3000;
      break;

    case 14:
      digitalWrite(Buzzer, LOW);
      Tint +=500;
      break;

    default:
      break;
    }
  }
}

void disarmed(){
  digitalWrite(ledDISARMED, LOW);
  digitalWrite(ledARMED, LOW);
}


Ho cambiato i pin perché mi serviva liberare la seriale.
Dopo caricato lo sketch apri il monitor seriale.

I pin analogici li puoi usare come digitali, funzionano!  smiley-mr-green
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non va  smiley-red

come si accende suona diretto. non fa fare nulla  smiley-cry
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come hai collegato i pulsanti? Hai messo le pull-down?
Ho corretto il codice del countdown non la logica del programma.
Puoi spiegare qual'e la sequenza di azioni che vuoi che faccia il programma e quale deve essere la corretta sequenza dei pulsanti da premere?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dunque.

1: accensione e led DISARMED accesi. attesa input pulsante (non il terminale,quello centrale)

2: pressione pulsante centrale --> accensione 5 sec DISARMED poi si spengono, un BIP e si accende il countdown con i led ARMED.

3: durante il countdown il programma attende input che sono 2. combinazione e pulsante del terminale. se entrambe le condizioni sono HIGH si spegne tutto e si accende solo i led DISARMED.  se si preme 3 volte il pulsante del terminale ma l'input della combinazione è LOW si blocca tutto e suona come se fosse finito il countdown.

4: alla fine di tutto,sia che sia stato premuto 3 volte il pulsante sia che sia terminato il tempo si deve resettare e ricominciare aspettando ancora il via con il pulsante centrale.

Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 110
Posts: 6975
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi dopo aver acceso Arduino si deve accendere il led Disarmed e restare in attesa della pressione del pulsante centrale (che chiamerei ROSSO)
Premuto il pulsante ROSSO per armare il dispositivo si deve spegnere il led disarmed, fare bip e dopo 5 secondi iniziare tutta la sequenza del countdown.
Durante il conteggio si possono premere il pulsante VERDE (terminale) e BLU (combinazione).
Se si preme tre volte il pulsante verde il conteggio è interroto.
Se si premono contemporaneamente i pulsanti VERDE e BLU si torna alla condizione iniziale.

Dal fatto che usi stato e old_stato per ogni pulsante immagino che tu voglia che il pulsante venga registrato solo se viene premuto e rilasciato e non tenuto premuto.
Giusto?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

confermo in toto  smiley
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

nessuna news?
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

nessuna news?
Devi darcela tu  smiley-wink
Hai scritto il programma seguendo le indicazioni di Paolo?
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no non ce la posso fare. siamo già fuori portata per le mie capacità
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10448
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti sottovaluti..
Comunque se speri che qualcuno ti scriva il codice questo forumon èil luogo giusto, qui si impara aA far da se
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2]   Go Up
Jump to: