Sistema de telemetria Electraton 2011

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }