TDP3 Go-Yeti / Mbed 2 deprecated DontKillMbed

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 //Pull everything up
00004 DigitalOut pull1(PTA1);
00005 DigitalOut pull2(PTA2);
00006 //DigitalOut pull4(PTA12);
00007 //DigitalOut pull5(PTA4);
00008 DigitalOut pull6(PTA5);
00009 //DigitalOut pull7(PTC8);
00010 
00011 DigitalOut pull9(PTA13);
00012 DigitalOut pull10(PTD5);
00013 DigitalOut pull11(PTD0);
00014 DigitalOut pull12(PTD2);
00015 DigitalOut pull13(PTD3);
00016 DigitalOut pull14(PTD1);
00017 DigitalOut pull15(PTE0);
00018 DigitalOut pull16(PTE1);
00019 
00020 //DigitalOut pull17(PTC7);
00021 //DigitalOut pull18(PTC0);
00022 //DigitalOut pull19(PTC3);
00023 DigitalOut pull20(PTC4);
00024 
00025 DigitalOut pull21(PTC12);
00026 DigitalOut pull22(PTC13);
00027 DigitalOut pull23(PTC16);
00028 DigitalOut pull24(PTC17);
00029 DigitalOut pull25(PTA16);
00030 DigitalOut pull26(PTA17);
00031 DigitalOut pull27(PTE31);
00032 DigitalOut pull28(PTD6);
00033 DigitalOut pull29(PTD7);
00034 
00035 //DigitalOut pull30(PTE30);
00036 
00037 //DigitalOut pull38(PTE3);
00038 //DigitalOut pull39(PTE2);
00039 //DigitalOut pull50(PTB11);
00040 //DigitalOut pull51(PTB10);
00041 //DigitalOut pull52(PTB9);
00042 //DigitalOut pull53(PTB8);
00043 
00044 //DigitalOut pull34(PTE21);
00045 //DigitalOut pull35(PTE20);
00046 //DigitalOut pull47(PTB1);
00047 //DigitalOut pull48(PTB0);
00048 DigitalOut pull100(PTA20);
00049 
00050 //motor driver outputs
00051 DigitalOut IN4(PTC5);
00052 DigitalOut IN3(PTC6);
00053 DigitalOut IN2(PTC10);
00054 DigitalOut IN1(PTC11);
00055 PwmOut ENA(PTC9);
00056 PwmOut ENB(PTD4);
00057 
00058 DigitalOut indicator(LED_GREEN);
00059 
00060 //constant 3.3 volts for sensors
00061 DigitalOut constant1(PTE5);
00062 DigitalOut constant2(PTE4);
00063 DigitalOut constant3(PTE3);
00064 DigitalOut constant4(PTC0);
00065 DigitalOut constant5(PTC7);
00066 DigitalOut constant6 (PTC3);
00067 
00068 //line following inputs
00069 AnalogIn leftmost(PTB0); 
00070 AnalogIn left(PTC2);
00071 AnalogIn middle(PTB3); 
00072 AnalogIn right(PTB2);
00073 AnalogIn rightmost(PTB1);
00074 
00075 DigitalIn back(PTB10);
00076 DigitalIn midbar(PTB11);
00077 DigitalIn front(PTE2);
00078 
00079 //debugging led outputs
00080 DigitalOut ledleftmost(PTE20);
00081 DigitalOut ledright(PTE23);
00082 DigitalOut ledmiddle(PTE22);
00083 DigitalOut ledleft(PTE29);
00084 DigitalOut ledrightmost(PTE21);
00085 
00086 DigitalOut ledback(PTC4);
00087 DigitalOut ledmidbar(PTB8);
00088 DigitalOut ledfront(PTB9);
00089 
00090 //ball firing
00091 PwmOut motors(PTA12);
00092 DigitalOut solenoid(PTA4);
00093 
00094 //Ball dispensing
00095 PwmOut dispenser(PTC8);
00096 //Old
00097 /*Ticker sine_interrupt;
00098 AnalogOut Aout(PTE30);
00099 double interrupt_f = .00001525878;                  //  (1/2048*32)  
00100 static int sine_wave_steps = 32;                    // number of steps in sine wave
00101 int sine_counter = 0;
00102 static float sine_val[] = {.5,.5976,.6914,.7773,.8535,.9160,.9619,.9902,1,.9902,.9619,.9160,.8535,.7773,.6914,.5976,.5,.4023,.3085,.2226,.1464,.0839,.0380,.0097,0,.0097,.0380,.0839,.1464,.2226,.3085,.4023};
00103 
00104 
00105 void create_sine() {                                //subroutine for interrupt, creates sine wave
00106     sine_counter = sine_counter + 1;                //run through sine array
00107     if (sine_counter >= sine_wave_steps){
00108            sine_counter = 0;                            //repeat sine wave
00109     }
00110     Aout = sine_val[sine_counter];                  //output decimal 0-1 on DAC
00111 }*/
00112 
00113 
00114 int main() {
00115     
00116     
00117     pull100=0;
00118     pull1=0;
00119     pull2=0;
00120     //pull3.mode(PullUp);
00121     //pull4=0;
00122     //pull5=0;
00123     pull6=0;
00124     //pull7=0;
00125     //pull8.mode(PullUp);
00126     pull9=0;
00127     pull10=0;
00128     pull11=0;
00129     pull12=0;
00130     pull13=0;
00131     pull14=0;
00132     pull15=0;
00133     pull16=0;
00134     //pull17=0;
00135     //pull18=0;
00136     //pull19=0;
00137     pull20=0;
00138     pull21=0;
00139     pull22=0;
00140     pull23=0;
00141     pull24=0;
00142     pull25=0;
00143     pull26=0;
00144     pull27=0;
00145     pull28=0;
00146     pull29=0;
00147     //pull30=0;
00148     //pull34=0;
00149     //pull35=0;
00150     //pull38=0;
00151     //pull39=0;
00152     //pull47=0;
00153     //pull48=0;
00154     //pull49=0;
00155     //pull50=0;
00156     //pull51=0;
00157     //pull52=0;
00158     //pull53=0;
00159     
00160 
00161    
00162     
00163     motors.period(3.0);
00164     motors.write(0);
00165     solenoid=0;
00166     
00167     constant1=1;
00168     constant2=1;
00169     constant3=1;
00170     constant4=1;
00171     constant5=1;
00172     constant6=1;
00173         
00174     indicator=1;
00175     wait(0.3);
00176     indicator=0;
00177     wait(0.3);
00178     indicator=1;
00179     wait(0.3);
00180     indicator=0;
00181     
00182     //define pwn freq for dispenser
00183     dispenser.period(1/2048);
00184     
00185             
00186     dispenser=0.5;
00187     
00188     ENA.period(0.001);
00189     ENB.period(0.001);
00190     
00191     IN1=0;
00192     IN2=1;
00193     IN3=0;
00194     IN4=1;   
00195     //set inital pwm values for motor driver outputs        
00196     ENA=0;
00197     ENB=0;
00198     //You´ll never be the real slim shady 
00199     int counter=0;
00200     int zonecounter=0;
00201     
00202     //sine_interrupt.attach(&create_sine , interrupt_f); 
00203     
00204     while(1) {
00205        
00206         //sine_interrupt.attach(&create_sine , interrupt_f);
00207         //sine_interrupt.detach();
00208 
00209        
00210         counter=counter+1;
00211         zonecounter=zonecounter+1;
00212        
00213         if(middle<0.4 & left<0.4 & right<0.4 & leftmost<0.4 & rightmost<0.4){   
00214             //skip the loop 
00215             ledmiddle=0;  
00216             ledleft=0;
00217             ledright=0;
00218             ledleftmost=0;  
00219             ledrightmost=0; 
00220         }else{
00221          
00222             if(front==1){
00223                 ledfront=1;
00224             }else{
00225                 ledfront=0;    
00226             }
00227             
00228             if(midbar==1){
00229                 ledmidbar=1;
00230             }else{
00231                 ledmidbar=0;    
00232             }
00233             
00234             if(back==1){
00235                 ledback=1;
00236             }else{
00237                 ledback=0;    
00238             }
00239             
00240             if(back==1 and counter>70){
00241                 counter=0;
00242                 ENB=0; 
00243                 ENA=0;
00244                 if(front==0 and midbar==1 ){
00245                     //shoot balls
00246                     motors=0.095;
00247                     wait_ms(550);
00248                     solenoid=1;
00249                     wait_ms(45);
00250                     solenoid=0;   
00251                     wait(3);  
00252                     motors=0;               
00253                 }else if( front==1 and midbar==0){
00254                     //dispense balls 
00255                     //int loops=0;
00256                     //sine_interrupt.attach(&create_sine , interrupt_f); // function called by interrupt, frequency of interrupts 
00257                     /*while(loops<500000){
00258                         loops=loops+1;
00259                     }             
00260                     indicator=0;      
00261                     sine_interrupt.detach();   */ 
00262                     wait(5);                         
00263                 }
00264                   
00265                 //sine_interrupt.detach();              
00266             }
00267             
00268             
00269          
00270             if(middle>0.4){
00271                 ledmiddle=1; 
00272                 ENA=0.36;
00273                 ENB=0.36;   
00274             }else{
00275                 ledmiddle=0; 
00276                 ENA=0.36;
00277                 ENB=0.36;   
00278             } 
00279             
00280             if(left>0.4){  
00281                 ledleft=1;
00282                 indicator=1;
00283                 ENA=0.28; 
00284             }else{
00285                 ledleft=0;  
00286             }
00287         
00288             if(right>0.4){  
00289                 ledright=1; 
00290                 ENB=0.28;
00291             }else{
00292                 ledright=0;  
00293             }
00294             
00295             if(leftmost>0.4){   
00296                 ledleftmost=1;
00297                 ENA=0;
00298             }else{
00299                 ledleftmost=0;   
00300             }
00301         
00302             if(rightmost>0.4){   
00303                 ledrightmost=1;
00304                 ENB=0;
00305             }else{
00306                 ledrightmost=0;   
00307             }   
00308             
00309             
00310             if((left>0.4 or leftmost>0.4)and(right>0.4 or rightmost>0.4)){
00311                 ENB=0.4; 
00312                 ENA=0;
00313                 wait(2);      
00314             }
00315             
00316             if(ledfront==1){
00317                 zonecounter=0;    
00318             }
00319             
00320             if(zonecounter<30){
00321                 
00322                 if(ENB>0.35){
00323                     ENB=0.35;    
00324                 }
00325                 
00326                 if(ENA>0.35){
00327                     ENA=0.35;    
00328                 }    
00329                 
00330                 indicator=1;
00331             }else{
00332                 indicator=0;    
00333             }
00334             
00335         }
00336            
00337         wait(0.1);
00338        
00339        
00340     }
00341 }