PWM with L298 for two DC Motors.

Dependencies:   mbed FPointer TextLCD1 keypad

Fork of L298 by Juan Carlos Suárez Barón

Committer:
juanitoinig84
Date:
Tue Jul 26 20:49:33 2016 +0000
Revision:
5:486d0a696705
Parent:
4:72727d4c1d72
Primeros pasos con el men?.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
satelite 0:f3cd2e9ab89b 1 #include "mbed.h"
juanitoinig84 5:486d0a696705 2 #include "TextLCD.h"
juanitoinig84 5:486d0a696705 3 #include "keypad.h"
juanitoinig84 5:486d0a696705 4 #include "stdlib.h"
juanitoinig84 5:486d0a696705 5
juanitoinig84 5:486d0a696705 6 /***********************Macros*****************/
juanitoinig84 4:72727d4c1d72 7 # define ON 1
juanitoinig84 4:72727d4c1d72 8 # define OFF 0
juanitoinig84 4:72727d4c1d72 9
juanitoinig84 5:486d0a696705 10 /************************Definitions and MCU's Configuration***********/
juanitoinig84 5:486d0a696705 11 ///Switches///
juanitoinig84 4:72727d4c1d72 12 DigitalIn sw3(PTA4);
juanitoinig84 4:72727d4c1d72 13
juanitoinig84 5:486d0a696705 14 ///////LEDS///////
juanitoinig84 4:72727d4c1d72 15 DigitalOut led_red(LED_RED);
juanitoinig84 4:72727d4c1d72 16 DigitalOut led_green(LED_GREEN);
juanitoinig84 4:72727d4c1d72 17 DigitalOut led_blue(LED_BLUE);
juanitoinig84 4:72727d4c1d72 18
juanitoinig84 5:486d0a696705 19 ///////////////LCD////////////////
juanitoinig84 5:486d0a696705 20 TextLCD lcd(PTC3,PTC2,PTA2,PTB23,PTA1,PTB9,TextLCD::LCD20x4); // RS, E, D4, D5, D6, D7 ////4, 6, 11, 12, 13, 14 (REV 3)
juanitoinig84 5:486d0a696705 21 //PTD1,PTD3,PTD2,PTD0,PTC4,PTA0
juanitoinig84 4:72727d4c1d72 22
juanitoinig84 5:486d0a696705 23 //TextLCD lcd(PTD1,PTD3,PTD2,PTD0,PTC4,PTE26,TextLCD::LCD20x4);
satelite 0:f3cd2e9ab89b 24
juanitoinig84 5:486d0a696705 25 /////Interrupts//////
juanitoinig84 5:486d0a696705 26 InterruptIn sw2(SW2);
juanitoinig84 2:2e93c305bb62 27
juanitoinig84 2:2e93c305bb62 28 Serial pc(USBTX,USBRX); // tx,rx
juanitoinig84 5:486d0a696705 29
juanitoinig84 5:486d0a696705 30 /////////Motor A///////////////
juanitoinig84 5:486d0a696705 31 DigitalOut in1(PTD0); //IN1 L298
juanitoinig84 5:486d0a696705 32 DigitalOut in2(PTC4); //IN2 L298
juanitoinig84 5:486d0a696705 33 PwmOut ena(PTA0); //PWM ENA
juanitoinig84 5:486d0a696705 34
juanitoinig84 5:486d0a696705 35 ///////////Motor B//////////////
juanitoinig84 5:486d0a696705 36 DigitalOut in3(PTD1); //IN3 L298
juanitoinig84 5:486d0a696705 37 DigitalOut in4(PTD3); //IN4 L298
juanitoinig84 5:486d0a696705 38 PwmOut enb(PTD2); //PWM ENB
juanitoinig84 5:486d0a696705 39
juanitoinig84 5:486d0a696705 40 ///////////Solenoids////////////
juanitoinig84 5:486d0a696705 41 DigitalOut Valve1(PTE24); //Valve 1
juanitoinig84 5:486d0a696705 42 DigitalOut Valve2(PTE25); //Valve 2
juanitoinig84 5:486d0a696705 43 DigitalOut Valve3(PTB20); //Valve 3
satelite 0:f3cd2e9ab89b 44
juanitoinig84 5:486d0a696705 45 /////////////Matrix Keypad////////////////
juanitoinig84 5:486d0a696705 46 char Keytable[] = { '1', '2', '3', 'A', // Matrix keypad return characters
juanitoinig84 5:486d0a696705 47 '4', '5', '6', 'B',
juanitoinig84 5:486d0a696705 48 '7', '8', '9', 'C',
juanitoinig84 5:486d0a696705 49 '*', '0', '#', 'D'
juanitoinig84 5:486d0a696705 50 };
juanitoinig84 4:72727d4c1d72 51
juanitoinig84 5:486d0a696705 52 int Keytablei[] = { 1, 2, 3, 10, // Matrix Keypad
juanitoinig84 5:486d0a696705 53 4, 5, 6, 11,
juanitoinig84 5:486d0a696705 54 7, 8, 9, 12,
juanitoinig84 5:486d0a696705 55 13,0,14, 15
juanitoinig84 5:486d0a696705 56 };
juanitoinig84 5:486d0a696705 57 ////////////////***************Global Variables*********************////////////////
juanitoinig84 5:486d0a696705 58 Ticker Time1;
juanitoinig84 5:486d0a696705 59 Ticker Time2;
juanitoinig84 5:486d0a696705 60 Timer debounce; // define debounce timer
juanitoinig84 5:486d0a696705 61
juanitoinig84 5:486d0a696705 62 int kp = 0, ki = 0, kd = 0, sp = 0, cont, entrada, iniciado, boton;
juanitoinig84 5:486d0a696705 63
juanitoinig84 5:486d0a696705 64 enum eEstados {
juanitoinig84 5:486d0a696705 65 Muestra,
juanitoinig84 5:486d0a696705 66 Calibracion,
juanitoinig84 5:486d0a696705 67 Lavado
juanitoinig84 5:486d0a696705 68 } estado;
juanitoinig84 1:c83539e7f8a0 69
juanitoinig84 4:72727d4c1d72 70 ///////////****Prototype Functions*******//////////
juanitoinig84 4:72727d4c1d72 71 void stop1(void);
juanitoinig84 4:72727d4c1d72 72 void turnRight1(void);
juanitoinig84 4:72727d4c1d72 73 void turnLeft1(void);
juanitoinig84 4:72727d4c1d72 74 ///////////////////////////////////////////////////
juanitoinig84 4:72727d4c1d72 75
juanitoinig84 5:486d0a696705 76
juanitoinig84 5:486d0a696705 77
juanitoinig84 5:486d0a696705 78 // Keypad Interruption Routine
juanitoinig84 5:486d0a696705 79 uint32_t cbAfterInput(uint32_t key)
juanitoinig84 5:486d0a696705 80 {
juanitoinig84 5:486d0a696705 81 if((Keytable[key]) == 'A') { // Boton Avanzar
juanitoinig84 5:486d0a696705 82 entrada = 1;
juanitoinig84 5:486d0a696705 83 cont = 0;
juanitoinig84 5:486d0a696705 84 }
juanitoinig84 5:486d0a696705 85 if((Keytable[key]) == 'B') { // Boton Volver
juanitoinig84 5:486d0a696705 86 entrada = 2;
juanitoinig84 5:486d0a696705 87 cont = 0;
juanitoinig84 5:486d0a696705 88 }
juanitoinig84 5:486d0a696705 89 if((Keytable[key]) == 'D') { // Boton Establecer
juanitoinig84 5:486d0a696705 90 entrada = 3;
juanitoinig84 5:486d0a696705 91 }
juanitoinig84 5:486d0a696705 92 boton = Keytablei[key]; // Asigna el entero correspondiente al boton presionado
juanitoinig84 5:486d0a696705 93 return 0;
juanitoinig84 5:486d0a696705 94 }
juanitoinig84 5:486d0a696705 95
juanitoinig84 5:486d0a696705 96
juanitoinig84 5:486d0a696705 97 ///Main Routne
satelite 0:f3cd2e9ab89b 98 int main()
juanitoinig84 2:2e93c305bb62 99
juanitoinig84 5:486d0a696705 100 {
juanitoinig84 5:486d0a696705 101 ena.period(1.0/10000.0);// 10Khz period, PWM freq
juanitoinig84 5:486d0a696705 102 Keypad keypad(PTC8,PTC1,PTB19,PTB18,PTC5, PTC7, PTC0,PTC9); // Configura pines para teclado
juanitoinig84 5:486d0a696705 103 keypad.CallAfterInput(&cbAfterInput); // Rutina interrupcion teclado
juanitoinig84 5:486d0a696705 104 keypad.Start(); // Inicia teclado
juanitoinig84 5:486d0a696705 105 //pc.baud(115200);
juanitoinig84 5:486d0a696705 106 lcd.writeCommand(0x0C); // Apaga cursor
juanitoinig84 5:486d0a696705 107 lcd.locate(0,0); lcd.printf("LABB");
juanitoinig84 5:486d0a696705 108 lcd.locate(0,1); lcd.printf("EASY BOD");
juanitoinig84 5:486d0a696705 109 lcd.locate(0,2); lcd.printf("Copyright,LABB.");
juanitoinig84 5:486d0a696705 110 lcd.locate(0,3); lcd.printf(".............");
juanitoinig84 5:486d0a696705 111 wait(3);
juanitoinig84 5:486d0a696705 112 lcd.cls(); //Clear Screen
juanitoinig84 5:486d0a696705 113 lcd.locate (0,0); lcd.printf("******OPCIONES******");
juanitoinig84 5:486d0a696705 114 lcd.locate (0,1); lcd.printf("1.MUESTRA");
juanitoinig84 5:486d0a696705 115 lcd.locate (0,2); lcd.printf("2.CAL 1");
juanitoinig84 5:486d0a696705 116 lcd.locate (0,3); lcd.printf("3.LAVADO");
juanitoinig84 5:486d0a696705 117 lcd.locate (11,1); lcd.printf("----->");
juanitoinig84 5:486d0a696705 118 lcd.locate (11,2); lcd.printf("----->");
juanitoinig84 5:486d0a696705 119 lcd.locate (11,3); lcd.printf("----->");
juanitoinig84 5:486d0a696705 120 entrada = 0;
juanitoinig84 5:486d0a696705 121 iniciado = 0;
juanitoinig84 5:486d0a696705 122 cont = 0;
juanitoinig84 5:486d0a696705 123 boton = 99;
juanitoinig84 5:486d0a696705 124 wait(0.5);
juanitoinig84 5:486d0a696705 125 lcd.writeCommand(0x0F);
juanitoinig84 5:486d0a696705 126 lcd.writeCommand(0x86); // Muestra cursor
juanitoinig84 4:72727d4c1d72 127
juanitoinig84 5:486d0a696705 128 while (true) {//while1
juanitoinig84 4:72727d4c1d72 129
juanitoinig84 5:486d0a696705 130 switch(estado){
juanitoinig84 5:486d0a696705 131
juanitoinig84 5:486d0a696705 132 //////**********MUESTRA******///
juanitoinig84 5:486d0a696705 133 case Muestra:
juanitoinig84 5:486d0a696705 134
juanitoinig84 5:486d0a696705 135 if(entrada == 1) {
juanitoinig84 5:486d0a696705 136 estado = Calibracion;
juanitoinig84 5:486d0a696705 137 lcd.writeCommand(0x8E);
juanitoinig84 5:486d0a696705 138 entrada = 0;
juanitoinig84 5:486d0a696705 139 cont = 0;
juanitoinig84 5:486d0a696705 140 } else if(entrada == 2) {
juanitoinig84 5:486d0a696705 141 estado = Lavado;
juanitoinig84 5:486d0a696705 142 lcd.writeCommand(0xCE);
juanitoinig84 5:486d0a696705 143 entrada = 0;
juanitoinig84 5:486d0a696705 144 }
juanitoinig84 5:486d0a696705 145 break;
juanitoinig84 5:486d0a696705 146 //////////********CALIBRACION*******//////
juanitoinig84 5:486d0a696705 147 case Calibracion:
juanitoinig84 5:486d0a696705 148
juanitoinig84 5:486d0a696705 149
juanitoinig84 5:486d0a696705 150 break;
juanitoinig84 5:486d0a696705 151 /////////*********LAVADO********/////////
juanitoinig84 5:486d0a696705 152 case Lavado:
juanitoinig84 5:486d0a696705 153 if (sw3 == ON){
juanitoinig84 4:72727d4c1d72 154 led_red = ON;
juanitoinig84 4:72727d4c1d72 155 turnRight1();
juanitoinig84 4:72727d4c1d72 156 ena.write(0.50f);
juanitoinig84 4:72727d4c1d72 157 }
juanitoinig84 4:72727d4c1d72 158 else{
juanitoinig84 4:72727d4c1d72 159 led_red = OFF;
juanitoinig84 4:72727d4c1d72 160 stop1();
juanitoinig84 4:72727d4c1d72 161 wait(0.5f);
juanitoinig84 5:486d0a696705 162 }
juanitoinig84 5:486d0a696705 163
juanitoinig84 5:486d0a696705 164 break;
juanitoinig84 5:486d0a696705 165
juanitoinig84 5:486d0a696705 166 }//Switch
juanitoinig84 4:72727d4c1d72 167
juanitoinig84 5:486d0a696705 168 }//while1
juanitoinig84 4:72727d4c1d72 169 }
juanitoinig84 4:72727d4c1d72 170
juanitoinig84 4:72727d4c1d72 171 ///////////////***********FUNCTIONS***********************//////////////
juanitoinig84 4:72727d4c1d72 172 void stop1(void) {
juanitoinig84 4:72727d4c1d72 173 //led_red = ON;
juanitoinig84 4:72727d4c1d72 174 in1 = OFF;
juanitoinig84 4:72727d4c1d72 175 in2 = OFF;
juanitoinig84 4:72727d4c1d72 176 //wait(0.5f);
juanitoinig84 4:72727d4c1d72 177 }
juanitoinig84 4:72727d4c1d72 178
juanitoinig84 4:72727d4c1d72 179 void turnRight1(void) {
juanitoinig84 4:72727d4c1d72 180 // led_red = ON;
juanitoinig84 4:72727d4c1d72 181 in1 = ON;
juanitoinig84 4:72727d4c1d72 182 in2 = OFF;
juanitoinig84 4:72727d4c1d72 183
juanitoinig84 4:72727d4c1d72 184 }
juanitoinig84 4:72727d4c1d72 185
juanitoinig84 4:72727d4c1d72 186 void turnLeft1() {
juanitoinig84 5:486d0a696705 187 //led_blue = ON;
juanitoinig84 4:72727d4c1d72 188 in1 = OFF;
juanitoinig84 4:72727d4c1d72 189 in2 = ON;
juanitoinig84 4:72727d4c1d72 190 }
juanitoinig84 4:72727d4c1d72 191