Acaba de crear mi cuenta, nose si si es este el apartado correcto...
Algunos concejos de programación que me puedan dar? hacer funciones es lo primero que me viene a la mente que lo podría hacer mas cómodo pero siempre se me han complicado, no me he puesto a probarlas, este es un ejercicio que hice algo rápido y no quería entretenerme mucho en algo nuevo
Son 3 botones, deben arrancar, detener y cambiar el sentido del motor con una rampa de aceleración y desaceleración de 5s, deben actuar con una sola pulsación y esperar a que termine lo anterior, si esta arrancando y se presiona el botón para detener, el motor debe llegar a la velocidad máxima en 5s y luego bajar de velocidad hasta detenerse, si se presiona el botón de cambiar de sentido antes de que termine de arrancar debe esperar a que arranque para detener el motor y luego girar en sentido contrario, al igual que si ya está en su velocidad máxima y se presiona el botón para cambiar de sentido, y el led solo debe prender de un color si gira en sentido horario, antihorario o si esta detenido
Pero tengo algunos errores que ya no pude solucionar porque los arreglaba pero movía otra cosa: el botón detener cuando el motor ya está detenido ejecuta de nuevo la condición de detener como si siguiera encendido y el botón para cambiar el sentido de giro también cuando el motor esta detenido me ejecuta el ciclo for para detener y luego para acelerar
Cree la variable inic por esos problemas, sin ella al parar comenzaba a girar de nuevo porque se cumplía la condición que puse para que inicie luego de cambiar de sentido
Muchas gracias al que pueda checar el programa, adjunto también el circuito en proteus
https://drive.google.com/file/d/134m91SNCDQRCH4UTwOY6arADcC2uHSuI/view?usp=sharing
3P3.c(2.39 kB - descargado 129 veces) #include <16f876.h>
#fuses XT, NOWDT
#use delay(clock = 4000000)
#use standard_io(B)
#use standard_io(C)
int16 i,j,k,l;
int paro=0,sentido=1,inic=4;
void main()
{
setup_timer_2(T2_DIV_BY_4,249,1);
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
set_pwm1_duty((int16)0);
set_pwm2_duty((int16)0);
output_high(pin_c3);
for(;;){
if(paro==1||(input(pin_b1)==1&&sentido==1&&inic==1)){
paro=0;
for(j=1000; j>=1; j--){
set_pwm1_duty(j);
delay_ms(5);
}
output_low(pin_c6);
output_high(pin_c5);
}
if(paro==2||(input(pin_b1)==1&&sentido==2&&inic==1)){
paro=0;
for(l=1000; l>=1; l--){
set_pwm2_duty(l);
delay_ms(5);
}
output_low(pin_c7);
output_high(pin_c5);
}
if((input(pin_b0)==1&&sentido==1)||(sentido==1&&paro==0&&inic==0)){
inic=1;
output_low(pin_c5);
output_high(pin_c6);
for(i=0; i<=999; i++){
if(input(pin_b1)==1&&paro==0){
inic=2;
paro=1;
}
if(input(pin_b2)==1&&sentido==1){
inic=0;
sentido=2;
paro=1;
}
set_pwm1_duty(i);
delay_ms(5);
}
}
if((input(pin_b0)==1&&sentido==2)||(sentido==2&&paro==0&&inic==0)){
inic=1;
output_low(pin_c5);
output_high(pin_c7);
for(k=0; k<=999; k++){
if(input(pin_b1)==1&&paro==0){
inic=2;
paro=2;
}
if(input(pin_b2)==1&&sentido==2){
inic=0;
sentido=1;
paro=2;
}
set_pwm2_duty(k);
delay_ms(5);
}
}
if(input(pin_b2)==1&&sentido==1&&inic==1){
inic=0;
sentido=2;
paro=1;
delay_ms(50);
}
if(input(pin_b2)==1&&sentido==2&&inic==1){
inic=0;
sentido=1;
paro=2;
delay_ms(50);
}
if(input(pin_b2)==1&&sentido==1&&inic==2){
paro=0;
sentido=2;
delay_ms(50);
}
if(input(pin_b2)==1&&sentido==2&&inic==2){
paro=0;
sentido=1;
delay_ms(50);
}
}
}