sto impazzendo io?

Scusate, mi duole aprire una discussione per una roba del genere ma non riesco a capire la logica di quanto succede se metto AP a massa non dovrei aspettarmi che il led si spenga?, e perchè se invece nel codice metto HIGH tutto funziona come mi aspetto? :

bool conteggio;
bool conteggio1;
long t;
long t1;
bool _52;

void setup() {
  pinMode (2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(13,OUTPUT);
  //conteggio1=false;
  _52=false;
  

}

void loop() {
  int CH=digitalRead(2);
  int AP=digitalRead(3);
  if((CH==LOW)&&(conteggio==false)&&(_52==false)){
    conteggio=true;
    t=millis();}
    if((conteggio==true)&& ((millis()-t)>1000 )){conteggio=false;
    
    _52=true;
    }
    
 if(AP==LOW){_52=false;}

    
    
    if(_52==true){digitalWrite(13,HIGH);}
    else{13,LOW;}

  
  

}

non riesco a capire la logica

E' un codice molto corto ma nonostante questo non riesco a capire cosa vuoi fare! Prova a leggere questo. Perché non inizi a spiegarci quello che vuoi fare? Non sarebbe un lusso ne per te e neanche per noi se tu mettessi qualche commento sul codice per spiegare brevemente a cosa servono le tue variabili ( quando ho visto bool _52; mi sono venuti in mente i B-52's!! :) ) ma anche dei commenti sulle linee di codice per far capire la tua logica.

Non capisco

 conteggio=true;
    t=millis();}
    if((conteggio==true)&& ((millis()-t)>1000 )){conteggio=false;
   
    _52=true;
    }

Che senso ha questo if (conteggio == true) ? Non avevo visto in un primo momento la }. Questa è la prova che un codice "pulito", è più facile a capire!

else{13,LOW;}

??? Sicuramente è

else digitalWrite(13, LOW);

Il valore che restituisce millis() è un unsigned long. Quindi le variabili t e t1 (che non usi mai ) devono essere dichiarate allo stesso modo.

scusa, io vorrei accende il led sul pin 13 dopo ad esempio 5 sec che ho premuto ch,il led rimane acceso quindi premo ap e dopo 5 sec si spegne, al momento riesco solo nella prima parte, ma poi non riesco a spegnerlo

E AP che cos'è?

è il nome del pulsante , mi rendo conto adesso del paciugo che ho scritto, che comunque funziona nella prima parte

bool conteggio;
bool conteggio1;
long t;
long t1;
bool stato;

void setup() {
  pinMode (2,INPUT_PULLUP);
  pinMode(3,INPUT_PULLUP);
  pinMode(13,OUTPUT);
  

}

void loop() {
  int CH=digitalRead(2);// legge pulsante CH
  int AP=digitalRead(3);//legge pulsanteAP
  if((CH==LOW)&&(conteggio==false)){//premo Ch e salvo t
    conteggio=true;
    t=millis();}
    if((conteggio==true)&& ((millis()-t)>5000 )){conteggio=false;// passato il tempo accendo il led
   stato=HIGH;}
    if(stato==HIGH){digitalWrite(13,HIGH);}
    else{digitalWrite(13,LOW);}
    //if(digitalRead(3)==LOW){stato=LOW;}
  if((AP==LOW)&&(conteggio1==false)){conteggio1=true;t1=millis();}//premo Ap  e  salvo t1
  if((conteggio1==true)&& ((millis()-t1)>5000 )){conteggio1=false;//  passato il tempo spengo  il led
   stato=LOW;}
  
  

}

ora funziona forse un po contorto ma funziona

Ti do un codice che ho fatto in 10mn Non so se funzionerà, dato che non l'ho testato, pero ti può dare un esempio di come si scrive un codice, dato che secondo me è la cosa più urgente da fare. Vedrai che ti sarà facile capire la logica e quindi se non funziona potrai capire facilmente dove può essere il problema.

/*Accendere un led per massimo TEMPO_ACCENSIONE millisecondi
  con un pulsante*/

