C Programa Enconder con control de velocidad y el interruptor DIP

Cómo escribir un programa en C Enconder con control de velocidad y el interruptor DIP en el lenguaje de programación C ?

Solution:

  1.         PRÁCTICA "ENCODER CON VARIACION DE VELOCIDAD y DIPSWITCH
  2.  
  3. //Constantes que no cambiaran
  4. const int botonPin = 11;        // Numero del pin donde se encuentra el botón para iniciar el proceso
  5. int sensorPin = 12;             // Numero del pin donde se encuentra el sensor de barrera
  6. int motor= 13;                  // Numero del pin donde se encuentra conectado el motor
  7. int potenciometro=A0;           // Numero del pin donde se encuentra el potenciometro
  8.  
  9. //Declaracion de variables que cambiaran
  10. int botonState=LOW;            //El estado actual del botón es bajo
  11. int motorstate=LOW;            //El estado actual del motor es bajo
  12. int estadoanterior=HIGH;       //Estado anterior del sensor    
  13. int estado=HIGH;               //Estado actual del sensor
  14. int cuenta=0;                  //Cuenta el numero de veces que el sensor cambia de estado
  15. int contando=0;                //Variable contando inicia en cero
  16. int dipswitch;                 //Declaramos la variable  "dipswitch"
  17. int valor;                     //Inicializamos la variable "valor"
  18.  
  19. void setup() {
  20.  
  21.   DDRD=B11111100;               //Configuramos el puerto D para declarar las entradas y salidas en binario
  22.   pinMode(botonPin, INPUT);     //Declaramos el pin 11 como entrada
  23.   pinMode(motor, OUTPUT);       //Declaramos el pin 13 como salida
  24.   pinMode(sensorPin, INPUT);    //Declaramos el pin 12 como entrada
  25.   analogRead (potenciometro);   //Lectura de potenciómetro
  26.   digitalWrite(motor,motorstate);   //Escribimos el valor de motorstate en el pin motor
  27.   Serial.begin (9600);          /* Establecemos la velocidad de datos en bits por
  28.                                  segundo para la transmisión de datos en serie */
  29.  
  30. }
  31.  
  32. void loop() {
  33.  
  34.  
  35.  
  36.   int leer= digitalRead(botonPin);    //A la variable leer asignamos la lectura del botonPin
  37.   dipswitch= PIND & 0b11111100;       //A la variable dipswitch asignamos la lectura del puerto D y le asignamos valores binarios
  38.  
  39.   if(leer==HIGH)                      //Si leer esta en alto o 5v
  40.  
  41.   { do                                //Creamos un ciclo do while
  42.   {
  43.  
  44.  
  45.       valor=analogRead(potenciometro);    //A la variable valor le asignamos la lectura de potenciometro
  46.       valor=map(valor, 0,1023,0,255);     //A la variable valor le asignamos un pwm
  47.       analogWrite(motor, valor);          //En la variable motor escribimos el dato "valor"
  48.      
  49.      
  50.    
  51.     contando=digitalRead(sensorPin);   // A la variable contando le asignamos la lectura del pin del sensor
  52.     if (contando != estadoanterior)    //Hacemos la condicion de cuando contando sea diferente a estado anterior....
  53.     {
  54.      estado=contando;                  //A estado le asignamos el valor de estado
  55.      estadoanterior=estado;            // Al estado anterior se le asigna el valor de estado
  56.     if (contando==HIGH)                // Si el valor del pin del sensor se encuentra en un valor alto....
  57.     { Serial.print ("pot: ");          //Imprime "pot"
  58.       Serial.println (valor);          //Imprime la velocidad del motor
  59.       Serial.print ("dipswitch: ");    //Imprime "dipswitch"
  60.       Serial.println (dipswitch);      //Imprime el número que elijamos con el dipswitch
  61.       Serial.print ("Ranura: ");       //Imprime "Ranura"
  62.       Serial.println (cuenta);         //Imprime los datos de cuenta, es decir el numero de ranuras que han pasado por el sensor
  63.       cuenta=cuenta+1;}                //La cuenta irá aumentando de uno en uno
  64.     }
  65.      
  66.   } while(cuenta<dipswitch);           // El ciclo terminara hasta que cuenta sea igual al número de ranuras
  67.  
  68.   digitalWrite(motor, LOW);            // Apagamos el motor
  69.     cuenta=0;                          // El valor de cuenta regresa a cero
  70.    
  71.   }
  72.  
  73. }


Learn More :