lo de la pausa podés hacerlo con Sleep obviamente o con un contador también.
lo de los valores no lo miré realmente
una idea que hice recién sobre el contador puede ser así:
				
			lo de los valores no lo miré realmente
una idea que hice recién sobre el contador puede ser así:
Código [Seleccionar] 
#include <windows.h>
#include <stdio.h>
#pragma comment (lib, "winmm.lib")
int rampa(int canal, int valor_a, int valor_b, float duracion){
	double b_time = timeGetTime();
	double n_time = 0;
	if ((canal<1) || (canal>512) || (valor_a<0) || (valor_b>255) || 
		(valor_b<valor_a) || (valor_b>255) || (duracion<1.0))
    {
		return -1;
    }
	else
	{
		//n_time = timeGetTime();
		
		unsigned int ciclos=0;
		while( ((n_time-b_time)) <= 40){
			ciclos++;
			printf("diff: %f\n",((n_time-b_time)));
			printf("b_time: %f\n",b_time);
			printf("n_time: %f\n",n_time);
			printf("ciclos: %d\n",ciclos);
			printf("======================\n");
			for(unsigned int i=0; i<25; i++){
				n_time = timeGetTime();
			}
			n_time = timeGetTime();
		}
	}
	return 0;
}
int main(){
	if(!rampa(2,2,2,2)) {
		printf("Salida..\n");
		return 0;
	}
	printf("...............\n");
	while(getchar()!='\n');
	return 0;
}