si accende il 4 led e un altro led resta acceso per 4 secondi

ciao. ho un problema che esporrò con un esempio, ho 5 led messi in riga, 4 led vanno in loop cioè si accendono tipo radar di K.I.T (supercar)e il quinto che si accende per 4 secondi quando il quarto led si accende e poi si spegne. come faccio a far ciò senza che il loop si fermi ?????

grazie

posta il codice..probabilmente hai messo qualche delay sbagliato!

essendo un esempio non centra nulla con il mio progetto hihihi sto modificando il mio vecchio emf meter e siccome non so mai spiegare le cose ho preferito l’esempio. cmq ti posto il codice lo stesso ^^

//EMF DETECTOR BY XU	

#define NUMREADINGS 15

int senseLimit = 15; //aumentare il valore per diminuire la sensibilita (massimo 1023)
int probePin = 5;
int val = 0;


int LED1 = 13;
int LED2 = 12;
int LED3 = 10;
int LED4 = 9;
int LED5 = 8;
int LED6 = 7;
int LED7 = 6;
int LED8 = 5;
int LED9 = 4;
int LED10 = 3;
int LED11 = 2;

// variabile  per snoothing

int readings [NUMREADINGS];
int index = 0;
int total = 0;
int average = 0;

void setup() {
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);

 Serial.begin(9600); 

 for (int i = 0; i < NUMREADINGS; i++)
 readings [i] = 0;

 
}

void loop() {

 digitalWrite(LED10, HIGH);


 val = analogRead(probePin);

 if(val >= 1){

 val = constrain(val, 1, senseLimit);

 val = map(val, 1, senseLimit, 1, 1023);

 total -= readings[index];
 readings[index] = val;
 total += readings[index];
 index = (index + 1);
 }
 
 if (index >= NUMREADINGS)

 index =0;

 average = total / NUMREADINGS;

if (LED1, HIGH){
  digitalWrite(LED11, HIGH);
  delay(4000);
 }

 else{
  digitalWrite(LED11, LOW);

 if (average > 50){
  digitalWrite(LED1, HIGH);


  }
 else{
  digitalWrite(LED1, LOW);
  
 }

 if (average > 150){
  digitalWrite(LED2, HIGH);
 }
 else{
  digitalWrite(LED2, LOW);
  }

 if (average > 250){
  digitalWrite(LED3, HIGH);
  
 }
 else{
  digitalWrite(LED3, LOW);
  
 }


 if (average > 350){
  digitalWrite(LED4, HIGH);
 }
 else{
 digitalWrite(LED4, LOW);
  
 }

 if (average > 450){
 digitalWrite(LED5, HIGH);
 }
 else{
  digitalWrite(LED5, LOW);
  
 }

 if (average > 550){
  digitalWrite(LED6, HIGH);
 }
 else{
  digitalWrite(LED6, LOW);
 
 }

 if (average > 650){
  digitalWrite(LED7, HIGH);
 }
 else{
 digitalWrite(LED7, LOW);
 }

 if (average > 750){
  digitalWrite(LED8 ,HIGH);
 }
 else{
  digitalWrite(LED8, LOW);
 }

 if (average > 950){
  digitalWrite(LED9, HIGH);
 }
 else{
  digitalWrite(LED9, LOW);
 }
 Serial.println(val);
 
}

da questo errore
Blink.cpp: In function ‘void loop()’:
Blink.cpp:161:1: error: expected ‘}’ at end of input

ti sei dimenticato una parentesi graffa che chiude il loop..ma x quanto riguarda il led hai risolto?

ok aggiunta… ma ora il led11 restasempre acceso… e il led1 dopo 4 secondi si accende… e resta fermo li. la storia di k.i.t era l’esempio, non esiste. se ti riferivi a quello

ps: ho collegato pure tutti gl ialtri led ma blocca tutto il code… restano accesi il primo e l’ultimo led e stop

voi come scrivereste il code?? non intendo tutto l’emf meter ma anche solo l’esempio del radar di k.i.t

pps: provato cosi if (average > 650){
digitalWrite(LED11, HIGH);
delay(2000);
digitalWrite(LED11, LOW);

}

else{
digitalWrite(LED11, LOW);
}
e appena si accende restatano tutti accesi per 4 secondi…

