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: mbed
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 }
Generated on Mon Jan 16 2023 04:00:20 by
1.7.2