Hola a todos, estoy programando un potenciómetro digital basado en un PWM de 1024 valores y un filtro rc.
Tengo 8 botones, cada uno con un Duty diferente del PWM. Lo que necesito es que siempre se asigne el valor del ultimo botón pulsado aunque sea manteniendo los anteriores pulsados, me explico:
Si pulso el botón 1, se asigna el duty de ese botón. Si mantengo pulsado el 1 y pulso el 2, el duty valido será el del botón 2, aun teniendo pulsado el 1. Al soltar el 2, volvería a mantener el valor del primer botón y así sucesivamente aun pulsando 5 botones.
He hecho algo raro con una OR, pero no se si estoy cerca de la solución, si estoy yendo por el camino equivocado, si hay alguna función para esto... o no se, estoy bastante confuso y he hecho miles de pruebas. Os agradecería si alguien puede echarme un mano.
Pongo el código por si os da una idea.
Muchas gracias de antemano!
Utilizo el compilador CCS.
Tengo 8 botones, cada uno con un Duty diferente del PWM. Lo que necesito es que siempre se asigne el valor del ultimo botón pulsado aunque sea manteniendo los anteriores pulsados, me explico:
Si pulso el botón 1, se asigna el duty de ese botón. Si mantengo pulsado el 1 y pulso el 2, el duty valido será el del botón 2, aun teniendo pulsado el 1. Al soltar el 2, volvería a mantener el valor del primer botón y así sucesivamente aun pulsando 5 botones.
He hecho algo raro con una OR, pero no se si estoy cerca de la solución, si estoy yendo por el camino equivocado, si hay alguna función para esto... o no se, estoy bastante confuso y he hecho miles de pruebas. Os agradecería si alguien puede echarme un mano.
Pongo el código por si os da una idea.
Muchas gracias de antemano!
Utilizo el compilador CCS.
Código:
if (check==1){
check=0;
portb2=portb;
portb=portb^banterior;
}
else
portb = input_b();
switch (portb) {
case 0b00000001:{
if (portb==banterior){
portb2=portb;
}
else{
set_pwm1_duty(nota3);
banterior=portb;
}
break;}
case 0b00000010:{
if (portb==banterior) {
portb2=portb;
}
else{
set_pwm1_duty(nota6);
banterior=portb;
}
break;}
case 0b00000100:{
if (portb==banterior){
portb2=portb;
}
else{
set_pwm1_duty(nota8);
banterior=portb;
}
break;}
case 0b00001000:{
if (portb==banterior){
portb2=portb;
}
else{
set_pwm1_duty(nota9);
banterior=portb;
}
break;}
case 0b00010000:{
if (portb==banterior){
portb2=portb;
}
else{
set_pwm1_duty(nota10);
banterior=portb;
}
break;}
case 0b00100000:{
if (portb==banterior) {
portb2=portb;
}
else{
set_pwm1_duty(nota13);
banterior=portb;
}
break;}
case 0b01000000:{
if (portb==banterior){
banterior=portb;
portb2=portb;
}
else{
set_pwm1_duty(nota14);
banterior=portb;
}
break;}
case 0b10000000:{
if (portb==banterior){
portb2=portb;
}
else{
set_pwm1_duty(nota8);
banterior=portb;
}
break;}
default:{
if (portb==0b00000000){
portb2=portb;
break;}
else{
if (portb==portb2){
check=0;
break;}
else{
check=1;
break;}
}
}
}
}