Cómo escribir un programa en C Enconder con control de velocidad y el interruptor DIP en el lenguaje de programación C ?
Solution:
- PRÁCTICA "ENCODER CON VARIACION DE VELOCIDAD y DIPSWITCH ”
- //Constantes que no cambiaran
- const int botonPin = 11; // Numero del pin donde se encuentra el botón para iniciar el proceso
- int sensorPin = 12; // Numero del pin donde se encuentra el sensor de barrera
- int motor= 13; // Numero del pin donde se encuentra conectado el motor
- int potenciometro=A0; // Numero del pin donde se encuentra el potenciometro
- //Declaracion de variables que cambiaran
- int botonState=LOW; //El estado actual del botón es bajo
- int motorstate=LOW; //El estado actual del motor es bajo
- int estadoanterior=HIGH; //Estado anterior del sensor
- int estado=HIGH; //Estado actual del sensor
- int cuenta=0; //Cuenta el numero de veces que el sensor cambia de estado
- int contando=0; //Variable contando inicia en cero
- int dipswitch; //Declaramos la variable "dipswitch"
- int valor; //Inicializamos la variable "valor"
- void setup() {
- DDRD=B11111100; //Configuramos el puerto D para declarar las entradas y salidas en binario
- pinMode(botonPin, INPUT); //Declaramos el pin 11 como entrada
- pinMode(motor, OUTPUT); //Declaramos el pin 13 como salida
- pinMode(sensorPin, INPUT); //Declaramos el pin 12 como entrada
- analogRead (potenciometro); //Lectura de potenciómetro
- digitalWrite(motor,motorstate); //Escribimos el valor de motorstate en el pin motor
- Serial.begin (9600); /* Establecemos la velocidad de datos en bits por
- segundo para la transmisión de datos en serie */
- }
- void loop() {
- int leer= digitalRead(botonPin); //A la variable leer asignamos la lectura del botonPin
- dipswitch= PIND & 0b11111100; //A la variable dipswitch asignamos la lectura del puerto D y le asignamos valores binarios
- if(leer==HIGH) //Si leer esta en alto o 5v
- { do //Creamos un ciclo do while
- {
- valor=analogRead(potenciometro); //A la variable valor le asignamos la lectura de potenciometro
- valor=map(valor, 0,1023,0,255); //A la variable valor le asignamos un pwm
- analogWrite(motor, valor); //En la variable motor escribimos el dato "valor"
- contando=digitalRead(sensorPin); // A la variable contando le asignamos la lectura del pin del sensor
- if (contando != estadoanterior) //Hacemos la condicion de cuando contando sea diferente a estado anterior....
- {
- estado=contando; //A estado le asignamos el valor de estado
- estadoanterior=estado; // Al estado anterior se le asigna el valor de estado
- if (contando==HIGH) // Si el valor del pin del sensor se encuentra en un valor alto....
- { Serial.print ("pot: "); //Imprime "pot"
- Serial.println (valor); //Imprime la velocidad del motor
- Serial.print ("dipswitch: "); //Imprime "dipswitch"
- Serial.println (dipswitch); //Imprime el número que elijamos con el dipswitch
- Serial.print ("Ranura: "); //Imprime "Ranura"
- Serial.println (cuenta); //Imprime los datos de cuenta, es decir el numero de ranuras que han pasado por el sensor
- cuenta=cuenta+1;} //La cuenta irá aumentando de uno en uno
- }
- } while(cuenta<dipswitch); // El ciclo terminara hasta que cuenta sea igual al número de ranuras
- digitalWrite(motor, LOW); // Apagamos el motor
- cuenta=0; // El valor de cuenta regresa a cero
- }
- }