potete controllare se ho fatto una cavolata? primo progetto modificato da me

ho provato a aggiungere un piezo al emf meter che avevo trovato mesi fa^^ sono andato piu ad intuito che altro...
comunque ho agiunto solo il piezo di mano mia il resto e una copia per capire come funziona la programmazione.

eccolo qua

//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 = 11;
int LED2 = 10;
int LED3 = 9;
int LED4 = 8;
int LED5 = 7;
int LED6 = 6;
int LED7 = 5;
int LED8 = 4;
int LED9 = 3;
int LED10 = 2;
int speakerPin = 1;

// variabile  per snoothing

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

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

 Serial.begin(9600); 

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

 sound();
}

void loop() {



 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 (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);
 }

 if (average > 1023){
  digitalWrite(LED10, HIGH);
 }
 else{
  digitalWrite(LED10, LOW);
 }
}
void sound() {
 
 if (avrage < 50){
 speakerPin(2093,500);
 delay(1000);
 }
 if (avrage > 50){
 speakerPin(2093,500);
 delay(950);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 150){
 speakerPin(2093,500);
 delay(900);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 250){
 speakerPin(2093,500);
 delay(850);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 350){
 speakerPin(2093,500);
 delay(800);
 }
 else{
 (speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 450){
 speakerPin(2093,500);
 delay(750);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 550){
 speakerPin(2093,500);
 delay(700);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 650){
 speakerPin(2093,500);
 delay(650);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 750){
 speakerPin(2093,500);
 delay(600);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 850){
 speakerPin(2093,500);
 delay(550);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }
 if (avrage > 950){
 speakerPin(2093,500);
 delay(500);
 }
 else{
 speakerPin(2093,500) 
 delay(1000);
 }

 Serial.println(val);
 }
}

corretto ma non del tutto

ma ti da qualche problema o è una domanda preventiva?
quando metti il codice usa il tag apposito, c'è un tasto con l'icona del cancelletto. se metti codice identato è più leggibile!

prima l'ho postato per sapere se la prgorammazione del piezo poteva andare bene poi ho provato come consigli pure tu e mi sono demoralizzato ^^

il programma dell'arduino schiacciano il pulsante play dice cosi

io mi aspettavo di trovar errori sulla cosa che avevo aggiunto io e basta.. non capico perche a me da gli errori sul progetto copiato e se inserisco sul programma quello originale non gli da nessun errore uff

sketch_jul31a.cpp:61:34: error: macro "constrain" requires 3 arguments, but only 2 given
sketch_jul31a:9: error: expected ‘,’ or ‘;’ before ‘int’
sketch_jul31a.cpp: In function ‘void setup()’:
sketch_jul31a:29: error: ‘speakerPin’ cannot be used as a function
sketch_jul31a:43: error: ‘i’ was not declared in this scope
sketch_jul31a.cpp: In function ‘void loop()’:
sketch_jul31a:51: error: ‘probepin’ was not declared in this scope
sketch_jul31a:55: error: ‘constrain’ was not declared in this scope
sketch_jul31a:57: error: ‘seneLimit’ was not declared in this scope
sketch_jul31a:59: error: ‘readins’ was not declared in this scope
sketch_jul31a:71: error: ‘LED1’ was not declared in this scope
sketch_jul31a:75: error: ‘LED1’ was not declared in this scope
sketch_jul31a:144: error: a function-definition is not allowed here before ‘{’ token
sketch_jul31a:220: error: expected `}' at end of input

azz

dimenticavo di dirvi che il piezo deve far un beep ogni secondo se tutti i led sono spenti e man mano che si illuminano va piu veloce

sketch_jul31a.cpp:61:34: error: macro "constrain" requires 3 arguments, but only 2 given --> constrain(val,1 senseLimit); manca una virgola!
sketch_jul31a:9: error: expected ‘,’ or ‘;’ before ‘int’ --> ossreva la riga precedente, ovvero int val = 0 ... manca qualcosa?
sketch_jul31a.cpp: In function ‘void setup()’: --> ci sono problemi anche nel setup, vediamo quali
sketch_jul31a:29: error: ‘speakerPin’ cannot be used as a function -> speakerPin è dichiarata come variabile, ma usata come funzione
sketch_jul31a:43: error: ‘i’ was not declared in this scope --> non hai dichiarato i
sketch_jul31a.cpp: In function ‘void loop()’:
sketch_jul31a:51: error: ‘probepin’ was not declared in this scope --> il C è case sensitive, ovvero c'è differenza tra maiuscole e minuscole. tu hai dichiarato probePin NON probepin
sketch_jul31a:55: error: ‘constrain’ was not declared in this scope --> forse deriva dal primo errore
sketch_jul31a:57: error: ‘seneLimit’ was not declared in this scope --> seneLimit?? ovvero? forse senseLimit

il resto fatteli da solo, ormai dovresti averci fatto la mano
sketch_jul31a:59: error: ‘readins’ was not declared in this scope
sketch_jul31a:71: error: ‘LED1’ was not declared in this scope
sketch_jul31a:75: error: ‘LED1’ was not declared in this scope

ah:
sketch_jul31a:144: error: a function-definition is not allowed here before ‘{’ token
sketch_jul31a:220: error: expected `}' at end of input

