u

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TextLCD.h"
00003  TextLCD lcd(PTC16, PTC17, PTA16, PTA17, PTE31, PTD6); // rs, e, d4-d7
00004 
00005 DigitalIn sensor(PTE20);
00006 
00007 Ticker visualiza;
00008 Ticker cuenta;
00009 Ticker x;
00010 int vueltas, rpm;
00011 BusOut sentido_giro(D12, D13);
00012 DigitalIn bajar(D15);
00013 DigitalIn subir(D14);
00014 DigitalIn derecha(PTC12);
00015 DigitalIn izquierda(PTC13);
00016 PwmOut velocidad(D11);
00017 
00018 BusOut transistores(D0,D1);
00019 BusOut segmentos (A0,A1,A2,A3,A4,A5,PTE30);
00020 
00021 BusOut transistores2(D2, D3);
00022 BusOut segmentos2 (D4,D5,D6,D7, D8,D9, D10);  
00023 // tabla de segmentos
00024 const char seg[10] = {0x3f, 0x06,0x5b,0x57,0x66,0x75,0x7d,0x07,0x7f,0x77}; 
00025 char unidades,decenas, miliunidades, milidecenas;
00026 void segundo(){
00027 
00028   vueltas = 0;
00029   
00030          miliunidades = rpm%10;
00031         milidecenas = (rpm%100)/10;
00032         unidades = (rpm/100)%10;
00033         decenas = rpm/1000;  
00034     }
00035 void cambio(){
00036      static bool bandera;
00037    bandera = !bandera;
00038    switch (bandera){
00039         case 0:
00040         transistores = 0x0;
00041               segmentos = seg[unidades];
00042               transistores = 0x2;
00043                             
00044  transistores2 = 0x0;
00045               segmentos2 = seg[miliunidades];
00046               transistores2 = 0x2;
00047               
00048         break;
00049         case 1: 
00050          transistores = 0x0;
00051               segmentos = seg[decenas];
00052               transistores = 0x1;
00053               
00054               transistores2 = 0x0; 
00055               segmentos2 = seg[milidecenas];
00056               transistores2 = 0x1; 
00057               
00058               break;
00059               }} 
00060               unsigned int revol;
00061              
00062  int main() {
00063      lcd.cls();
00064      lcd.printf("  REVOLUCIONES ");
00065     lcd.locate(1, 5);
00066     lcd.printf("POR  MINUTO :)");
00067  sentido_giro = 0x0;
00068  velocidad = 0.15;
00069  rpm = 0;  vueltas = 0;
00070 
00071 transistores = 0x0;
00072 transistores2 = 0x0;
00073 visualiza.attach(&cambio,0.008333); // tiempo de visualizacion
00074 
00075     while(1) {
00076      rpm = vueltas * 60;
00077      
00078      if (!derecha && izquierda){
00079          wait (0.1);
00080               if (derecha==0){
00081                   lcd.cls();
00082           lcd.printf("    izquierda   ");
00083             lcd.locate(1, 5);
00084     lcd.printf("               ");
00085            sentido_giro = 0x1;
00086                     }
00087       } 
00088       else if (derecha && !izquierda){
00089            wait (0.1);
00090            if (izquierda==0){
00091            sentido_giro = 0x2;
00092            lcd.cls();
00093             lcd.printf("    Derecha    ");
00094             lcd.locate(1, 5);
00095             lcd.printf("               ");
00096              }           
00097              }
00098             if (subir ==0 ){
00099               wait (0.5);
00100           velocidad = velocidad + 0.03;
00101           lcd.cls();
00102                lcd.printf(" Subiendo PWM ");
00103             lcd.locate(1, 5);
00104             lcd.printf   ("               ");
00105             
00106             unidades = 0;decenas = 0; miliunidades = 0; milidecenas  = 0;
00107           if (velocidad >= 0.3) { 
00108           velocidad = 0.3;
00109                 lcd.cls();
00110                 lcd.printf(" RPM maximo ");
00111                  lcd.locate(1, 5);
00112                     lcd.printf   ("               ");
00113           } }
00114           if (bajar ==0 ) {
00115               wait(0.5); 
00116           velocidad = velocidad - 0.03;
00117           lcd.cls();
00118            lcd.printf ("  Bajando PWM  ");
00119             lcd.locate(1, 5);
00120             lcd.printf("               ");
00121             unidades = 0;decenas = 0; miliunidades = 0; milidecenas  = 0;
00122            if (velocidad <= 0.0){
00123              velocidad = 0.0; 
00124             lcd.cls();
00125                 lcd.printf("  0 RPM  ");
00126                  lcd.locate(1, 5);
00127                     lcd.printf   ("               "); 
00128            }}
00129             
00130            
00131               if (!sensor){
00132            wait (0.01);
00133               if (sensor==1){
00134                     vueltas = vueltas + 1;
00135                    if (vueltas == 1)
00136                    {
00137                        x.attach(&segundo,1);
00138           
00139            
00140                     }
00141       } 
00142             
00143     
00144       
00145 }  }}