El problema es que solo consideras 2 estados encendido y apagado, tendrías que considerar uno o dos estados intermedios (encendiendo/apagando) en los cuales ejecutarias los tonos. Para ello, yo modificaría tu código y utilizaría una máquina de estados:
byte estado = 0;
void loop()
{
long total1;
switch(estado)
{
case 0: // Apagado
total1 = cs_4_2.capSense(100);
if(total1 > umbral)
estado++; // Pasamos a encendiendo
break;
case 1: // Encendiendo
total1 = cs_4_2.capSense(100);
if(total1 < umbral) // Esperamos a que se "suelte el interruptor"
{
EjecutaTono(); // Función en la que se ejecutaría el tono de encendido
digitalWrite(13, HIGH);
estado++;
}
break;
case 2: // Encendido
total1 = cs_4_2.capSense(100);
if(total1 > umbral)
estado++; // Pasamos a apagando
break;
case 1: // Apagando
total1 = cs_4_2.capSense(100);
if(total1 < umbral) // Esperamos a que se "suelte el interruptor"
{
EjecutaTono(); // Función en la que se ejecutaría el tono de apagado
digitalWrite(13, LOW);
estado=0;
}
break;
default: // Caso por defecto
estado=0;
}
}
(Cógelo como idea, está sin probar ;))