i delay bloccano il codice, usa millis (guarda l'esempio blink without delay)

if (LED1, HIGH){
  digitalWrite(LED11, HIGH);
  delay(4000);
 }

 else{
  digitalWrite(LED11, LOW);

cosa intendi con questo costrutto?? non puoi fare un if cosi credo...devi fare una digitalRead sec me

uno che conosco mi ha creato ciò

//EMF DETECTOR BY XU        

#define NUMREADINGS 15

int senseLimit = 15; //aumentare il valore per diminuire la sensibilita (massimo 1023)
int probePin = 5;
int val = 0;

// *** Aggiunto questo
int loop_delay = 1;
int red_led_on_time = 0;
int red_led_timer = 2000 / loop_delay;


int LED1 = 13;
int LED2 = 12;
int LED3 = 10;
int LED4 = 9;
int LED5 = 8;
int LED6 = 7;
int LED7 = 6;
int LED8 = 5;
int LED9 = 4;
int LED10 = 3;
int LED11 = 2;

// variabile  per snoothing

int readings [NUMREADINGS];
int index = 0;
int total = 0;
int average = 0;

void setup() {
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);

 Serial.begin(9600); 

 for (int i = 0; i < NUMREADINGS; i++)
 readings [i] = 0;

 
}

void loop() {

 digitalWrite(LED10, HIGH);


 val = analogRead(probePin);

 if(val >= 1){

  val = constrain(val, 1, senseLimit);

  val = map(val, 1, senseLimit, 1, 1023);

  total -= readings[index];
  readings[index] = val;
  total += readings[index];
  index = (index + 1);
 }
 
 if (index >= NUMREADINGS)

 index =0;

 average = total / NUMREADINGS;

// *** MODIFICATO QUI
 if (average > 100){
  digitalWrite(LED1, HIGH);

  // AZIONI PER LED ROSSO
  digitalWrite(LED11, HIGH);
  red_led_on_time=0;
 } else { // NESSUN SEGNALE
  
  digitalWrite(LED1, LOW);

  // SE SONO TRASCORSI 5 SECONDI...
  if (red_led_on_time>red_led_timer) {
    digitalWrite(LED11, LOW);
    red_led_on_time=0;
  } else {
    red_led_on_time++;
  }
 }
// *** FIN QUI

 if (average > 150){
  digitalWrite(LED2, HIGH);
 }
 else{
  digitalWrite(LED2, LOW);
  }

 if (average > 250){
  digitalWrite(LED3, HIGH);
  
 }
 else{
  digitalWrite(LED3, LOW);
  
 }


 if (average > 350){
  digitalWrite(LED4, HIGH);
 }
 else{
 digitalWrite(LED4, LOW);
  
 }

 if (average > 450){
 digitalWrite(LED5, HIGH);
 }
 else{
  digitalWrite(LED5, LOW);
  
 }

 if (average > 550){
  digitalWrite(LED6, HIGH);
 }
 else{
  digitalWrite(LED6, LOW);
 
 }

 if (average > 650){
  digitalWrite(LED7, HIGH);
 }
 else{
 digitalWrite(LED7, LOW);
 }

 if (average > 750){
  digitalWrite(LED8 ,HIGH);
 }
 else{
  digitalWrite(LED8, LOW);
 }

 if (average > 950){
  digitalWrite(LED9, HIGH);
 }
 else{
  digitalWrite(LED9, LOW);
 }
 Serial.println(val);
 
 // *** Aggiunto questo
 delay(loop_delay);
}

e funziona ^^

mancio quella vriabile l’avevo creata io, pensavo che fosse uan variabile giusta…

il millis sembra geniale!! grazie a tutti. ora provo di capire sto millis!!

posso dire che secondo me un codice simile mi pare una grande perdita di spazio e di funzionalita? ;)

fai 5 if che hanno la stessa funzione alla fine, quindi perchè non creare un for che incrementi il valore di 150 ogni ciclo?

intendo una roba del tipo

// da mettere fuori dalle funzioni
int l[] = {13, 12, 10, 9, 8, 7, 6, 5, 4, 3, 2}; // pin dei led, è un array che sostituisce LED1, LED2 ecc... ricorda che gli array partono da 0 e non 1
int c = 0; // index per l'array
....
// parte da mettere nel loop
for(int i=150; i=950; i+=100) {

  if (average > i){
    digitalWrite(l[c], HIGH);
  }

  else{
   digitalWrite(l[c], LOW);
  }
  
  c++; // prossimo ciclo per il prossimo led

}

c = 0; // resetto l'index per il prossimo loop

ed in 12 righe hai riscritto questo:

 if (average > 150){
  digitalWrite(LED2, HIGH);
 }
 else{
  digitalWrite(LED2, LOW);
  }

 if (average > 250){
  digitalWrite(LED3, HIGH);
  
 }
 else{
  digitalWrite(LED3, LOW);
  
 }


 if (average > 350){
  digitalWrite(LED4, HIGH);
 }
 else{
 digitalWrite(LED4, LOW);
  
 }

 if (average > 450){
 digitalWrite(LED5, HIGH);
 }
 else{
  digitalWrite(LED5, LOW);
  
 }

 if (average > 550){
  digitalWrite(LED6, HIGH);
 }
 else{
  digitalWrite(LED6, LOW);

 }

 if (average > 650){
  digitalWrite(LED7, HIGH);
 }
 else{
 digitalWrite(LED7, LOW);
 }

 if (average > 750){
  digitalWrite(LED8 ,HIGH);
 }
 else{
  digitalWrite(LED8, LOW);
 }

 if (average > 950){
  digitalWrite(LED9, HIGH);
 }
 else{
  digitalWrite(LED9, LOW);
 }

anche la parte nel setup può essere rifatta nello stesso modo:

for(int i=2; i=13; i++) pinMode(i, OUTPUT);

ed hai sostituito

 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);

ormai il codice funziona quindi vale la pena ottimizzarlo XD