PWM with L298 for two DC Motors.
Dependencies: mbed FPointer TextLCD1 keypad
Fork of L298 by
main.cpp@5:486d0a696705, 2016-07-26 (annotated)
- 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?
User | Revision | Line number | New 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 |