probabilmente c'è una { o una } di troppo o troppo poco. identa il codice (tool->autoformat) e vedrai che è molto più facile capire dive iniziano e finiscono i cilci/funzioni/if etc..
e un'ultima cosa, il codice lo devi mettere tra i TAG [ code] e [/ code] (senza spazi, io li ho messi se no non vedi i tag, è molto più comodo, se no poi ti ritrovi smile o post lunghi 100 metri, che incasinano solo la discussione.

no la mano non me la sono ancora fatta... :confused: ma in queste ore ho trovato quasi tutti gli errori tranne la virgola.. che no riuscivo mica a vedere.

ma questi restano

sketch_jul31a.cpp: In function ‘void loop()’:
sketch_jul31a:49: error: ‘sound’ was not declared in this scope
sketch_jul31a:142: error: a function-definition is not allowed here before ‘{’ token
sketch_jul31a:229: error: expected `}' at end of input

per il tool ho fatto come dicevi ma non ho visto differenze.

alla prima riga di loop() chiama la funzione sound();, che non esiste.
mi sa che c'è una } finale in più, con l'autoformat te ne accorgi subito..

magari dau un'occhiata quì: Arduino Playground - Newbie

l'auto format mi si cancella. dice cosi

auto format canceled too many left parentheses

per forza:
in quasi tutti gli if hai aperto la parentesi, ma poi non l'hai chiusa.

per esempio:

if (avrage > 750){
 (speakerPin, 2093,500);
 delay(600);
 else{
 (speakerpin, 2093,500)
 delay(1000);
 }

prima dell'else manca la parentesi graffa di chiusura dell'if... in tutta la funzione sound mancano.

Poi manca anche al primo if del loop.

per il resto dovrebbe essere ok. Un consiglio: anzichè usare mille if, se il valore da confrontare è solo uno, usa uno switch.

ho aggiornato il primo post. avevo gia aggiunto ieri le graffe e altre cosette e in questa situazione dava l'errore dell'autoformat e da ancora sti errori

sketch_aug01a.cpp: In function ‘void setup()’:
sketch_aug01a:46: error: ‘sound’ was not declared in this scope
sketch_aug01a.cpp: In function ‘void loop()’:
sketch_aug01a:143: error: a function-definition is not allowed here before ‘{’ token
sketch_aug01a:232: error: expected `}' at end of input

le graffe non sono ancora a posto... mostra il codice fino ad ora

l'o messo al primo topic pr risparmiare spazio siccome è luungo

usa il tag code (il pulsantino #), è fatto apposta!

allora nel loop

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);

