Mark Campbell / Mbed 2 deprecated Final_V1

Dependencies:   MCP23017 WattBob_TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }