This is the device firmware for the controlBoard in the DIY 3D Printable Raspberry Pi Raman Spectrometer. For more information please visit: http://hackaday.io/project/1279
main.cpp@0:14942e263231, 2014-08-15 (annotated)
- Committer:
- flatcat
- Date:
- Fri Aug 15 10:38:50 2014 +0000
- Revision:
- 0:14942e263231
http://hackaday.io/project/1279
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
flatcat | 0:14942e263231 | 1 | #include "mbed.h" |
flatcat | 0:14942e263231 | 2 | #include "DS18B20.h" |
flatcat | 0:14942e263231 | 3 | #include "OneWireDefs.h" |
flatcat | 0:14942e263231 | 4 | |
flatcat | 0:14942e263231 | 5 | #define THERMOMETER DS18B20 |
flatcat | 0:14942e263231 | 6 | |
flatcat | 0:14942e263231 | 7 | #define msg_cuvette_tray 0x10 |
flatcat | 0:14942e263231 | 8 | #define msg_cuvette_temp 0x11 |
flatcat | 0:14942e263231 | 9 | #define msg_cuvette_status 0x12 |
flatcat | 0:14942e263231 | 10 | #define msg_cuvette_tray_pos 0x13 |
flatcat | 0:14942e263231 | 11 | #define msg_cuvette_pelt_status 0x14 |
flatcat | 0:14942e263231 | 12 | #define msg_cuvette_stepper 0x15 |
flatcat | 0:14942e263231 | 13 | |
flatcat | 0:14942e263231 | 14 | #define msg_filter_wheel 0x20 |
flatcat | 0:14942e263231 | 15 | #define msg_filter_pos 0x21 |
flatcat | 0:14942e263231 | 16 | |
flatcat | 0:14942e263231 | 17 | #define msg_laser_temp 0x30 |
flatcat | 0:14942e263231 | 18 | #define msg_laser_power_status 0x31 |
flatcat | 0:14942e263231 | 19 | #define msg_laser_ttl_status 0x32 |
flatcat | 0:14942e263231 | 20 | #define msg_laser_good_status 0x33 |
flatcat | 0:14942e263231 | 21 | #define msg_laser_color 0x34 |
flatcat | 0:14942e263231 | 22 | #define msg_uv_index 0x35 |
flatcat | 0:14942e263231 | 23 | |
flatcat | 0:14942e263231 | 24 | #define msg_ccd_pelt_status 0x40 |
flatcat | 0:14942e263231 | 25 | |
flatcat | 0:14942e263231 | 26 | #define msg_shutter_servo_pos 0x50 |
flatcat | 0:14942e263231 | 27 | #define msg_shutter_status 0x51 |
flatcat | 0:14942e263231 | 28 | |
flatcat | 0:14942e263231 | 29 | #define msg_board_ID 0x60 |
flatcat | 0:14942e263231 | 30 | #define msg_board_serial 0x61 |
flatcat | 0:14942e263231 | 31 | #define msg_board_status 0x62 |
flatcat | 0:14942e263231 | 32 | #define msg_board_time 0x63 |
flatcat | 0:14942e263231 | 33 | #define msg_board_model 0x64 |
flatcat | 0:14942e263231 | 34 | #define msg_board_version 0x65 |
flatcat | 0:14942e263231 | 35 | #define req_reboot 0x66 |
flatcat | 0:14942e263231 | 36 | |
flatcat | 0:14942e263231 | 37 | #define msg_ambient_temp 0x70 |
flatcat | 0:14942e263231 | 38 | #define req_baro 0x71 |
flatcat | 0:14942e263231 | 39 | #define req_humidity 0x72 |
flatcat | 0:14942e263231 | 40 | |
flatcat | 0:14942e263231 | 41 | #define cmd_cuvette 0xA0 |
flatcat | 0:14942e263231 | 42 | #define tray_open 0xA1 |
flatcat | 0:14942e263231 | 43 | #define tray_close 0xA2 |
flatcat | 0:14942e263231 | 44 | #define cuvette_peltier 0xA3 |
flatcat | 0:14942e263231 | 45 | #define req_cuvette_status 0xA4 |
flatcat | 0:14942e263231 | 46 | #define req_cuvette_temp 0xA5 |
flatcat | 0:14942e263231 | 47 | #define req_cuvette_pelt_status 0xA6 |
flatcat | 0:14942e263231 | 48 | #define req_cuvette_tray_pos 0xA7 |
flatcat | 0:14942e263231 | 49 | |
flatcat | 0:14942e263231 | 50 | #define cmd_filter_wheel 0xB0 |
flatcat | 0:14942e263231 | 51 | #define filter_select 0xB1 |
flatcat | 0:14942e263231 | 52 | #define filter_reset 0xB2 |
flatcat | 0:14942e263231 | 53 | #define req_filter_ID 0xB3 |
flatcat | 0:14942e263231 | 54 | #define req_filter_status 0xB4 |
flatcat | 0:14942e263231 | 55 | #define req_filter_count 0xB5 |
flatcat | 0:14942e263231 | 56 | #define req_filter_pos 0xB6 |
flatcat | 0:14942e263231 | 57 | |
flatcat | 0:14942e263231 | 58 | #define cmd_laser 0xC0 |
flatcat | 0:14942e263231 | 59 | #define laser_power 0xC1 |
flatcat | 0:14942e263231 | 60 | #define laser_ttl 0xC2 |
flatcat | 0:14942e263231 | 61 | #define req_laser_good_status 0xC3 |
flatcat | 0:14942e263231 | 62 | #define req_laser_color 0xC4 |
flatcat | 0:14942e263231 | 63 | #define req_laser_temp 0xC5 |
flatcat | 0:14942e263231 | 64 | #define req_uv_index 0xC6 |
flatcat | 0:14942e263231 | 65 | |
flatcat | 0:14942e263231 | 66 | #define cmd_ccd_peltier 0xD0 |
flatcat | 0:14942e263231 | 67 | #define cmd_ccd_pelt_power 0xD1 |
flatcat | 0:14942e263231 | 68 | #define cmd_cuvette_peltier 0xD2 |
flatcat | 0:14942e263231 | 69 | #define cmd_cuvette_pelt_power 0xD3 |
flatcat | 0:14942e263231 | 70 | #define req_pelt_cool 0xD4 |
flatcat | 0:14942e263231 | 71 | #define req_pelt_heat 0xD5 |
flatcat | 0:14942e263231 | 72 | #define req_pelt_off 0xD6 |
flatcat | 0:14942e263231 | 73 | |
flatcat | 0:14942e263231 | 74 | #define cmd_shutter_servo 0xE0 |
flatcat | 0:14942e263231 | 75 | #define shutter_open 0xE1 |
flatcat | 0:14942e263231 | 76 | #define shutter_close 0xE2 |
flatcat | 0:14942e263231 | 77 | #define shutter_deflect 0xE3 |
flatcat | 0:14942e263231 | 78 | #define shutter_alternate 0xE4 |
flatcat | 0:14942e263231 | 79 | #define req_shutter_state 0xE5 |
flatcat | 0:14942e263231 | 80 | #define req_shutter_status 0xE6 |
flatcat | 0:14942e263231 | 81 | |
flatcat | 0:14942e263231 | 82 | #define packet_start 0xF0 |
flatcat | 0:14942e263231 | 83 | #define packet_ack 0xF1 |
flatcat | 0:14942e263231 | 84 | #define packet_flag 0xF2 |
flatcat | 0:14942e263231 | 85 | #define packet_end 0xF3 |
flatcat | 0:14942e263231 | 86 | #define packet_err 0xF4 |
flatcat | 0:14942e263231 | 87 | #define cmd_err 0xF5 |
flatcat | 0:14942e263231 | 88 | #define req_err 0xF6 |
flatcat | 0:14942e263231 | 89 | #define brd_err 0xF7 |
flatcat | 0:14942e263231 | 90 | |
flatcat | 0:14942e263231 | 91 | #define env_err 0x80 |
flatcat | 0:14942e263231 | 92 | #define cuvette_err 0x81 |
flatcat | 0:14942e263231 | 93 | #define laser_err 0x82 |
flatcat | 0:14942e263231 | 94 | #define filter_err 0x83 |
flatcat | 0:14942e263231 | 95 | #define ccd_pelt_err 0x84 |
flatcat | 0:14942e263231 | 96 | #define cuvette_pelt_err 0x85 |
flatcat | 0:14942e263231 | 97 | #define shutter_err 0x86 |
flatcat | 0:14942e263231 | 98 | #define board_err 0x87 |
flatcat | 0:14942e263231 | 99 | |
flatcat | 0:14942e263231 | 100 | DigitalIn button(USER_BUTTON); |
flatcat | 0:14942e263231 | 101 | DigitalOut grnLED(LED1); |
flatcat | 0:14942e263231 | 102 | DigitalOut cuvette_IN1(PC_14); |
flatcat | 0:14942e263231 | 103 | DigitalOut cuvette_IN2(PC_15); |
flatcat | 0:14942e263231 | 104 | DigitalOut cuvette_IN3(PH_0); |
flatcat | 0:14942e263231 | 105 | DigitalOut cuvette_IN4(PH_1); |
flatcat | 0:14942e263231 | 106 | DigitalOut filter_IN1(PA_4); |
flatcat | 0:14942e263231 | 107 | DigitalOut filter_IN2(PB_0); |
flatcat | 0:14942e263231 | 108 | DigitalOut filter_IN3(PC_1); |
flatcat | 0:14942e263231 | 109 | DigitalOut filter_IN4(PC_0); |
flatcat | 0:14942e263231 | 110 | PwmOut cuvettePeltA(PB_13); // in4 |
flatcat | 0:14942e263231 | 111 | PwmOut cuvettePeltB(PB_14); // in3 |
flatcat | 0:14942e263231 | 112 | PwmOut ccdPeltA(PB_1); // in2 |
flatcat | 0:14942e263231 | 113 | PwmOut ccdPeltB(PB_15); // in1 |
flatcat | 0:14942e263231 | 114 | AnalogIn peltCurrent(PC_5); |
flatcat | 0:14942e263231 | 115 | |
flatcat | 0:14942e263231 | 116 | const int mDelay=1; |
flatcat | 0:14942e263231 | 117 | double temp; |
flatcat | 0:14942e263231 | 118 | int z; |
flatcat | 0:14942e263231 | 119 | int trayOpen; |
flatcat | 0:14942e263231 | 120 | THERMOMETER device(PC_8); |
flatcat | 0:14942e263231 | 121 | Serial raspi(USBTX, USBRX); |
flatcat | 0:14942e263231 | 122 | |
flatcat | 0:14942e263231 | 123 | typedef union bytes { |
flatcat | 0:14942e263231 | 124 | double d ; |
flatcat | 0:14942e263231 | 125 | char c[8]; |
flatcat | 0:14942e263231 | 126 | } bytes; |
flatcat | 0:14942e263231 | 127 | |
flatcat | 0:14942e263231 | 128 | void printDoubleToHex(double d) |
flatcat | 0:14942e263231 | 129 | { |
flatcat | 0:14942e263231 | 130 | bytes b; |
flatcat | 0:14942e263231 | 131 | b.d = d; |
flatcat | 0:14942e263231 | 132 | raspi.printf("%f -> %x %x %x %x %x %x %x %x\r\n", b.d, b.c[0], b.c[1], b.c[2], b.c[3], b.c[4], b.c[5], b.c[6], b.c[7]); |
flatcat | 0:14942e263231 | 133 | } |
flatcat | 0:14942e263231 | 134 | |
flatcat | 0:14942e263231 | 135 | void printHexToDouble(char *arr) |
flatcat | 0:14942e263231 | 136 | { |
flatcat | 0:14942e263231 | 137 | bytes b; |
flatcat | 0:14942e263231 | 138 | for (int i=0; i<8; ++i) |
flatcat | 0:14942e263231 | 139 | b.c[i] = arr[i]; |
flatcat | 0:14942e263231 | 140 | raspi.printf("received hex: %x %x %x %x %x %x %x %x \r\n", b.c[0], b.c[1], b.c[2], b.c[3], b.c[4], b.c[5], b.c[6], b.c[7]); |
flatcat | 0:14942e263231 | 141 | raspi.printf("convert to: %f\r\n", b.d); |
flatcat | 0:14942e263231 | 142 | } |
flatcat | 0:14942e263231 | 143 | |
flatcat | 0:14942e263231 | 144 | void readTemp(int deviceNum) |
flatcat | 0:14942e263231 | 145 | { |
flatcat | 0:14942e263231 | 146 | temp = device.readTemperature(deviceNum); |
flatcat | 0:14942e263231 | 147 | if (deviceNum == 0) { |
flatcat | 0:14942e263231 | 148 | // raspi.printf("Cuvette Temperature: %f\r\n", temp); |
flatcat | 0:14942e263231 | 149 | // const char begin[2]= {packet_flag, packet_start}; |
flatcat | 0:14942e263231 | 150 | // raspi.printf(begin); |
flatcat | 0:14942e263231 | 151 | printDoubleToHex(temp); |
flatcat | 0:14942e263231 | 152 | // const char stop[2]= {packet_flag, packet_end}; |
flatcat | 0:14942e263231 | 153 | // raspi.printf(stop); |
flatcat | 0:14942e263231 | 154 | } |
flatcat | 0:14942e263231 | 155 | if (deviceNum == 1) { |
flatcat | 0:14942e263231 | 156 | // raspi.printf("Laser Emitter Temperature: %f\r\n", temp); |
flatcat | 0:14942e263231 | 157 | // const char begin[2]= {packet_flag, packet_start}; |
flatcat | 0:14942e263231 | 158 | // raspi.printf(begin); |
flatcat | 0:14942e263231 | 159 | printDoubleToHex(temp); |
flatcat | 0:14942e263231 | 160 | // const char stop[2]= {packet_flag, packet_end}; |
flatcat | 0:14942e263231 | 161 | // raspi.printf(stop); |
flatcat | 0:14942e263231 | 162 | } |
flatcat | 0:14942e263231 | 163 | // raspi.printf("Device %d is %f",deviceNum, temp); |
flatcat | 0:14942e263231 | 164 | wait(0.5); |
flatcat | 0:14942e263231 | 165 | } |
flatcat | 0:14942e263231 | 166 | |
flatcat | 0:14942e263231 | 167 | int openTray() |
flatcat | 0:14942e263231 | 168 | { |
flatcat | 0:14942e263231 | 169 | while (z < 500) { |
flatcat | 0:14942e263231 | 170 | z++; |
flatcat | 0:14942e263231 | 171 | grnLED = 1; |
flatcat | 0:14942e263231 | 172 | wait_ms(1); |
flatcat | 0:14942e263231 | 173 | cuvette_IN1 = 0; |
flatcat | 0:14942e263231 | 174 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 175 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 176 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 177 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 178 | |
flatcat | 0:14942e263231 | 179 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 180 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 181 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 182 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 183 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 184 | |
flatcat | 0:14942e263231 | 185 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 186 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 187 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 188 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 189 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 190 | |
flatcat | 0:14942e263231 | 191 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 192 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 193 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 194 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 195 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 196 | |
flatcat | 0:14942e263231 | 197 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 198 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 199 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 200 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 201 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 202 | |
flatcat | 0:14942e263231 | 203 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 204 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 205 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 206 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 207 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 208 | |
flatcat | 0:14942e263231 | 209 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 210 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 211 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 212 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 213 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 214 | |
flatcat | 0:14942e263231 | 215 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 216 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 217 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 218 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 219 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 220 | |
flatcat | 0:14942e263231 | 221 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 222 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 223 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 224 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 225 | } |
flatcat | 0:14942e263231 | 226 | trayOpen = 1; |
flatcat | 0:14942e263231 | 227 | z = 0; |
flatcat | 0:14942e263231 | 228 | return(0); |
flatcat | 0:14942e263231 | 229 | } |
flatcat | 0:14942e263231 | 230 | |
flatcat | 0:14942e263231 | 231 | int closeTray() |
flatcat | 0:14942e263231 | 232 | { |
flatcat | 0:14942e263231 | 233 | while (z < 500) { |
flatcat | 0:14942e263231 | 234 | z++; |
flatcat | 0:14942e263231 | 235 | grnLED = 1; |
flatcat | 0:14942e263231 | 236 | wait_ms(1); |
flatcat | 0:14942e263231 | 237 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 238 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 239 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 240 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 241 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 242 | |
flatcat | 0:14942e263231 | 243 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 244 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 245 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 246 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 247 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 248 | |
flatcat | 0:14942e263231 | 249 | cuvette_IN1= 1; |
flatcat | 0:14942e263231 | 250 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 251 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 252 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 253 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 254 | |
flatcat | 0:14942e263231 | 255 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 256 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 257 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 258 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 259 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 260 | |
flatcat | 0:14942e263231 | 261 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 262 | cuvette_IN2= 1; |
flatcat | 0:14942e263231 | 263 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 264 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 265 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 266 | |
flatcat | 0:14942e263231 | 267 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 268 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 269 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 270 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 271 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 272 | |
flatcat | 0:14942e263231 | 273 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 274 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 275 | cuvette_IN3= 1; |
flatcat | 0:14942e263231 | 276 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 277 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 278 | |
flatcat | 0:14942e263231 | 279 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 280 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 281 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 282 | cuvette_IN4= 1; |
flatcat | 0:14942e263231 | 283 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 284 | |
flatcat | 0:14942e263231 | 285 | cuvette_IN1= 0; |
flatcat | 0:14942e263231 | 286 | cuvette_IN2= 0; |
flatcat | 0:14942e263231 | 287 | cuvette_IN3= 0; |
flatcat | 0:14942e263231 | 288 | cuvette_IN4= 0; |
flatcat | 0:14942e263231 | 289 | } |
flatcat | 0:14942e263231 | 290 | trayOpen = 0; |
flatcat | 0:14942e263231 | 291 | z = 0; |
flatcat | 0:14942e263231 | 292 | return(0); |
flatcat | 0:14942e263231 | 293 | } |
flatcat | 0:14942e263231 | 294 | |
flatcat | 0:14942e263231 | 295 | int filterForward() |
flatcat | 0:14942e263231 | 296 | { |
flatcat | 0:14942e263231 | 297 | while (z < 500) { |
flatcat | 0:14942e263231 | 298 | z++; |
flatcat | 0:14942e263231 | 299 | grnLED = 1; |
flatcat | 0:14942e263231 | 300 | wait_ms(1); |
flatcat | 0:14942e263231 | 301 | filter_IN1 = 0; |
flatcat | 0:14942e263231 | 302 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 303 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 304 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 305 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 306 | |
flatcat | 0:14942e263231 | 307 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 308 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 309 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 310 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 311 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 312 | |
flatcat | 0:14942e263231 | 313 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 314 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 315 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 316 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 317 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 318 | |
flatcat | 0:14942e263231 | 319 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 320 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 321 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 322 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 323 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 324 | |
flatcat | 0:14942e263231 | 325 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 326 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 327 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 328 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 329 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 330 | |
flatcat | 0:14942e263231 | 331 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 332 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 333 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 334 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 335 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 336 | |
flatcat | 0:14942e263231 | 337 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 338 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 339 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 340 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 341 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 342 | |
flatcat | 0:14942e263231 | 343 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 344 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 345 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 346 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 347 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 348 | |
flatcat | 0:14942e263231 | 349 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 350 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 351 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 352 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 353 | } |
flatcat | 0:14942e263231 | 354 | z = 0; |
flatcat | 0:14942e263231 | 355 | return(0); |
flatcat | 0:14942e263231 | 356 | } |
flatcat | 0:14942e263231 | 357 | int filterBack() |
flatcat | 0:14942e263231 | 358 | { |
flatcat | 0:14942e263231 | 359 | while (z < 500) { |
flatcat | 0:14942e263231 | 360 | z++; |
flatcat | 0:14942e263231 | 361 | grnLED = 0; |
flatcat | 0:14942e263231 | 362 | wait_ms(1); |
flatcat | 0:14942e263231 | 363 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 364 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 365 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 366 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 367 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 368 | |
flatcat | 0:14942e263231 | 369 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 370 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 371 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 372 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 373 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 374 | |
flatcat | 0:14942e263231 | 375 | filter_IN1= 1; |
flatcat | 0:14942e263231 | 376 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 377 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 378 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 379 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 380 | |
flatcat | 0:14942e263231 | 381 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 382 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 383 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 384 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 385 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 386 | |
flatcat | 0:14942e263231 | 387 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 388 | filter_IN2= 1; |
flatcat | 0:14942e263231 | 389 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 390 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 391 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 392 | |
flatcat | 0:14942e263231 | 393 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 394 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 395 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 396 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 397 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 398 | |
flatcat | 0:14942e263231 | 399 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 400 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 401 | filter_IN3= 1; |
flatcat | 0:14942e263231 | 402 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 403 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 404 | |
flatcat | 0:14942e263231 | 405 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 406 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 407 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 408 | filter_IN4= 1; |
flatcat | 0:14942e263231 | 409 | wait_ms(mDelay); |
flatcat | 0:14942e263231 | 410 | |
flatcat | 0:14942e263231 | 411 | filter_IN1= 0; |
flatcat | 0:14942e263231 | 412 | filter_IN2= 0; |
flatcat | 0:14942e263231 | 413 | filter_IN3= 0; |
flatcat | 0:14942e263231 | 414 | filter_IN4= 0; |
flatcat | 0:14942e263231 | 415 | } |
flatcat | 0:14942e263231 | 416 | z = 0; |
flatcat | 0:14942e263231 | 417 | return(0); |
flatcat | 0:14942e263231 | 418 | } |
flatcat | 0:14942e263231 | 419 | |
flatcat | 0:14942e263231 | 420 | int cuvettePeltCycle(){ |
flatcat | 0:14942e263231 | 421 | cuvettePeltA = 0; |
flatcat | 0:14942e263231 | 422 | cuvettePeltB = 0; |
flatcat | 0:14942e263231 | 423 | wait(3); |
flatcat | 0:14942e263231 | 424 | cuvettePeltA = 1; |
flatcat | 0:14942e263231 | 425 | cuvettePeltB = 1; |
flatcat | 0:14942e263231 | 426 | wait(3); |
flatcat | 0:14942e263231 | 427 | cuvettePeltA = 1; |
flatcat | 0:14942e263231 | 428 | cuvettePeltB = 0; |
flatcat | 0:14942e263231 | 429 | wait(3); |
flatcat | 0:14942e263231 | 430 | cuvettePeltA = 0; |
flatcat | 0:14942e263231 | 431 | cuvettePeltB = 1; |
flatcat | 0:14942e263231 | 432 | wait(3); |
flatcat | 0:14942e263231 | 433 | cuvettePeltA = 0; |
flatcat | 0:14942e263231 | 434 | cuvettePeltB = 0; |
flatcat | 0:14942e263231 | 435 | return 0; |
flatcat | 0:14942e263231 | 436 | } |
flatcat | 0:14942e263231 | 437 | |
flatcat | 0:14942e263231 | 438 | int err; |
flatcat | 0:14942e263231 | 439 | char* command; |
flatcat | 0:14942e263231 | 440 | int packetFlag = 0; |
flatcat | 0:14942e263231 | 441 | int main() |
flatcat | 0:14942e263231 | 442 | { |
flatcat | 0:14942e263231 | 443 | trayOpen = 0; |
flatcat | 0:14942e263231 | 444 | raspi.baud(921600); |
flatcat | 0:14942e263231 | 445 | |
flatcat | 0:14942e263231 | 446 | cuvettePeltCycle(); |
flatcat | 0:14942e263231 | 447 | |
flatcat | 0:14942e263231 | 448 | wait(10); |
flatcat | 0:14942e263231 | 449 | // raspi.printf("meridianScientific_ramanSpectrometer_controlBoard_V0\r\n"); |
flatcat | 0:14942e263231 | 450 | |
flatcat | 0:14942e263231 | 451 | while (!device.initialize()); // keep calling until it works |
flatcat | 0:14942e263231 | 452 | |
flatcat | 0:14942e263231 | 453 | int deviceCount = device.getDeviceCount(); |
flatcat | 0:14942e263231 | 454 | // raspi.printf("Located %d sensors\n\r",deviceCount); |
flatcat | 0:14942e263231 | 455 | |
flatcat | 0:14942e263231 | 456 | z = 0; |
flatcat | 0:14942e263231 | 457 | device.setResolution(twelveBit); |
flatcat | 0:14942e263231 | 458 | while(1) { |
flatcat | 0:14942e263231 | 459 | // for (int i = 0; i < deviceCount; i++) { |
flatcat | 0:14942e263231 | 460 | // readTemp(i); |
flatcat | 0:14942e263231 | 461 | // } |
flatcat | 0:14942e263231 | 462 | if (raspi.readable()) { // check if serial port is reaadable |
flatcat | 0:14942e263231 | 463 | switch (raspi.getc()) { // retrieve a character from serial |
flatcat | 0:14942e263231 | 464 | case packet_start: // case for packet start flag |
flatcat | 0:14942e263231 | 465 | switch (raspi.getc()) { // set condition for listening to another character |
flatcat | 0:14942e263231 | 466 | case packet_flag: // case for packet flag |
flatcat | 0:14942e263231 | 467 | packetFlag = 1; // turn the flag on |
flatcat | 0:14942e263231 | 468 | while (packetFlag == 1) { // start a loop that runs while the flag is on |
flatcat | 0:14942e263231 | 469 | switch (raspi.getc()) { // set another condition for listening to another character |
flatcat | 0:14942e263231 | 470 | case cmd_laser: // case for cmd_laser |
flatcat | 0:14942e263231 | 471 | grnLED = 1; // turn the led on |
flatcat | 0:14942e263231 | 472 | raspi.printf("%x", cmd_laser); // return cmd_laser to the raspi |
flatcat | 0:14942e263231 | 473 | switch (raspi.getc()) { // set another condition for listening to another character |
flatcat | 0:14942e263231 | 474 | case req_laser_temp: // case for req_laser_temp |
flatcat | 0:14942e263231 | 475 | raspi.printf("%x\r\n", req_laser_temp); // return req_laser_temp to the raspi |
flatcat | 0:14942e263231 | 476 | readTemp(0); // read the temperature for device 0 which is the laser temp sensor |
flatcat | 0:14942e263231 | 477 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 478 | continue; // continue through loop |
flatcat | 0:14942e263231 | 479 | default: // default if nothing matches |
flatcat | 0:14942e263231 | 480 | break; // break from loop |
flatcat | 0:14942e263231 | 481 | } |
flatcat | 0:14942e263231 | 482 | case cmd_cuvette: // case for cmd_cuvette |
flatcat | 0:14942e263231 | 483 | grnLED = 1; // turn led on |
flatcat | 0:14942e263231 | 484 | raspi.printf("%x", cmd_cuvette); // return cmd_cuvette to raspi |
flatcat | 0:14942e263231 | 485 | switch (raspi.getc()) { // set condition for listening to another character |
flatcat | 0:14942e263231 | 486 | case req_cuvette_temp: // case for req_cuvette_temp |
flatcat | 0:14942e263231 | 487 | raspi.printf("%x\r\n", req_cuvette_temp); // return req_cuvette_temp to raspi |
flatcat | 0:14942e263231 | 488 | readTemp(1); // read the temperature for device 1 which is the cuvette temp sensor |
flatcat | 0:14942e263231 | 489 | grnLED = 0; // turn the led off |
flatcat | 0:14942e263231 | 490 | continue; // continue through the loop |
flatcat | 0:14942e263231 | 491 | case tray_open: // case for tray_open |
flatcat | 0:14942e263231 | 492 | raspi.printf("%x\r\n", tray_open); // return tray_open to raspi |
flatcat | 0:14942e263231 | 493 | if (trayOpen == 0) { // check to see if the tray is closed |
flatcat | 0:14942e263231 | 494 | openTray(); // if not, open tray |
flatcat | 0:14942e263231 | 495 | } else { // otherwise |
flatcat | 0:14942e263231 | 496 | raspi.printf("%x\r\n", cuvette_err); // send a cuvette error to the raspi |
flatcat | 0:14942e263231 | 497 | } |
flatcat | 0:14942e263231 | 498 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 499 | continue; // continue through the loop |
flatcat | 0:14942e263231 | 500 | case tray_close: // case for tray close |
flatcat | 0:14942e263231 | 501 | raspi.printf("%x\r\n", tray_close); // return tray_close to raspi |
flatcat | 0:14942e263231 | 502 | if (trayOpen == 1) { // check to see if tray is open |
flatcat | 0:14942e263231 | 503 | closeTray(); // if not, close tray |
flatcat | 0:14942e263231 | 504 | } else { // otherwise |
flatcat | 0:14942e263231 | 505 | raspi.printf("%x\r\n", cuvette_err); // send a cuvette error to the raspi |
flatcat | 0:14942e263231 | 506 | } |
flatcat | 0:14942e263231 | 507 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 508 | continue; // continue through loop |
flatcat | 0:14942e263231 | 509 | default: // default if nothing matches |
flatcat | 0:14942e263231 | 510 | break; // break from loop |
flatcat | 0:14942e263231 | 511 | } |
flatcat | 0:14942e263231 | 512 | case cmd_filter_wheel: // case for cmd_filter_wheel |
flatcat | 0:14942e263231 | 513 | grnLED = 1; // turn led on |
flatcat | 0:14942e263231 | 514 | raspi.printf("%x", cmd_filter_wheel); // return cmd_filter_wheel to raspi |
flatcat | 0:14942e263231 | 515 | switch (raspi.getc()) { // set condidition for listening to another character |
flatcat | 0:14942e263231 | 516 | case filter_select: // case for filter_select |
flatcat | 0:14942e263231 | 517 | raspi.printf("%x\r\n", filter_select); // return filter_select to raspi |
flatcat | 0:14942e263231 | 518 | filterForward(); // move filter wheel forward one filter |
flatcat | 0:14942e263231 | 519 | filterBack(); // move filter wheel reverse one filter (this is just to test the commands) |
flatcat | 0:14942e263231 | 520 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 521 | continue; // continue through loop |
flatcat | 0:14942e263231 | 522 | default: // default if nothing matches |
flatcat | 0:14942e263231 | 523 | break; // break from loop |
flatcat | 0:14942e263231 | 524 | } |
flatcat | 0:14942e263231 | 525 | case cmd_cuvette_peltier: |
flatcat | 0:14942e263231 | 526 | grnLED = 1; // turn led on |
flatcat | 0:14942e263231 | 527 | raspi.printf("%x", cmd_cuvette_peltier); // return cmd_ccd_peltier to raspi |
flatcat | 0:14942e263231 | 528 | switch (raspi.getc()) { // set condidition for listening to another character |
flatcat | 0:14942e263231 | 529 | case cmd_cuvette_pelt_power: |
flatcat | 0:14942e263231 | 530 | switch (raspi.getc()) { // set condidition for listening to another character |
flatcat | 0:14942e263231 | 531 | case 0x00: // case for cmd_ccd_peltier OFF |
flatcat | 0:14942e263231 | 532 | raspi.printf("%x\r\n", cmd_cuvette_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 533 | cuvettePeltA = 0; // set PWM A to zero |
flatcat | 0:14942e263231 | 534 | cuvettePeltB = 0; // set PWM B to zero |
flatcat | 0:14942e263231 | 535 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 536 | break; |
flatcat | 0:14942e263231 | 537 | case 0x01: // case for cmd_cuvette_peltier COOL |
flatcat | 0:14942e263231 | 538 | raspi.printf("%x\r\n", cmd_cuvette_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 539 | cuvettePeltA = 0.5; // set PWM A to 0.5 |
flatcat | 0:14942e263231 | 540 | cuvettePeltB = 0; // set PWM B to zero |
flatcat | 0:14942e263231 | 541 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 542 | break; |
flatcat | 0:14942e263231 | 543 | case 0x02: // case for cmd_cuvette_peltier HEAT |
flatcat | 0:14942e263231 | 544 | raspi.printf("%x\r\n", cmd_cuvette_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 545 | cuvettePeltA = 0; // set PWM A to 0.5 |
flatcat | 0:14942e263231 | 546 | cuvettePeltB = 0.5; // set PWM B to zero |
flatcat | 0:14942e263231 | 547 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 548 | break; |
flatcat | 0:14942e263231 | 549 | default: |
flatcat | 0:14942e263231 | 550 | break; |
flatcat | 0:14942e263231 | 551 | } |
flatcat | 0:14942e263231 | 552 | continue; |
flatcat | 0:14942e263231 | 553 | default: |
flatcat | 0:14942e263231 | 554 | break; |
flatcat | 0:14942e263231 | 555 | } |
flatcat | 0:14942e263231 | 556 | case cmd_ccd_peltier: |
flatcat | 0:14942e263231 | 557 | grnLED = 1; // turn led on |
flatcat | 0:14942e263231 | 558 | raspi.printf("%x", cmd_ccd_peltier); // return cmd_ccd_peltier to raspi |
flatcat | 0:14942e263231 | 559 | switch (raspi.getc()) { // set condidition for listening to another character |
flatcat | 0:14942e263231 | 560 | case cmd_ccd_pelt_power: |
flatcat | 0:14942e263231 | 561 | switch (raspi.getc()) { // set condidition for listening to another character |
flatcat | 0:14942e263231 | 562 | case 0x00: // case for cmd_ccd_peltier OFF |
flatcat | 0:14942e263231 | 563 | raspi.printf("%x\r\n", cmd_ccd_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 564 | ccdPeltA = 0; // set PWM A to zero |
flatcat | 0:14942e263231 | 565 | ccdPeltB = 0; // set PWM B to zero |
flatcat | 0:14942e263231 | 566 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 567 | break; |
flatcat | 0:14942e263231 | 568 | case 0x01: // case for cmd_ccd_peltier COOL |
flatcat | 0:14942e263231 | 569 | raspi.printf("%x\r\n", cmd_ccd_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 570 | ccdPeltA = 0.5; // set PWM A to 0.5 |
flatcat | 0:14942e263231 | 571 | ccdPeltB = 0; // set PWM B to zero |
flatcat | 0:14942e263231 | 572 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 573 | break; |
flatcat | 0:14942e263231 | 574 | case 0x02: // case for cmd_ccd_peltier HEAT |
flatcat | 0:14942e263231 | 575 | raspi.printf("%x\r\n", cmd_ccd_pelt_power); // return filter_select to raspi |
flatcat | 0:14942e263231 | 576 | ccdPeltA = 0; // set PWM A to 0.5 |
flatcat | 0:14942e263231 | 577 | ccdPeltB = 0.5; // set PWM B to zero |
flatcat | 0:14942e263231 | 578 | grnLED = 0; // turn led off |
flatcat | 0:14942e263231 | 579 | break; |
flatcat | 0:14942e263231 | 580 | default: |
flatcat | 0:14942e263231 | 581 | break; |
flatcat | 0:14942e263231 | 582 | } |
flatcat | 0:14942e263231 | 583 | continue; |
flatcat | 0:14942e263231 | 584 | default: |
flatcat | 0:14942e263231 | 585 | break; |
flatcat | 0:14942e263231 | 586 | } case packet_end: // case for packed_end |
flatcat | 0:14942e263231 | 587 | packetFlag = 0; // set the packetFlag to 0 |
flatcat | 0:14942e263231 | 588 | break; // break from loop |
flatcat | 0:14942e263231 | 589 | default: // default if nothing matches |
flatcat | 0:14942e263231 | 590 | break; // break from loop |
flatcat | 0:14942e263231 | 591 | } |
flatcat | 0:14942e263231 | 592 | } |
flatcat | 0:14942e263231 | 593 | default: // defailt if nothing matches |
flatcat | 0:14942e263231 | 594 | break; // break from loop |
flatcat | 0:14942e263231 | 595 | } |
flatcat | 0:14942e263231 | 596 | default: // default if nothing matches |
flatcat | 0:14942e263231 | 597 | break; // break from loop |
flatcat | 0:14942e263231 | 598 | } |
flatcat | 0:14942e263231 | 599 | } |
flatcat | 0:14942e263231 | 600 | } |
flatcat | 0:14942e263231 | 601 | } |