questo if è aperti con { ma non è mai chiuso. e poi c'è una } alla fine di tutto il codice di troppo.

poi gli errori si riducono alla funzione sound. a parte l'errore di scrittura di averange, che è stato dichiarato average e in sound addirittura diviene avrage, usi una funzione speakerPin che non esiste, e hai dimenticato qualche parentesi tonda e punto e virgola in giro per il codice.

ora mi ricordo perche ho sempre odiato programmare XD

speakerPin l'ho trovato in un tutorial per fare una scala con un piezo

xufu:
ora mi ricordo perche ho sempre odiato programmare XD

:sweat_smile:

yeee c'è l'ho fatta!!! facendo cosi

//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 = 11;
int LED2 = 10;
int LED3 = 9;
int LED4 = 8;
int LED5 = 7;
int LED6 = 6;
int LED7 = 5;
int LED8 = 4;
int LED9 = 3;
int LED10 = 2;
int speakerPin = 1;

// variabile  per snoothing

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

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

 Serial.begin(9600); 

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

 
}

void loop() {



 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 (average > 50){
  digitalWrite(LED1, HIGH);
  tone(speakerPin, 2093,500);
  delay(950);
 }
 else{
  digitalWrite(LED1, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 150){
  digitalWrite(LED2, HIGH);
  tone(speakerPin,2093,500);
  delay(900);

 }
 else{
  digitalWrite(LED2, LOW);
  tone(speakerPin,2093,500); 
  delay(1000);
 }

 if (average > 250){
  digitalWrite(LED3, HIGH);
  tone(speakerPin, 2093,500);
  delay(850);

 }
 else{
  digitalWrite(LED3, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }


 if (average > 350){
  digitalWrite(LED4, HIGH);
  tone(speakerPin, 2093,500);
  delay(800);

 }
 else{
 digitalWrite(LED4, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 450){
 digitalWrite(LED5, HIGH);
  tone(speakerPin, 2093,500);
  delay(750);

 }
 else{
  digitalWrite(LED5, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 550){
  digitalWrite(LED6, HIGH);
  tone(speakerPin, 2093,500);
  delay(700);

 }
 else{
  digitalWrite(LED6, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 650){
  digitalWrite(LED7, HIGH);
  tone(speakerPin, 2093,500);
  delay(650);

 }
 else{
 digitalWrite(LED7, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 750){
  digitalWrite(LED8 ,HIGH);
  tone(speakerPin, 2093,500);
  delay(550);
 }
 else{
  digitalWrite(LED8, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 950){
  digitalWrite(LED9, HIGH);
  tone(speakerPin, 2093,500);
  delay(500);
 }
 else{
  digitalWrite(LED9, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }

 if (average > 1023){
  digitalWrite(LED10, HIGH);
  tone(speakerPin, 2093,500);
  delay(450);

 }
 else{
  digitalWrite(LED10, LOW);
  tone(speakerPin, 2093,500); 
  delay(1000);
 }
 Serial.println(val);
 
}

grazie lesto!! per la pazienza ecc! ora manca solo implementare 2 pulsanti uno per togliere il suono e l'altro per accendere e spegnere l'arduino.. chissa come si puo fare però ^^

che tristezza... non suona il piezo.. e con quel codice non fa quello ceh dovrebbe fare..

voi come lo fareste?? che ad ogni led amuental a velocita de l beep singolo?

prima di tutto per interrompere il suono c'è la funziona noTone(), se non erro, poi gli if come li hai fatti sono errati, se li fa tutti se averange > 1023 (cosa impossibile, tra l'altro)

si ho constatato che l'iltimo if era errato e pure i delay mandano in confusioe i led. ma il suono non c'è lo stesso. e poi se tolgo il delay finale mi cade l'illusione che faccia bep bep bep come si scrive in maniera giusta che il suono dura 1 secondo e poi si ripete e a ogni led acceso va piu veloce? prima avevo mezza idea ma siccome è errata sono perso...