#define TEMPO_ACCENSIONE 1000
#define PIN_LED            13
#define PIN_PULSANTE        2
unsigned long t; //Memorizza il momento premuto pulsante
bool B52s = false;//Variabile di stato

void setup()
{
  pinMode(PIN_PULSANTE, INPUT_PULLUP);
  pinMode(PIN_LED, OUTPUT);
}

void loop() 
{
  byte pulsante = digitalRead(PIN_PULSANTE); //Assegna pulsante allo stato del pin 2
                                       //Quando premo il pulsante il digitalRead passa a LOW
  if( pulsante == LOW && B52s == false )   // se ho premuto pulsante e B52sé sullo stato falso
  {
    B52s = true;   // Cambio lo stato di B52s
    t = millis();     //assegno il valore di millis a t
    digitalWrite(PIN_LED, HIGH);   //Accendo il LED
    while (!digitalRead(2));   // aspetto il rilascio del pulsante
  } else if ( pulsante == LOW && B52s == true )  // se ho premuto pulsante e B52sé sullo stato vero
  {
    B52s = false; // Cambio lo stato di B52s 
    digitalWrite(PIN_LED, LOW); //Spengo il LED
    while (!digitalRead(PIN_PULSANTE));// aspetto il rilascio del pulsante
  }  

  if(millis() - TEMPOACCENSIONE > t && B52s) //dopo TEMPOACCENSIONE il led deve spegnersi
  {
    B52s = false;      // Cambio lo stato di B52s
    digitalWrite(PIN_PULSANTE, LOW);     //Spengo il LED
  }
}

potrà sembrare strano ma porto un altro elemento a mia discolpa;stavo usano un arduino fallato, lo stesso sckt caricato sul arduino nuovo va nell altro fa le bizze oltre ad aver notato che alcuno uscite rimandono sempre alte a prescindere la progrmma caricato.

scusa, io vorrei accende il led sul pin 13 dopo ad esempio 5 sec che ho premuto ch,il led rimane acceso quindi premo ap e dopo 5 sec si spegne, al momento riesco solo nella prima parte, ma poi non riesco a spegnerlo

Ok ora ho capito!! Il codice che ti ho dato non funziona in questa maniera!

Grazie per il tuo tempo, domani provo ora sono veramente esausto mi faccio na birretta e vado a letto

potrà sembrare strano ma porto un altro elemento a mia discolpa;stavo usano un arduino fallato, lo stesso sckt caricato sul arduino nuovo va nell altro fa le bizze oltre ad aver notato che alcuno uscite rimandono sempre alte a prescindere la progrmma caricato.

Se vuoi posta il tuo schema, anche su foglio scritto con una penna, perché se il tuo arduino fa bizzarrie, può essere stato danneggiato da un errato collegamento del tuo circuito.

zagnimarco1790: ora funziona forse un po contorto ma funziona

la logica è corretta, ma se premi contemporaneamente AP e CH partono entrambi i timer in contemporanea, e alla fine uno accende e l'altro spegne... o uno spegne e l'altro accende a seconda di cosa è stato premuto per primo ;)

Risolvi NON usando due diverse variabili 'conteggio' 'conteggio1' (che di fatto creano due processi indipendenti e in questo caso anche concorrenti perché agiscono sulla stessa variabile di uscita 'stato'), ma usando una sola variabile, magari chiamata 'fase', a cui fai assumere i valori 0 1 2 3 da usare al posto di 'conteggio' e 'conteggio1'.

PS: "sto impazzendo io?" è un titolo che fa capire bene l'argomento? :) :) :)

Ciao, adesso il mio primo 2009 da malfunzionamento molto piu deciso ed inequivocabile , prima con lo stesso sckt accendeva il led che poi si spegneva dopo un po mentre adesso "sfarfalla" in piu ha il pin 10 e 9 sempre alto, comunque, non essendo esperto ero partito dal presupposto di aver sbagliato, per fortuna ora va esattamente come mi attendevo, non credo di poter averlo danneggiato perche ero suna breabord e gli davo delle masse sui pin configurati in pull up