ayuda operación con pulsadores

No termino de entender que es lo que quieres hacer. Corrígeme si me equivoco, pero creo que pretendes que:

  • Si pulsas pul1 y z es 12, pones a=39 y b=a+z=39+12=51
  • Si sueltas (no pulsas) pul1, pones z=0
  • Con pul2 haces lo mismo pero restando z (b=a-z=39-12=27)
  • Si está pulsado pul1 envías por el puerto serie "159,36,127"
  • Si no está pulsado pul1 envías por el puerto serie "143,36,0"

Si es así:

  1. En las condiciones tienes que utilizar el operador '==' y en las asignaciones '='
if ((v7 == HIGH)&&(z==12)) {  
(a = 39);
(b = a+z);
}
if (v7 == LOW){
(z=0);
}
  1. El valor z no lo modificas nunca, solo lo pones a cero cuando el pulsador está en bajo, por lo que nunca cumplirá la condición (z==12) ni entrará en el if.

  2. No filtras en ningún sitio los posibles rebotes del pulsador, por lo que te puede dar falsos positivos.

  3. Puedes utilizar la variable z como filtro de rebotes (aunque 12 ciclos de programa es, quizá, poco tiempo y tendrías que añadir un delay()). Este código solucionaría los puntos 2 y 3 (con las suposiciones que he hecho, claro), aunque deberías utilizar otra variable para el pulsador pul2:

if ((v7 == HIGH)) 
{
  z++;
  if(z==12)
  {
    a = 39;
    b = a+z;
  }
  delay(10);  // Para filtrar rebotes (pulsación > 10*12 milisegundos)
}
if (v7 == LOW)
{
  z=0;
}
  1. ¿Por qué utilizas variables y sumas, si luego las utilizas como constantes?
    Dentro del if:
if ((v7 == HIGH)&&(z=12)) {  
(a = 39);
(b = a+z);
}

puede sustituir las dos asignaciones directamente por:

b=51;

porque siempre que utilizas a (más abajo en la llamada a la función no()) le asignas el valor que quieres utilizar en ese momento y no haces operaciones con ella.

  1. Te has dejado de cerrar el paréntesis del if que comprueba si pul2 está en alto.

  2. ¿Por qué lees dos veces el valor del pulsador pul1 y primero le das valor a=39 y después a=36? Puedes hacerlo todo dentro del mismo if

  3. ¿Para qué le pasas como parámetro a la función no() el valor b si luego no lo utiliza? ¿Si utiliza a, por qué no se lo pasas (aunque no hace falta porque es pública, igual que b)? ¿Para qué utilizas la variable a en la función no() si en la función no() siempre va a valer 36?

  4. ¿Por qué pones casi todas las asignaciones de variables entre parentesis? :cold_sweat:

Si lo que quieres hacer es otra cosa, creo que tendrías que explicarlo mejor para poder analizar el código.