![](/media/cache/profiles/70c767c26cb3143bad5e660504fd6a76.50x50_q85.jpg)
Sistema de telemetria Electraton 2011
main.cpp@0:8e1427586aba, 2011-12-13 (annotated)
- Committer:
- adrianmb
- Date:
- Tue Dec 13 02:35:58 2011 +0000
- Revision:
- 0:8e1427586aba
Sistema de telemetria Electraton 2011
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adrianmb | 0:8e1427586aba | 1 | #include "mbed.h" |
adrianmb | 0:8e1427586aba | 2 | #include "math.h" |
adrianmb | 0:8e1427586aba | 3 | float batt=0; |
adrianmb | 0:8e1427586aba | 4 | float curr=0; |
adrianmb | 0:8e1427586aba | 5 | //variables y metodos para el display |
adrianmb | 0:8e1427586aba | 6 | BusOut segments(p28,p23,p20,p19,p29,p26,p22); //g,f,e,d,c,b,a |
adrianmb | 0:8e1427586aba | 7 | BusOut digits(p21,p24,p25,p27); //digitos |
adrianmb | 0:8e1427586aba | 8 | int mask_plexing[4] ={0x01,0x02,0x04,0x08};//maskara para el multiplexado de digitos |
adrianmb | 0:8e1427586aba | 9 | int mask_numbers[10]={0x01,0xcf,0x92,0x06,0x4c,0x24,0x20,0x0f,0x00,0x0c};//maskara de numeros 0,1,2,3,4,5,6,7,8,9 |
adrianmb | 0:8e1427586aba | 10 | int currDigit=1;//digito que debe estar encendido |
adrianmb | 0:8e1427586aba | 11 | int dgt[4]={0,0,0,0};//separando en digitos |
adrianmb | 0:8e1427586aba | 12 | Ticker plex;//timer para el multiplexado |
adrianmb | 0:8e1427586aba | 13 | |
adrianmb | 0:8e1427586aba | 14 | void plexing();//funcion de multiplexado |
adrianmb | 0:8e1427586aba | 15 | void format(int n);//funcion para dar formato al numero |
adrianmb | 0:8e1427586aba | 16 | //---------------------------------- |
adrianmb | 0:8e1427586aba | 17 | //variables y metodos sensor RPM |
adrianmb | 0:8e1427586aba | 18 | InterruptIn hall(p8);//interrupcion del sensor hall |
adrianmb | 0:8e1427586aba | 19 | int rpm=0;//guardar rpms |
adrianmb | 0:8e1427586aba | 20 | float vel; |
adrianmb | 0:8e1427586aba | 21 | void RPM();//calcular rpms |
adrianmb | 0:8e1427586aba | 22 | //---------------------------------- |
adrianmb | 0:8e1427586aba | 23 | //Botones 1 y 2 |
adrianmb | 0:8e1427586aba | 24 | Timer reboot;//desactivar botones, rebote |
adrianmb | 0:8e1427586aba | 25 | bool active=true;//activados?? |
adrianmb | 0:8e1427586aba | 26 | BusOut leds(LED1,LED2,LED3,LED4);//bus para los leds |
adrianmb | 0:8e1427586aba | 27 | InterruptIn btn1(p7);//interrupcion del boton 1 |
adrianmb | 0:8e1427586aba | 28 | InterruptIn btn2(p6);//interrupcion del boton 2 |
adrianmb | 0:8e1427586aba | 29 | int mode=1;//seleccion de modo |
adrianmb | 0:8e1427586aba | 30 | int maskMode[4]={1,2,4,8};//maskara para el flasheo de leds |
adrianmb | 0:8e1427586aba | 31 | |
adrianmb | 0:8e1427586aba | 32 | void btn1Pressed() { |
adrianmb | 0:8e1427586aba | 33 | if (reboot.read()>0.1) { |
adrianmb | 0:8e1427586aba | 34 | mode--; |
adrianmb | 0:8e1427586aba | 35 | if (mode<=0) |
adrianmb | 0:8e1427586aba | 36 | mode=1; |
adrianmb | 0:8e1427586aba | 37 | leds=maskMode[mode-1]; |
adrianmb | 0:8e1427586aba | 38 | reboot.reset(); |
adrianmb | 0:8e1427586aba | 39 | reboot.start(); |
adrianmb | 0:8e1427586aba | 40 | } |
adrianmb | 0:8e1427586aba | 41 | } |
adrianmb | 0:8e1427586aba | 42 | |
adrianmb | 0:8e1427586aba | 43 | void btn2Pressed() { |
adrianmb | 0:8e1427586aba | 44 | if (reboot.read()>0.1) { |
adrianmb | 0:8e1427586aba | 45 | mode++; |
adrianmb | 0:8e1427586aba | 46 | if (mode>=5) |
adrianmb | 0:8e1427586aba | 47 | mode=4; |
adrianmb | 0:8e1427586aba | 48 | leds=maskMode[mode-1]; |
adrianmb | 0:8e1427586aba | 49 | reboot.reset(); |
adrianmb | 0:8e1427586aba | 50 | reboot.start(); |
adrianmb | 0:8e1427586aba | 51 | } |
adrianmb | 0:8e1427586aba | 52 | } |
adrianmb | 0:8e1427586aba | 53 | //--------------------------------------- |
adrianmb | 0:8e1427586aba | 54 | //funciones y variables comunicacion xbee |
adrianmb | 0:8e1427586aba | 55 | Ticker flasher; |
adrianmb | 0:8e1427586aba | 56 | Serial xBee(p9,p10); |
adrianmb | 0:8e1427586aba | 57 | DigitalOut resetXbee(p11); |
adrianmb | 0:8e1427586aba | 58 | bool flash=true; |
adrianmb | 0:8e1427586aba | 59 | char in; |
adrianmb | 0:8e1427586aba | 60 | int maskPits[5]={0x00,0xcf,0x00,0x24,0xff}; |
adrianmb | 0:8e1427586aba | 61 | void rcv() { |
adrianmb | 0:8e1427586aba | 62 | if (xBee.readable()) { |
adrianmb | 0:8e1427586aba | 63 | in=xBee.getc(); |
adrianmb | 0:8e1427586aba | 64 | switch (in) { |
adrianmb | 0:8e1427586aba | 65 | case 'r': |
adrianmb | 0:8e1427586aba | 66 | break; |
adrianmb | 0:8e1427586aba | 67 | case 'p': |
adrianmb | 0:8e1427586aba | 68 | mode=5; |
adrianmb | 0:8e1427586aba | 69 | break; |
adrianmb | 0:8e1427586aba | 70 | |
adrianmb | 0:8e1427586aba | 71 | } |
adrianmb | 0:8e1427586aba | 72 | } |
adrianmb | 0:8e1427586aba | 73 | } |
adrianmb | 0:8e1427586aba | 74 | |
adrianmb | 0:8e1427586aba | 75 | void flashing() { |
adrianmb | 0:8e1427586aba | 76 | if (mode==5) { |
adrianmb | 0:8e1427586aba | 77 | if (flash) { |
adrianmb | 0:8e1427586aba | 78 | dgt[0]=maskPits[0]; |
adrianmb | 0:8e1427586aba | 79 | dgt[1]=maskPits[1]; |
adrianmb | 0:8e1427586aba | 80 | dgt[2]=maskPits[2]; |
adrianmb | 0:8e1427586aba | 81 | dgt[3]=maskPits[3]; |
adrianmb | 0:8e1427586aba | 82 | leds=15; |
adrianmb | 0:8e1427586aba | 83 | flash=!flash; |
adrianmb | 0:8e1427586aba | 84 | } else { |
adrianmb | 0:8e1427586aba | 85 | dgt[0]=maskPits[4]; |
adrianmb | 0:8e1427586aba | 86 | dgt[1]=maskPits[4]; |
adrianmb | 0:8e1427586aba | 87 | dgt[2]=maskPits[4]; |
adrianmb | 0:8e1427586aba | 88 | dgt[3]=maskPits[4]; |
adrianmb | 0:8e1427586aba | 89 | leds=0; |
adrianmb | 0:8e1427586aba | 90 | flash=!flash; |
adrianmb | 0:8e1427586aba | 91 | } |
adrianmb | 0:8e1427586aba | 92 | } |
adrianmb | 0:8e1427586aba | 93 | } |
adrianmb | 0:8e1427586aba | 94 | //---------------------------------- |
adrianmb | 0:8e1427586aba | 95 | Timer t; |
adrianmb | 0:8e1427586aba | 96 | Ticker sendData; |
adrianmb | 0:8e1427586aba | 97 | AnalogIn bateria(p17); |
adrianmb | 0:8e1427586aba | 98 | AnalogIn corriente(p18); |
adrianmb | 0:8e1427586aba | 99 | |
adrianmb | 0:8e1427586aba | 100 | void send(); |
adrianmb | 0:8e1427586aba | 101 | |
adrianmb | 0:8e1427586aba | 102 | //funcion principal |
adrianmb | 0:8e1427586aba | 103 | int main() { |
adrianmb | 0:8e1427586aba | 104 | t.start(); |
adrianmb | 0:8e1427586aba | 105 | reboot.start(); |
adrianmb | 0:8e1427586aba | 106 | plex.attach(&plexing,0.0002); |
adrianmb | 0:8e1427586aba | 107 | flasher.attach(&flashing,0.2); |
adrianmb | 0:8e1427586aba | 108 | |
adrianmb | 0:8e1427586aba | 109 | hall.mode(PullDown); |
adrianmb | 0:8e1427586aba | 110 | hall.fall(&RPM); |
adrianmb | 0:8e1427586aba | 111 | |
adrianmb | 0:8e1427586aba | 112 | btn1.mode(PullUp); |
adrianmb | 0:8e1427586aba | 113 | btn1.fall(&btn1Pressed); |
adrianmb | 0:8e1427586aba | 114 | btn2.mode(PullUp); |
adrianmb | 0:8e1427586aba | 115 | btn2.fall(&btn2Pressed); |
adrianmb | 0:8e1427586aba | 116 | leds=maskMode[mode-1]; |
adrianmb | 0:8e1427586aba | 117 | |
adrianmb | 0:8e1427586aba | 118 | resetXbee=0; |
adrianmb | 0:8e1427586aba | 119 | xBee.baud(57600); |
adrianmb | 0:8e1427586aba | 120 | xBee.attach(&rcv); |
adrianmb | 0:8e1427586aba | 121 | sendData.attach(&send,0.25); |
adrianmb | 0:8e1427586aba | 122 | } |
adrianmb | 0:8e1427586aba | 123 | |
adrianmb | 0:8e1427586aba | 124 | //funciones display |
adrianmb | 0:8e1427586aba | 125 | |
adrianmb | 0:8e1427586aba | 126 | void format(int n) { |
adrianmb | 0:8e1427586aba | 127 | long double base=10; |
adrianmb | 0:8e1427586aba | 128 | if (n>9999) |
adrianmb | 0:8e1427586aba | 129 | n=9999; |
adrianmb | 0:8e1427586aba | 130 | for (int i = 3; i >= 0; i--) { |
adrianmb | 0:8e1427586aba | 131 | dgt[3-i] = int (n /(pow(base,i))); |
adrianmb | 0:8e1427586aba | 132 | n -= dgt[3-i]*(pow(base,i)); |
adrianmb | 0:8e1427586aba | 133 | } |
adrianmb | 0:8e1427586aba | 134 | } |
adrianmb | 0:8e1427586aba | 135 | |
adrianmb | 0:8e1427586aba | 136 | void plexing() { |
adrianmb | 0:8e1427586aba | 137 | segments= mask_numbers[dgt[currDigit-1]]; |
adrianmb | 0:8e1427586aba | 138 | digits=mask_plexing[currDigit-1]; |
adrianmb | 0:8e1427586aba | 139 | currDigit++; |
adrianmb | 0:8e1427586aba | 140 | if (currDigit>=5) |
adrianmb | 0:8e1427586aba | 141 | currDigit=1; |
adrianmb | 0:8e1427586aba | 142 | } |
adrianmb | 0:8e1427586aba | 143 | //funciones rpm |
adrianmb | 0:8e1427586aba | 144 | void RPM() { |
adrianmb | 0:8e1427586aba | 145 | float time; |
adrianmb | 0:8e1427586aba | 146 | t.stop(); |
adrianmb | 0:8e1427586aba | 147 | time=t.read(); |
adrianmb | 0:8e1427586aba | 148 | rpm=int((1/time)*60); |
adrianmb | 0:8e1427586aba | 149 | vel=rpm*(0.1053313185/2); |
adrianmb | 0:8e1427586aba | 150 | if (mode==1) { |
adrianmb | 0:8e1427586aba | 151 | format(rpm); |
adrianmb | 0:8e1427586aba | 152 | } |
adrianmb | 0:8e1427586aba | 153 | if(mode==2){ |
adrianmb | 0:8e1427586aba | 154 | format(vel); |
adrianmb | 0:8e1427586aba | 155 | } |
adrianmb | 0:8e1427586aba | 156 | t.reset(); |
adrianmb | 0:8e1427586aba | 157 | t.start(); |
adrianmb | 0:8e1427586aba | 158 | } |
adrianmb | 0:8e1427586aba | 159 | |
adrianmb | 0:8e1427586aba | 160 | void send() { |
adrianmb | 0:8e1427586aba | 161 | batt=bateria; |
adrianmb | 0:8e1427586aba | 162 | curr=corriente; |
adrianmb | 0:8e1427586aba | 163 | xBee.printf("%d;%f;%f;%f;\n",rpm,vel,batt,curr); |
adrianmb | 0:8e1427586aba | 164 | } |