Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: MCP23017 WattBob_TextLCD mbed
main.cpp
00001 #include "mbed.h" 00002 #include "MCP23017.h" 00003 #include <string> 00004 using namespace std; 00005 00006 DigitalOut FPGA1(p8); 00007 DigitalOut FPGA2(p9); 00008 DigitalOut FPGA3(p10); 00009 DigitalOut FPGA4(p11); 00010 00011 DigitalIn sorter_Tube(p5); 00012 DigitalIn AAA_tube(p6); 00013 InterruptIn voltage_Checker_Tube(p7); 00014 00015 Ticker AAA_checker; 00016 AnalogIn diode_bridge(p16); 00017 Serial pc(USBTX, USBRX); 00018 00019 00020 uint8_t mode; 00021 uint8_t in_Voltage_Checker; 00022 uint16_t AA_sorted; //Amount of AA sorted 00023 uint16_t AA_uncharged; //Amount of uncharged AA 00024 uint16_t AAA_sorted; //Amount of AAA sorted 00025 uint8_t servo_maintenance; 00026 float voltage; 00027 00028 void receive() 00029 { 00030 char c = pc.getc(); 00031 if(c == 'S')//Normal Mode 00032 { 00033 mode = 1; 00034 } 00035 else if(c == 'M')//Maintenance Mode 00036 { 00037 mode = 2; 00038 } 00039 else if(c == 'A' && mode == 2) 00040 { 00041 servo_maintenance = 1; 00042 } 00043 00044 else if(c == 'B' && mode == 2) 00045 { 00046 servo_maintenance = 2; 00047 00048 } 00049 00050 else if(c == 'C' && mode == 2) 00051 { 00052 servo_maintenance = 3; 00053 00054 } 00055 else if(c == 'D' && mode == 2) 00056 { 00057 servo_maintenance = 4; 00058 00059 } 00060 else if(c == 'N')//Emergency Stop 00061 { 00062 while(1){;} 00063 } 00064 else if (c == 'B')//Safe Stop 00065 { 00066 mode = 0; 00067 } 00068 } 00069 00070 void AAA_passed() 00071 { 00072 if(AAA_tube == 1) 00073 { 00074 AAA_sorted++; 00075 } 00076 } 00077 00078 void in_Checker() 00079 { 00080 in_Voltage_Checker = 1; 00081 00082 } 00083 00084 float average_analog(int no_of_averages) 00085 { 00086 int i = 0; 00087 float average = 0; 00088 for ( i = 0; i < no_of_averages; i++) 00089 { 00090 average += diode_bridge.read(); 00091 wait(0.001); // wait 1mS between reading inputs 00092 } 00093 return average/i; 00094 } 00095 00096 void update_pc() 00097 { 00098 AAA_checker.detach(); 00099 00100 string serial_out; 00101 00102 00103 char voltage_buffer[4]; 00104 sprintf(voltage_buffer, "%0.3f", voltage); 00105 00106 char AA_sorted_buffer[2]; 00107 sprintf(AA_sorted_buffer, "%d", AA_sorted); 00108 00109 00110 char AA_uncharged_buffer[2]; 00111 sprintf(AA_uncharged_buffer , "%d", AA_uncharged); 00112 00113 char AAA_sorted_buffer[2]; 00114 sprintf(AAA_sorted_buffer , "%d", AAA_sorted); 00115 00116 00117 00118 00119 if(mode == 2) 00120 { 00121 char sorter_tube_sensor = sorter_Tube.read(); 00122 char AAA_tube_sensor = AAA_tube.read(); 00123 00124 char sorter_tube_buffer[2]; 00125 sprintf(sorter_tube_buffer , "%d", sorter_tube_sensor); 00126 00127 char AAA_tube_buffer[2]; 00128 sprintf(AAA_tube_buffer , "%d", AAA_tube_sensor); 00129 00130 pc.putc('A'); 00131 pc.putc(sorter_tube_buffer[0]); 00132 pc.putc('B'); 00133 pc.putc(AAA_tube_buffer[0]); 00134 pc.putc('C'); 00135 pc.putc(in_Voltage_Checker); 00136 } 00137 00138 00139 pc.putc('W'); 00140 pc.putc(voltage_buffer[0]); 00141 pc.putc(voltage_buffer[1]); 00142 pc.putc(voltage_buffer[2]); 00143 pc.putc(voltage_buffer[3]); 00144 00145 pc.putc('X'); 00146 pc.putc(AA_sorted_buffer[0]); 00147 pc.putc(AA_sorted_buffer[1]); 00148 pc.putc('Y'); 00149 pc.putc(AA_uncharged_buffer[0]); 00150 pc.putc(AA_uncharged_buffer[1]); 00151 pc.putc('Z'); 00152 pc.putc(AAA_sorted_buffer[0]); 00153 pc.putc(AAA_sorted_buffer[1]); 00154 pc.putc(';'); 00155 pc.putc('\0'); 00156 pc.putc('\r'); 00157 pc.putc('\n'); 00158 wait(0.5); 00159 AAA_checker.attach(&AAA_passed, 0.1); 00160 } 00161 00162 00163 void voltage_checker() 00164 { 00165 AA_sorted++; 00166 in_Voltage_Checker = 0; 00167 FPGA4 = 1; 00168 wait(0.5); 00169 FPGA4 = 0; 00170 voltage = average_analog(100); 00171 00172 //pc.printf("%f\n", voltage); 00173 wait(1); 00174 if (voltage < 0.2) 00175 { 00176 AA_uncharged++; 00177 FPGA2 = 1; 00178 wait(2); 00179 FPGA2 = 0; 00180 } 00181 else 00182 { 00183 FPGA3 = 1; 00184 wait(2); 00185 FPGA3 = 0; 00186 } 00187 } 00188 int main() { 00189 pc.attach(&receive); //Attach PC receive interrupt 00190 voltage_Checker_Tube.rise(&in_Checker); 00191 AAA_checker.attach(&AAA_passed, 0.1); 00192 while(1) { 00193 if(mode == 1) 00194 { 00195 if(sorter_Tube == 1) 00196 { 00197 FPGA1 = 1; 00198 wait(1); 00199 FPGA1 = 0; 00200 wait(3); 00201 00202 if(in_Voltage_Checker == 1) 00203 { 00204 voltage_checker(); 00205 update_pc(); 00206 } 00207 00208 } 00209 } 00210 else if(mode == 2) 00211 { 00212 00213 00214 switch(servo_maintenance) 00215 { 00216 case 1: 00217 FPGA1 = 1; 00218 wait(1); 00219 FPGA1 = 0; 00220 break; 00221 00222 case 2: 00223 FPGA2 = 1; 00224 wait(2); 00225 FPGA2 = 0; 00226 break; 00227 00228 case 3: 00229 FPGA3 = 1; 00230 wait(2); 00231 FPGA3 = 0; 00232 break; 00233 00234 case 4: 00235 FPGA4 = 1; 00236 wait(1); 00237 FPGA4 = 0; 00238 wait(0.5); 00239 voltage_checker(); 00240 break; 00241 } 00242 update_pc(); 00243 servo_maintenance = 0; 00244 wait(4); 00245 } 00246 } 00247 00248 }
Generated on Wed Jul 27 2022 09:52:17 by
1.7.2