Primo progetto Arduino - "not declared in this scope error"

Salve, ho da poco acquistato il mio primo arduino :slight_smile: voglio usarlo per costruire una sottospecie di tastiera musicale (dico sottospecie perché ho pochi componenti in casa, quindi alla fine avrà 6 tasti e alcuni sistemi strani per cambiare nota/ottava).
Ecco quello che ho scritto per ora e l'errore che ricevo:

// the Exaemitter

// LOUDSPEAKERS SETTING
int LOUDSP1 = 2; int D = 18.35; int fret1; int counter1;

void setup(){

  // trying loudspeakers
  tone(LOUDSP1, D);
  delay(1000);
  noTone(LOUDSP1);
}

void loop(){
  
  // pushbutton 1
  fret1 = analogRead(0); // read the value from the sensor
  int count(fret1, counter1); // eventually increase the counter
  act(D, counter1, LOUDSP1); // make the loudspeaker properly react!
  
}


// used to play in response to many circumstances
int act(note, counter, loudspeaker){  
  if(counter == 1){
    tone(loudspeaker, note);
  }
  if(counter == 3){
    noTone(loudspeaker);
  }
}
  
// used to count
int count(fret, counter){  
  if(fret > 670){
    counter += 1;
    delay(200);
  }
  if(counter == 4){
    counter = 1;
  }
}
Exaemitter:7: error: 'note' was not declared in this scope
Exaemitter:7: error: 'counter' was not declared in this scope
Exaemitter:7: error: 'loudspeaker' was not declared in this scope
Exaemitter:7: error: initializer expression list treated as compound expression
Exaemitter:8: error: 'fret' was not declared in this scope
Exaemitter:8: error: 'counter' was not declared in this scope
Exaemitter:8: error: initializer expression list treated as compound expression
Exaemitter.ino: In function 'void loop()':
Exaemitter:18: error: initializer expression list treated as compound expression
Exaemitter:19: error: 'act' cannot be used as a function
Exaemitter.ino: At global scope:
Exaemitter:25: error: redefinition of 'int act'
Exaemitter:7: error: 'int act' previously defined here
Exaemitter:25: error: 'note' was not declared in this scope
Exaemitter:25: error: 'counter' was not declared in this scope
Exaemitter:25: error: 'loudspeaker' was not declared in this scope

Non riesco a capire per quale motivo queste variabili diano problemi. Grazie in anticipo :slight_smile:

Iniziamo da qui

int act(note, counter, loudspeaker)

Il compilatore ti sta dicendo che non hai dichiarato il tipo delle variabili note, counter e loudspeaker, sa solo che act è un int

Qui idem

int count(fret, counter)

fret e counter non sono dichiarati come tipo (int?)

Poi ci sono altri errori.

non risolve i problemi segnalati però è un errore

int LOUDSP1 = 2;int D = 18.35; int fret1; int counter1;

18.35 non è un intero, così D=18. dichiaralo float

Per il primo progetto forse ti conviene usare uno sketch preesistente come quello che trovi in esempi->10.starterkit->p.07-keyboard.
poi quando hai capito come funziona quello provi a crearne uno personale.

Messo il float, grazie per avermelo fatto notare, probabilmente sennò non l'avrei mai corretto :grin:

Ho guardato lo sketch dello Starterkit e l'ho compreso. Ho già provato anche un po' di altri sketch già pronti, difatti con primo progetto intendo il mio primo progetto personale.
Il fatto è che dev'esserci qualcosa che non mi torna riguardo il dichiarare nuove funzioni. Difatti non capisco perché nel mio sketch count funziona ma act no.

Il fatto è che dev'esserci qualcosa che non mi torna riguardo il dichiarare nuove funzioni. Difatti non capisco perché nel mio sketch count funziona ma act no.

act non funziona perchè non hai dichiarato che tipo è mentre count è dichiarato int. (act deve essere float);

// pushbutton 1
  fret1 = analogRead(0); // read the value from the sensor
  int count(fret1, counter1); // eventually increase the counter
  act(D, counter1, LOUDSP1); // make the loudspeaker properly react!

Dopo queste modifiche hai altri errori?
Se sì mostrali come hai fatto all' inizio insieme al nuovo codice.

ciao

Varamyr:
Salve, ho da poco acquistato il mio primo arduino :slight_smile:

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

quindi la funzione dovrebbe diventare così?

float act(note, counter, loudspeaker){  
  if(counter == 1){
    tone(loudspeaker, note);
  }
  if(counter == 3){
    noTone(loudspeaker);
  }
}

Anche così mi da lo stesso errore.
Ho anche provato ad aggiungere float quando chiamo act nel loop.

Vado a presentarmi e a dare un'occhiata a quei link comunque :wink:

Devi dichiarare i tipi dei parametri:
cosi no:

float act(note, counter, loudspeaker){

cosi si (ma devi sapere tu che tipo sono, io ho messo int):

float act(int note, int counter, int loudspeaker){

Poi, la dichiarazione davanti ad act() serve a dire che questa funzione deve ritornare un valore float.
Quindi nella funzione dovrebbe esserci un "return" di qualcosa che non c'e'.
Ma non è obbligatorio ritornare qualcosa.
Se usi xxx=act(a,b,c); ha senso
Se usi act(a,b,c); senza assegnazione, togli quel float iniziale e metti void (ovvero la funzione non ritorna nulla)

void act(int note, int counter, int loudspeaker){

Cerca in internet "Tiziana Marsella Programmare Arduino", troverai un bel pdf free sulla programmazione in Arduino.

Ah! Ok, ora molte cose mi sono più chiare! Grazie :wink:

Per ora non ci sono più errori!