Nicolas Borla / Mbed 2 deprecated PES2_mbed

Dependencies:   Stepper mbed Servo LSM9DS1_Library SDFileSystem

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "LSM9DS1.h"
00003 #include "Servo.h"
00004 #include "EncoderCounter.h"
00005 #include "Stepper.h"
00006 #include "SDFileSystem.h"
00007 
00008 DigitalOut myled(LED1);
00009 
00010 // create object IMU
00011 LSM9DS1 imu(PC_9, PA_8, 0xD6, 0x3C);
00012 
00013 // create servo objects
00014 Servo  S0(PB_2);
00015 Servo  S1(PC_8);
00016 Servo  S2(PC_6);
00017 
00018 DigitalOut enable(PB_15);
00019 
00020 // initialise PWM
00021 PwmOut pwm_motor1(PB_13);
00022 PwmOut pwm_motor2(PA_9);
00023 PwmOut pwm_motor3(PA_10);
00024 
00025 // crete Encoder read objects
00026 EncoderCounter counter1(PA_6, PC_7); // counter(pin A, pin B)
00027 EncoderCounter counter2(PB_6, PB_7);
00028 EncoderCounter counter3(PA_0, PA_1);
00029 
00030 // initialise PWM
00031 Stepper stepperMotor(PB_14,PC_4); // step, dir
00032 Stepper stepperMotor2(PB_12,PA_15); // config 2
00033 
00034 DigitalIn user_button(USER_BUTTON);
00035 
00036 SDFileSystem sd(PC_12, PC_11, PC_10, PD_2, "sd"); // mosi miso clk cs
00037 AnalogIn   ain(PC_2);
00038 DigitalOut   enableStepper(PB_1);
00039 
00040 // define write function
00041 void sdWrite(float a){
00042     printf("start write SD\r\n");   
00043     
00044     FILE *fp = fopen("/sd/mydir/sdtest.txt", "a");
00045     if(fp == NULL) {
00046         error("Could not open file for write\r\n");
00047     }
00048     fprintf(fp, "analog measure %f\r\n",a);
00049     fclose(fp); 
00050  
00051     printf("write succesfull\r\n\n");
00052 }
00053 
00054 int main() {
00055     // test comunication
00056     imu.begin();
00057     if (!imu.begin()) {
00058         printf("Failed to communicate with LSM9DS1.\r\n");
00059     }
00060     
00061     // initialise and test Servo
00062     S0.Enable(1000,20000);
00063     S1.Enable(1000,20000);
00064     S2.Enable(1000,20000);
00065     
00066     // initialise PWM
00067     pwm_motor1.period(0.0005f);// 0.5ms 2KHz
00068     pwm_motor1.write(0.5f);
00069     pwm_motor2.period(0.0005f);// 0.5ms 2KHz
00070     pwm_motor2.write(0.5f);
00071     pwm_motor3.period(0.0005f);// 0.5ms 2KHz
00072     pwm_motor3.write(0.5f);
00073     
00074     // initialise stepper
00075     stepperMotor.setSpeed(10000);
00076     stepperMotor.rotate(stepperMotor.CW);
00077     stepperMotor.stop();
00078     stepperMotor.setPositionZero();
00079     
00080     stepperMotor2.setSpeed(10000);
00081     stepperMotor2.rotate(stepperMotor.CW);
00082     stepperMotor2.stop();
00083     stepperMotor2.setPositionZero();
00084     
00085     int i = 0;
00086     
00087     bool buttonNow = false;
00088     bool buttonBefore = false;
00089     bool done = false;
00090     
00091     enableStepper = 1;
00092     
00093     
00094     while(1) {
00095         
00096         
00097         buttonNow = !user_button;
00098         
00099         if(buttonNow && !buttonBefore){i+=1; done = false;}
00100         if(i>7){i=0;}
00101         
00102         switch (i){
00103             case 1:
00104             // ===================
00105             // IMU
00106             // ===================
00107             if(!done){
00108                 printf("\r\n\r\n======================\r\nIMU test\r\n======================\r\n\r\n");
00109                 for(int i=0; i<5; i++){
00110                     // do a measure
00111                     imu.readAccel();
00112                     imu.readMag();
00113                     imu.readGyro();
00114                     
00115                     // print values to console       
00116                     printf("gyro: %.5f %.5f %.5f [rad/s]\r\n", imu.gyroX,imu.gyroY,imu.gyroZ);
00117                     printf("accel: %.5f %.5f %.5f [m/s^2]\r\n", imu.accX,imu.accY,imu.accZ);
00118                     printf("mag: %.5f %.5f %.5f [Gauss]\r\n\n", imu.magX,imu.magY,imu.magZ);
00119                     wait(0.5f);   
00120                 }
00121                 done = true;
00122                 break;
00123             } else {
00124                 break;
00125                 }
00126             
00127             case 2:
00128             // ===================
00129             // Servo
00130             // ===================
00131             if(!done){
00132                 printf("\r\n\r\n======================\r\nServo test\r\n======================\r\n\r\n");
00133                 for(int j=0; j<2000; j+=50){
00134                       printf("position %d\r\n",j);
00135                     S0.SetPosition(j);
00136                     S1.SetPosition(j);
00137                     S2.SetPosition(j);
00138                     
00139                     wait(0.1f);
00140                 }
00141                 done = true;
00142                 break;
00143             } else {
00144                 break;
00145             }
00146             
00147             case 3:
00148             // ===================
00149             // DC - Motor1
00150             // ===================
00151             if(!done){
00152                 printf("\r\n\r\n======================\r\nDC - Motor1 test\r\n======================\r\n\r\n");
00153                 enable = 1;
00154                 for(int j=0; j<20; j+=1){
00155                     pwm_motor1.write(0.7f);
00156                     pwm_motor2.write(0.7f);
00157                     pwm_motor3.write(0.7f);
00158                     // display encoder values to console
00159                     printf("counter1 = %d counter2 = %d counter3 = %d\r\n",counter1.read(), counter2.read(), counter3.read());
00160                     wait(0.1f);
00161                 }
00162                 enable = 0;
00163                 done = true;
00164                 break;
00165             } else {
00166                 break;
00167             }
00168             
00169             case 4:
00170             // ===================
00171             // DC - Motor2
00172             // ===================
00173             if(!done){
00174                 printf("\r\n\r\n======================\r\nDC - Motor2 test\r\n======================\r\n\r\n");
00175                 enable = 1;
00176                 for(int j=0; j<20; j+=1){
00177                     pwm_motor1.write(0.7f);
00178                     pwm_motor2.write(0.7f);
00179                     pwm_motor3.write(0.7f);
00180                     // display encoder values to console
00181                     printf("counter1 = %d counter2 = %d counter3 = %d\r\n",counter1.read(), counter2.read(), counter3.read());
00182                     wait(0.1f);
00183                 }
00184                 enable = 0;
00185                 done = true;
00186                 break;
00187             } else {
00188                 break;
00189             }
00190             
00191             case 5:
00192             // ===================
00193             // DC - Motor3
00194             // ===================
00195             if(!done){
00196                 printf("\r\n\r\n======================\r\nDC - Motor3 test\r\n======================\r\n\r\n");
00197                 enable = 1;
00198                 for(int j=0; j<20; j+=1){
00199                     pwm_motor1.write(0.7f);
00200                     pwm_motor2.write(0.7f);
00201                     pwm_motor3.write(0.7f);
00202                     // display encoder values to console
00203                     printf("counter1 = %d counter2 = %d counter3 = %d\r\n",counter1.read(), counter2.read(), counter3.read());
00204                     wait(0.1f);
00205                 }
00206                 enable = 0;
00207                 done = true;
00208                 break;
00209             } else {
00210                 break;
00211             }
00212             
00213             case 6:
00214             // ===================
00215             // Stepper
00216             // ===================
00217             if(!done){
00218                 printf("\r\n\r\n======================\r\nStepper test\r\n======================\r\n\r\n");
00219                     // test stepper motor
00220                     enableStepper = 0;
00221                     wait(0.5f);
00222                     printf("stepper enabled\r\n");
00223                     stepperMotor.goesTo(20*2048);
00224                     stepperMotor2.goesTo(20*2048);
00225                     wait(3.0f);
00226                     stepperMotor.stop();
00227                     stepperMotor2.stop();
00228                     stepperMotor.setPositionZero();
00229                     stepperMotor2.setPositionZero();
00230                     enableStepper = 1;
00231                     printf("stepper done\r\n");
00232                 done = true;
00233                 break;
00234             } else {
00235                 break;
00236             }
00237             
00238             case 7:
00239             // ===================
00240             // SD
00241             // ===================
00242             if(!done){
00243                 printf("\r\n\r\n======================\r\nSD test\r\n======================\r\n\r\n");
00244                     
00245                     // crearte folder
00246                     mkdir("/sd/mydir", 0777);
00247                     
00248                     // create file
00249                     printf("start write SD\r\n");   
00250                     FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
00251                     if(fp == NULL) {
00252                         error("Could not open file for write\r\n");
00253                     }
00254                     fprintf(fp, "analog measure\r\n");
00255                     fprintf(fp, "==============\r\n");
00256                     fclose(fp);
00257                     
00258                     // write 2 times an analog value
00259                     for(int i=0; i<2; i++){
00260                         sdWrite(ain.read());
00261                         wait(2.0f);
00262                     }
00263                     // read from SD card
00264                     printf("Reading from SD card...");
00265                     fp = fopen("/sd/mydir/sdtest.txt", "r");
00266                     if (fp != NULL) {
00267                         char c = fgetc(fp);
00268                         if (c == 'a')
00269                             printf("success!\n");
00270                         else
00271                             printf("incorrect char (%c)!\n", c);
00272                         fclose(fp);
00273                     } else {
00274                         printf("failed!\n");
00275                     }
00276                     
00277                 done = true;
00278                 break;
00279             } else {
00280                 break;
00281             }
00282             
00283             
00284             default:
00285             printf("\r\n\r\n======================\r\nPause\r\n======================\r\n\r\n");
00286             break;
00287         }
00288 
00289         
00290         myled = 1;
00291         
00292         wait(0.1); // 0.5s
00293         
00294         myled = 0;
00295     }
00296 }