for HTTP-3A

Dependencies:   mbed TextLCD

Committer:
thomasya
Date:
Thu Jul 11 13:01:52 2019 +0000
Revision:
6:572219c7c378
Parent:
5:1d817b3c42f1
Child:
7:e22e9fd1a526
CAN done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
thomasya 3:043e5e06f325 1 #include "mbed.h"
thomasya 4:c1438ffd88dd 2 #include "TextLCD.h"
thomasya 4:c1438ffd88dd 3 #define VMAX 0.36f
thomasya 4:c1438ffd88dd 4 #define VMIN 0.05f
thomasya 6:572219c7c378 5 #define AVGNUM 20
thomasya 3:043e5e06f325 6
thomasya 4:c1438ffd88dd 7
thomasya 3:043e5e06f325 8 Serial pc(USBTX, USBRX, 115200);
group-ST 0:6e8275981824 9
thomasya 3:043e5e06f325 10 Ticker ticker1;
thomasya 3:043e5e06f325 11
thomasya 4:c1438ffd88dd 12 CAN can1(PB_8, PB_9);
thomasya 3:043e5e06f325 13 CANMessage can_msg_1;
thomasya 3:043e5e06f325 14 CANMessage can_msg_send;
thomasya 4:c1438ffd88dd 15 char data_msg[3] = {0x11,0x22,0x33};
thomasya 4:c1438ffd88dd 16
thomasya 5:1d817b3c42f1 17 DigitalIn armSwitch(PF_7, PullDown);
thomasya 5:1d817b3c42f1 18 bool armed = false;
thomasya 4:c1438ffd88dd 19
thomasya 4:c1438ffd88dd 20 AnalogIn res(PA_0);
thomasya 6:572219c7c378 21 float volt[AVGNUM];
thomasya 6:572219c7c378 22 float voltAVG = 0;
thomasya 6:572219c7c378 23 int index = 0;
group-ST 0:6e8275981824 24
thomasya 3:043e5e06f325 25
thomasya 5:1d817b3c42f1 26 //I2C i2c_lcd(PB_7,PB_6); // SDA, SCL
thomasya 5:1d817b3c42f1 27 I2C i2c_lcd(PF_0,PF_1); // SDA, SCL
thomasya 4:c1438ffd88dd 28 TextLCD_I2C lcd(&i2c_lcd, 0x7E, TextLCD::LCD16x2); // I2C bus, PCF8574 Slaveaddress, LCD Type
thomasya 4:c1438ffd88dd 29
thomasya 4:c1438ffd88dd 30 const char fill[] = {0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00};
thomasya 4:c1438ffd88dd 31 const char empty[] = {0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1F, 0x00};
thomasya 5:1d817b3c42f1 32 const char cross[] = {0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00, 0x00};
thomasya 4:c1438ffd88dd 33
thomasya 4:c1438ffd88dd 34 void showBar(void);
thomasya 3:043e5e06f325 35
thomasya 5:1d817b3c42f1 36 void showArm(void);
thomasya 5:1d817b3c42f1 37
thomasya 3:043e5e06f325 38 void CAN_RX1(void);
group-ST 0:6e8275981824 39
thomasya 3:043e5e06f325 40 void sendCMD(void)
thomasya 3:043e5e06f325 41 {
thomasya 4:c1438ffd88dd 42 if(armed)
thomasya 4:c1438ffd88dd 43 {
thomasya 6:572219c7c378 44 int CMD = 90 * (voltAVG-VMIN)/(VMAX-VMIN);
thomasya 6:572219c7c378 45 if (CMD > 90)
thomasya 6:572219c7c378 46 CMD = 90;
thomasya 6:572219c7c378 47 else if (CMD < 0)
thomasya 6:572219c7c378 48 CMD = 0;
thomasya 6:572219c7c378 49 data_msg[0] = (char)CMD;
thomasya 6:572219c7c378 50 data_msg[1] = (char)CMD;
thomasya 6:572219c7c378 51 data_msg[2] = (char)CMD;
thomasya 6:572219c7c378 52 can_msg_send = CANMessage(0x111,data_msg,3,CANData,CANStandard);
thomasya 6:572219c7c378 53 can1.write(can_msg_send);
thomasya 6:572219c7c378 54 }
thomasya 6:572219c7c378 55 else
thomasya 6:572219c7c378 56 {
thomasya 6:572219c7c378 57 data_msg[0] = 0;
thomasya 6:572219c7c378 58 data_msg[1] = 0;
thomasya 6:572219c7c378 59 data_msg[2] = 0;
thomasya 4:c1438ffd88dd 60 can_msg_send = CANMessage(0x111,data_msg,3,CANData,CANStandard);
thomasya 4:c1438ffd88dd 61 can1.write(can_msg_send);
thomasya 4:c1438ffd88dd 62 }
thomasya 3:043e5e06f325 63
thomasya 6:572219c7c378 64 //printf("res: %f\n", voltAVG);
thomasya 3:043e5e06f325 65 }
group-ST 0:6e8275981824 66
group-ST 0:6e8275981824 67 int main()
group-ST 0:6e8275981824 68 {
thomasya 3:043e5e06f325 69
thomasya 4:c1438ffd88dd 70 can1.frequency(500000);
thomasya 4:c1438ffd88dd 71 can1.attach(&CAN_RX1, CAN::RxIrq);
thomasya 4:c1438ffd88dd 72 ticker1.attach(&sendCMD, 1);
thomasya 3:043e5e06f325 73 pc.printf("start\n");
thomasya 4:c1438ffd88dd 74
thomasya 4:c1438ffd88dd 75 lcd.setCursor(TextLCD::CurOff_BlkOff);
thomasya 4:c1438ffd88dd 76 lcd.setBacklight(TextLCD::LightOn);
thomasya 4:c1438ffd88dd 77 lcd.setUDC(0, (char *) fill);
thomasya 4:c1438ffd88dd 78 lcd.setUDC(1, (char *) empty);
thomasya 5:1d817b3c42f1 79 lcd.setUDC(2, (char *) cross);
thomasya 4:c1438ffd88dd 80 pc.printf("set done\n\r");
thomasya 4:c1438ffd88dd 81
thomasya 6:572219c7c378 82 for(int i = 0; i<AVGNUM; i++)
thomasya 6:572219c7c378 83 {
thomasya 6:572219c7c378 84 volt[i] = 0;
thomasya 6:572219c7c378 85 }
thomasya 6:572219c7c378 86
thomasya 3:043e5e06f325 87 while(1)
thomasya 4:c1438ffd88dd 88 {
thomasya 6:572219c7c378 89 volt[index] = res.read();
thomasya 6:572219c7c378 90 index++;
thomasya 6:572219c7c378 91 if (index>=AVGNUM)
thomasya 6:572219c7c378 92 index = 0;
thomasya 6:572219c7c378 93
thomasya 6:572219c7c378 94 float tmp = 0;
thomasya 6:572219c7c378 95 for(int i = 0; i<AVGNUM; i++)
thomasya 6:572219c7c378 96 {
thomasya 6:572219c7c378 97 tmp = tmp + volt[i];
thomasya 6:572219c7c378 98 }
thomasya 6:572219c7c378 99 voltAVG = tmp/AVGNUM;
thomasya 6:572219c7c378 100
thomasya 6:572219c7c378 101
thomasya 4:c1438ffd88dd 102 showBar();
thomasya 5:1d817b3c42f1 103 showArm();
thomasya 5:1d817b3c42f1 104
thomasya 5:1d817b3c42f1 105
thomasya 3:043e5e06f325 106 }
thomasya 3:043e5e06f325 107
thomasya 3:043e5e06f325 108 }
thomasya 3:043e5e06f325 109
thomasya 3:043e5e06f325 110
thomasya 3:043e5e06f325 111
thomasya 3:043e5e06f325 112 void CAN_RX1(void)
thomasya 3:043e5e06f325 113 {
thomasya 3:043e5e06f325 114 if(can1.read(can_msg_1))
thomasya 3:043e5e06f325 115 {
thomasya 3:043e5e06f325 116 pc.printf("CAN RX %d\n", can_msg_1.id);
thomasya 3:043e5e06f325 117
group-ST 0:6e8275981824 118 }
group-ST 0:6e8275981824 119 }
thomasya 4:c1438ffd88dd 120
thomasya 4:c1438ffd88dd 121 void showBar(void)
thomasya 4:c1438ffd88dd 122 {
thomasya 6:572219c7c378 123 int bars = 16 * (voltAVG-VMIN)/(VMAX-VMIN);
thomasya 4:c1438ffd88dd 124 if (bars > 16)
thomasya 4:c1438ffd88dd 125 bars = 16;
thomasya 4:c1438ffd88dd 126 else if( bars < 0 )
thomasya 4:c1438ffd88dd 127 bars = 0;
thomasya 4:c1438ffd88dd 128
thomasya 5:1d817b3c42f1 129 if (armed)
thomasya 4:c1438ffd88dd 130 {
thomasya 5:1d817b3c42f1 131 for(int i = 0; i<bars ;i++)
thomasya 5:1d817b3c42f1 132 {
thomasya 5:1d817b3c42f1 133 lcd.locate(i,0);
thomasya 5:1d817b3c42f1 134 lcd.putc(0);
thomasya 5:1d817b3c42f1 135 }
thomasya 5:1d817b3c42f1 136 for(int i = bars; i<16 ;i++)
thomasya 5:1d817b3c42f1 137 {
thomasya 5:1d817b3c42f1 138 lcd.locate(i,0);
thomasya 5:1d817b3c42f1 139 lcd.putc(1);
thomasya 5:1d817b3c42f1 140 }
thomasya 5:1d817b3c42f1 141 }
thomasya 5:1d817b3c42f1 142 else
thomasya 4:c1438ffd88dd 143 {
thomasya 5:1d817b3c42f1 144 for(int i = 0; i<bars ;i++)
thomasya 5:1d817b3c42f1 145 {
thomasya 5:1d817b3c42f1 146 lcd.locate(i,0);
thomasya 5:1d817b3c42f1 147 lcd.putc(2);
thomasya 5:1d817b3c42f1 148 }
thomasya 5:1d817b3c42f1 149 for(int i = bars; i<16 ;i++)
thomasya 5:1d817b3c42f1 150 {
thomasya 5:1d817b3c42f1 151 lcd.locate(i,0);
thomasya 5:1d817b3c42f1 152 lcd.putc(1);
thomasya 5:1d817b3c42f1 153 }
thomasya 4:c1438ffd88dd 154 }
thomasya 4:c1438ffd88dd 155 }
thomasya 5:1d817b3c42f1 156
thomasya 5:1d817b3c42f1 157 void showArm(void)
thomasya 5:1d817b3c42f1 158 {
thomasya 5:1d817b3c42f1 159 if (armSwitch)
thomasya 5:1d817b3c42f1 160 armed = true;
thomasya 5:1d817b3c42f1 161 else
thomasya 5:1d817b3c42f1 162 armed = false;
thomasya 5:1d817b3c42f1 163
thomasya 5:1d817b3c42f1 164 if (armed)
thomasya 5:1d817b3c42f1 165 {
thomasya 5:1d817b3c42f1 166 lcd.locate(0,1);
thomasya 5:1d817b3c42f1 167 lcd.printf("ARMED ");
thomasya 5:1d817b3c42f1 168 }
thomasya 5:1d817b3c42f1 169 else
thomasya 5:1d817b3c42f1 170 {
thomasya 5:1d817b3c42f1 171 lcd.locate(0,1);
thomasya 5:1d817b3c42f1 172 lcd.printf("DISARMED");
thomasya 5:1d817b3c42f1 173 }
thomasya 5:1d817b3c42f1 174
thomasya 5:1d817b3c42f1 175 }