come mantengo uno stato per un determinato tempo?

come mantengo uno stato per un determinato tempo?
esempio:

    if(fire == 1) {                     
        if(Stop_Fire == HIGH) {
               digitalWrite(7, LOW);
            }
            else{
              digitalWrite(7, HIGH);
             }
          }

vorrei che

digitalWrite(7, HIGH); e digitalWrite(7, LOW);

fosse mantenuto per un secondo

ovviamente penserete cosi lo mantiene gia ... ma c'è il programma dopo che ripete vari cicli e quindi se cambiano le condizioni mi va a settare il pin 7 in low... vorrei forzare di mantenerlo per 1 secondo a prescindere

forse ho cannato ... che basti un

delay (1000); subito sotto?

fai un filo di casini su i sue bottoni ....
fire e stop_fire sono due "in" ?
se si .. fai due cicli diversi o usa un solo bottone...
e comunque..
int Fuoco=digital.Read(fire);
if (fuoco == HIGH) {
int spara=digital.Read(7);
if (spara == HIGH) {
digitalWrite(7, LOW);
}
else{
digitalWrite(7, HIGH);
}

Ciao Schwibby
non ti sei spiegato abbastanza perché ti possa dare una risposta giusta.
Tu vuoi che il pin 7 rsti al minimo 1 secondo LOW anche se la pausa tra il rilacio del pulsante e il rischiacciare é sotto un secondo?
Ciao Uwe

ok mancano informazioni

fire è un uscita
stop_fire un ingresso

in pratica stop_fire è un pulsante generale che se non attivato non fa andare a 1 il fire

è tipo una sicura

in italiano e non arduino sarebbe :

puoi sparare solo se anche il pulsante stop_fire è attivo (se non hai tolto la sicura non sparo)

fatta questa premessa vorrei che con il delay a 1 secondo succeddesse

se la sicura è disattivata (pulsante premuto) e devo sparare quando sparo tengo premuto il grilletto per un secondo di filaù

questo mi serve perchè se nel lasso di tempo (1 secondo) che sto sparando arriva un altro imput ci sia un fuoco continuo (raffica) e non tanti spari singoli...

piu semplice ho un led .. ((con le premesse di prima ) che una volta attivato resta acceso per un secondo e non accendi/spegni subito ... nel frattempo se arriva un altro impulso (entro il secondo che lui è acceso) continui a rimanere acceso..

non so se mi sono spiegato ... per ora ho corretto cosi :

int fire = 0;                         // if 1, fire; else, don't fire
int Stop_Fire = 0;                // Variabile per Smettere di Sparare

if(fire == 1) {
if(Stop_Fire == HIGH) {
digitalWrite(7, LOW); }
else{
digitalWrite(7, HIGH);
delay(1000); }

però non ho modo di provare se funziona per un paio di gg

ripeto che comunque è solo una porzione di codice , che mi interessa modificare per far si che accada quello che ho spiegato prima

uuu.... devi usare il mills...
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1245860431

ok per il millis ma non riesco a capirne la logica ... mi dareste una mano nel mio esempio?

millis() è una funzione molto importante nell'ambiente arduino, ti evita molti grattacapi quando non puoi usare il delay come nel tuo caso. Nel link che ti inserisco c'è un ottima guida su come usare millis, è stata scritta da nathanvi ed è molto ben fatta. Spiega bene la differenza tra millis e delay, dovresti leggerla e vedrai che ti è tutto più chiaro. Non è che non voglio aiutarti passandoti lo sketch, è solo per esperienza personale ti dico che altrimenti con la pappa pronta non lo capiresti.
Prova poi se qualcosa non ti è chiaro posta il codice e lo sistemiamo, saluti.

Ops. mi sono dimenticato il link, eccolo: Vittorio Zuccalà: Multitasking Arduino: millis() -- PARTE 1

sarà l'ora o sarò io (piu probabile la seonda)

dovrei dichiarare :

unsigned long time;
void loop(){
time=millis();

if(fire == 1) {
if(Stop_Fire == HIGH) {
digitalWrite(7, LOW);
}
else{
digitalWrite(7, HIGH);
****** <- qui dovrei dichiarare il millis?

negli esempi è sempre if millis < 5 per dire se sono passati almeno 5ms ... ma io lo devo usare in un else

dato che il millis è un contatore di tempo.... come faccio a dirgli di aspettare un secondo? cioè lui conta

XD sto facendo casino

stasera rileggo tutto e riprovo a capire... perchè non capisco la logica del millis nel mio caso ... cioè lui conta da quando è acceso arduino... io devo invece usarlo per fare una pausa tipo

if(time>time+1000){

:-[

Ti ho scritto un piccolo esempio su come funziona millis(), sono due sketch che fanno la stessa cosa ossia un semplice contatore. Il primo usa il delay e il secondo millis:

// delay()

int contatore = 0;

void setup()
{
Serial.begin(9600);
}

void loop()
{
Serial.println(contatore);
contatore++;
delay(1000);
}

// millis()

int contatore = 0;
long int millisPrecedente = 0;
int tuoDelay = 1000;

void setup()
{
Serial.begin(9600);
}

void loop()
{
if(millis() - millisPrecedente > tuoDelay)
{
millisPrecedente = millis();
Serial.println(contatore);
contatore++;
}
}

ok now....

.... // continua non ho incollato
long int millisPrecedente = 0;
int tuoDelay = 1000;
.... // continua non ho incollato
void setup()
.... // continua non ho incollato
void loop()
.... // continua non ho incollato
if(fire == 1) {                    
        if(Stop_Fire == HIGH) {
              digitalWrite(7, LOW);
           }
           else{
{
  if(millis() - millisPrecedente > tuoDelay)
  {
    millisPrecedente = millis();
             digitalWrite(7, HIGH);
}

cosi però mi dice alla fine

se la differenza tra millis e millis precedente è maggiore di delay allora accendi l'uscita 7

io invece vorrei che l'uscita 7 stesse accesa per il dempo del delay

cosi potrebbe andare bene?

if(fire == 1) {
if(Stop_Fire == HIGH) {
digitalWrite(7, LOW);
}
else{
digitalWrite(7, HIGH);
}
}
else{
if (currentmillis - previousmillis > interval) {
previousmillis = currentmillis
digitalWrite(7, LOW);
}
}