Problema con tastiera capacitiva

Ciao a tutti.

Windows 10, Arduino UNO, IDE 1.8.6.0 Windows Store

Vi spiego il problema: vorrei programmare arduino perchè toccando 8 terminali programmati per il touch capacitivo riesca a suonare come una tastiera. L’hardware è collegato bene ma se provo a caricare lo sketch non funziona nulla e se provo a stampare sul monitor seriale le variabili dei vari segnali mi dice variabile non riconosciuta.
Consigli?

Premetto di non essere molto ferrato nel mondo della programmazione

#include <CapacitiveSensor.h>

int note[] = {262, 294, 330, 349, 392, 440, 494, 500};

CapacitiveSensor d = CapacitiveSensor(17, 16);
CapacitiveSensor re = CapacitiveSensor(15, 14);
CapacitiveSensor mi = CapacitiveSensor(3, 4);
CapacitiveSensor fa = CapacitiveSensor(5, 6);
CapacitiveSensor sol = CapacitiveSensor(7, 8);
CapacitiveSensor la = CapacitiveSensor(9, 10);
CapacitiveSensor si = CapacitiveSensor(11, 12);
CapacitiveSensor doa = CapacitiveSensor(19, 18);

int d2 = 10;
int re2 = 10;
int mi2 = 10;
int fa2 = 10;
int sol2 = 10;
int la2 = 10;
int si2 = 10;
int doa2 = 10;

int cassa = 13;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(cassa, OUTPUT);
}

void loop() {
  
  // put your main code here, to run repeatedly:
 long val1 = d.capacitiveSensor(30);
 long val2 = re.capacitiveSensor(30);
 long val3 = mi.capacitiveSensor(30);
 long val4 = fa.capacitiveSensor(30);
 long val5 = sol.capacitiveSensor(30);
 long val6 = la.capacitiveSensor(30);
 long val7 = si.capacitiveSensor(30);
 long val8 = doa.capacitiveSensor(30);

Serial.println(d2);

 if (val1 > d2) {
  tone(cassa, note[1], 100);
 }

 if (val2 > re2) {
  tone(cassa, note[2], 100);
 }

  if (val3 > mi2) {
  tone(cassa, note[3], 100);
 }

  if (val4 > fa2) {
  tone(cassa, note[4], 100);
 }

  if (val5 > sol2) {
  tone(cassa, note[5], 100);
 }

  if (val6 > la2) {
  tone(cassa, note[6], 100);
 }

  if (val7 > si2) {
  tone(cassa, note[7], 100);
 }

  if (val8 > doa2) {
  tone(cassa, note[8], 100);
 }

 else{
  noTone(cassa);
 }

 delay(10);
}

Lory:
non funziona nulla e se provo a stampare sul monitor seriale le variabili dei vari segnali mi dice variabile non riconosciuta.

Non è possibile, prova a modificare il loop() così:

  ...
 long val7 = si.capacitiveSensor(30);
 long val8 = doa.capacitiveSensor(30);
 // AGGIUNGI:
 Serial.print(val1); Serial.print(" ");
 Serial.print(val2); Serial.print(" ");
 Serial.print(val3); Serial.print(" ");
 Serial.print(val4); Serial.print(" ");
 Serial.print(val5); Serial.print(" ");
 Serial.print(val6); Serial.print(" ");
 Serial.print(val7); Serial.print(" ");
 Serial.println(val8);
 // FINE
 ...

e per test aumenta il "delay(10);" portandolo a "delay(500);" e vedi cosa scrive sulla seriale quando non premi nulla e quando premi qualcosa (tieni premuto per almeno mezzo secondo).

Ok adesso leggo i valori e funziona tutto perfettamente con il monitor ma...il buzzer non buzza. Entra in un loop in cui ogni volta che lo sketch ricomincia emette un "ti" sordo e così all'infinito anche se guardando il monitor i valori vengono letti bene

Beh questo è il consueto debug via Serial, quindi cerca di usarlo sempre quando ci sono cose da controllare.

Voglio darti uno spunto per aiutarti a fare debug: se i valori che leggi ti sembrano corretti, verifica però cosa succede se premi e tieni premuto un tasto ossia se gli 8 valori cambiano, e come (teoricamente solo uno dovrebbe cambiare). In particolare, occhio all'"else" finale che è relativo solamente all'ULTIMO if(), secondo te è giusto?... :wink:

Poi dopo questa verifica togli i Serial.print() che ti ho fatto mettere, che non servono più, e magari metti mettere una Serial.print() ad ogni "tone(cassa, ..." per avere su seriale la lista dei tasti premuti, e aumenta in poco il tempo della nota a 200 (significa che ogni nota la suoni per 200ms) e togli il delay finale. Esempio:

 if (val1 > d2) {
  Serial.println("tasto 1"); // per val2 sarà "tasto 2" ecc.
  tone(cassa, note[1], 200);
 }

Niente ho applicato le correzioni anche se ho lasciato il debug e:. nessun suono sempre quel suono ogni volta che il loop ricomincia e il primo tasto(val1) mi da valore casuale-0-valore casuale-0 e così via quando non lo premo.

Aggiornamento: la resistenza era rotta. Unico problema: non suona

Ok allora: ho risolto…c’era un problema hardware, una specie di corto circuito però adesso chiedo: come mai il buzzernon fa le note ma emette un rumore sordo come quando non ha un input ma solo corrente?(questo però se premo i tasti)