Variable con valor descendente en funcion del tiempo

Saludos . .

Bueno como comento en el titulo estoy tratando de hacer que el valor de una variable descienda en función de tiempo, digamos por cada decima tarde un segundo, le explico un poco el código y el circuito que pretendo.

Usando un arduino UNO le conecto dos botones en los pines 2 (interruptor 0) como entrada para un contador y al pin 3 (interruptor 1) como disparador de inicio del descenso.

const int coinInt = 0;
const int button = 1;

//Se crea la variable coinsValue que contendrá el valor sobre el que se quiere trabajar

volatile float coinsValue = 0.00;
int coinsChange = 0;

void setup()
{
Serial.begin(9600);
attachInterrupt(coinInt, coinInserted, RISING);
attachInterrupt(button, valueDown, RISING);
}

void coinInserted() //Esta función es llamada cada vez que se detecta un pulso en el pin 2

{
coinsValue = coinsValue + 0.5;
coinsChange = 1;

}

void valueDown() // En esta otra función he intentado hacer lo del descenso, pero solo en manual me ha funcionado no encuentro la forma de hacerlo en base a tiempo.
{
coinsValue = coinsValue - 0.01;
coinsChange = 1;
}

void loop() {

if(coinsChange == 1)

{
coinsChange = 0;

Serial.print("Credito: $");
Serial.println(coinsValue);

}
}

Ojala alguien pueda ayudarme,

Gracias de antemano

miguel0981:
Saludos . .

Bueno como comento en el titulo estoy tratando de hacer que el valor de una variable descienda en función de tiempo, digamos por cada decima tarde un segundo, le explico un poco el código y el circuito que pretendo.

Usando un arduino UNO le conecto dos botones en los pines 2 (interruptor 0) como entrada para un contador y al pin 3 (interruptor 1) como disparador de inicio del descenso.

const int coinInt = 0;
const int button = 1;

//Se crea la variable coinsValue que contendrá el valor sobre el que se quiere trabajar

volatile float coinsValue = 0.00;
int coinsChange = 0;

void setup()
{
Serial.begin(9600);
attachInterrupt(coinInt, coinInserted, RISING);
attachInterrupt(button, valueDown, RISING);
}

void coinInserted() //Esta función es llamada cada vez que se detecta un pulso en el pin 2

{
coinsValue = coinsValue + 0.5;
coinsChange = 1;

}

void valueDown() // En esta otra función he intentado hacer lo del descenso, pero solo en manual me ha funcionado no encuentro la forma de hacerlo en base a tiempo.
{
coinsValue = coinsValue - 0.01;
coinsChange = 1;
}

void loop() {

if(coinsChange == 1)

{
coinsChange = 0;

Serial.print("Credito: $");
Serial.println(coinsValue);

}
}

Ojala alguien pueda ayudarme,

Gracias de antemano

No se los demas compañeros del foro ,pero yo no acabo de entender que quieres hacer....

Hola.
La interrupción del segundo botón (el de decremento) no te va a servir de mucho, pues sólo debería disparar el inicio del proceso de descuento. El proceso de descuento temporizado en sí lo puedes hacer con millis() o configurando una interrupción de timer.
Con millis, en pseudocódigo sería algo así:

setup {....} //establecemos la interrupción para el sumador de monedas

loop{
while (!digitalRead(pulsadorInicio)){}; //no hacemos nada hasta que no se pulse el inicio de descuento.
unsigned long millisStart=millis();
while (monedas > 0.0) {
if (millis()-millisStart>=1000){
monedas -= 0.01;
millisStart += 1000;
Serial.print(monedas);
}
}
Serial.print("Se acabó la partida");
}