~
Dependencies: 4DGL-uLCD-SE SDFileSystem
main.cpp@12:a2908fdf3b66, 2016-09-26 (annotated)
- Committer:
- kswanson31
- Date:
- Mon Sep 26 20:17:45 2016 +0000
- Revision:
- 12:a2908fdf3b66
- Parent:
- 11:eca6295235e6
- Child:
- 13:c14dc22c38ba
code for part 6, dc motor control with driver
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fkhan39 | 0:570683b2d0c9 | 1 | #include "mbed.h" |
fkhan39 | 6:708e878d4374 | 2 | #include "uLCD_4DGL.h" |
kswanson31 | 12:a2908fdf3b66 | 3 | //#include "LSM9DS1.h" |
fkhan39 | 7:1a21d8290cf1 | 4 | #include "math.h" |
fkhan39 | 7:1a21d8290cf1 | 5 | //#include "SongPlayer.h" |
fkhan39 | 7:1a21d8290cf1 | 6 | #include <fstream> |
fkhan39 | 7:1a21d8290cf1 | 7 | #include <string> |
fkhan39 | 7:1a21d8290cf1 | 8 | #include "SDFileSystem.h" |
fkhan39 | 0:570683b2d0c9 | 9 | |
fkhan39 | 7:1a21d8290cf1 | 10 | |
fkhan39 | 9:63c3c734a620 | 11 | /* serial |
kswanson31 | 5:151b0fa1fb44 | 12 | Serial pc(USBTX, USBRX); |
fkhan39 | 7:1a21d8290cf1 | 13 | */ |
fkhan39 | 7:1a21d8290cf1 | 14 | |
fkhan39 | 9:63c3c734a620 | 15 | /* PART 1 |
kswanson31 | 5:151b0fa1fb44 | 16 | AnalogOut aout(p18); |
kswanson31 | 5:151b0fa1fb44 | 17 | AnalogIn ain(p15); |
kswanson31 | 5:151b0fa1fb44 | 18 | DigitalOut led1(LED1); |
kswanson31 | 5:151b0fa1fb44 | 19 | DigitalOut led2(LED2); |
kswanson31 | 5:151b0fa1fb44 | 20 | DigitalOut led3(LED3); |
kswanson31 | 5:151b0fa1fb44 | 21 | DigitalOut led4(LED4); |
kswanson31 | 5:151b0fa1fb44 | 22 | */ |
kswanson31 | 5:151b0fa1fb44 | 23 | |
kswanson31 | 12:a2908fdf3b66 | 24 | /* PART 3 |
fkhan39 | 11:eca6295235e6 | 25 | |
fkhan39 | 11:eca6295235e6 | 26 | Serial pc(p13, p14); // TX, RX |
kswanson31 | 12:a2908fdf3b66 | 27 | */ |
fkhan39 | 9:63c3c734a620 | 28 | |
fkhan39 | 9:63c3c734a620 | 29 | /* PART 8 |
fkhan39 | 4:f5bc5d9a790b | 30 | BusOut myleds(LED1,LED2,LED3,LED4); |
kswanson31 | 5:151b0fa1fb44 | 31 | |
fkhan39 | 4:f5bc5d9a790b | 32 | class microphone |
fkhan39 | 4:f5bc5d9a790b | 33 | { |
fkhan39 | 4:f5bc5d9a790b | 34 | public : |
fkhan39 | 4:f5bc5d9a790b | 35 | microphone(PinName pin); |
fkhan39 | 4:f5bc5d9a790b | 36 | float read(); |
fkhan39 | 4:f5bc5d9a790b | 37 | operator float (); |
fkhan39 | 4:f5bc5d9a790b | 38 | private : |
fkhan39 | 4:f5bc5d9a790b | 39 | AnalogIn _pin; |
fkhan39 | 4:f5bc5d9a790b | 40 | }; |
fkhan39 | 4:f5bc5d9a790b | 41 | microphone::microphone (PinName pin): |
fkhan39 | 4:f5bc5d9a790b | 42 | _pin(pin) |
fkhan39 | 4:f5bc5d9a790b | 43 | { |
fkhan39 | 4:f5bc5d9a790b | 44 | } |
fkhan39 | 4:f5bc5d9a790b | 45 | float microphone::read() |
fkhan39 | 4:f5bc5d9a790b | 46 | { |
fkhan39 | 4:f5bc5d9a790b | 47 | return _pin.read(); |
fkhan39 | 4:f5bc5d9a790b | 48 | } |
fkhan39 | 4:f5bc5d9a790b | 49 | inline microphone::operator float () |
fkhan39 | 4:f5bc5d9a790b | 50 | { |
fkhan39 | 4:f5bc5d9a790b | 51 | return _pin.read(); |
fkhan39 | 4:f5bc5d9a790b | 52 | } |
fkhan39 | 4:f5bc5d9a790b | 53 | |
fkhan39 | 4:f5bc5d9a790b | 54 | microphone mymicrophone(p16); |
kswanson31 | 5:151b0fa1fb44 | 55 | */ |
fkhan39 | 0:570683b2d0c9 | 56 | |
fkhan39 | 9:63c3c734a620 | 57 | /* PART 4 |
fkhan39 | 9:63c3c734a620 | 58 | uLCD_4DGL lcd(p13,p14,p12); |
fkhan39 | 9:63c3c734a620 | 59 | int ax, ay; |
fkhan39 | 9:63c3c734a620 | 60 | */ |
fkhan39 | 11:eca6295235e6 | 61 | |
kswanson31 | 12:a2908fdf3b66 | 62 | /* PART 6 |
kswanson31 | 12:a2908fdf3b66 | 63 | DigitalOut myled(LED1); |
kswanson31 | 12:a2908fdf3b66 | 64 | //DigitalOut Ctrl(p25); // comment this out for digital, comment below |
kswanson31 | 12:a2908fdf3b66 | 65 | PwmOut Ctrl(p25); |
kswanson31 | 12:a2908fdf3b66 | 66 | */ |
kswanson31 | 12:a2908fdf3b66 | 67 | |
fkhan39 | 11:eca6295235e6 | 68 | /*PART 9, SD CARD |
fkhan39 | 9:63c3c734a620 | 69 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
fkhan39 | 9:63c3c734a620 | 70 | */ |
fkhan39 | 11:eca6295235e6 | 71 | |
fkhan39 | 9:63c3c734a620 | 72 | /* PART 9B, SOUND |
fkhan39 | 9:63c3c734a620 | 73 | float note[16]= {329.628,329.628,329.628,349.228,391.995,391.995,391.995,349.228, |
fkhan39 | 9:63c3c734a620 | 74 | 329.628,349.228,391.995,349.228,329.628,293.665,329.628,349.228 |
fkhan39 | 9:63c3c734a620 | 75 | }; |
fkhan39 | 9:63c3c734a620 | 76 | float duration[16]= {0.48,0.12,0.48,0.12,0.48,0.12,0.12,0.12, |
fkhan39 | 9:63c3c734a620 | 77 | 0.12,0.12,0.12,0.12,0.48,0.12,1.68,0.12 |
fkhan39 | 9:63c3c734a620 | 78 | }; |
fkhan39 | 9:63c3c734a620 | 79 | */ |
fkhan39 | 9:63c3c734a620 | 80 | |
fkhan39 | 9:63c3c734a620 | 81 | |
fkhan39 | 9:63c3c734a620 | 82 | int main() { |
fkhan39 | 9:63c3c734a620 | 83 | |
fkhan39 | 9:63c3c734a620 | 84 | /* PART 1 |
fkhan39 | 1:4ed94566512a | 85 | const double pi = 3.141592653589793238462; |
fkhan39 | 1:4ed94566512a | 86 | const double amplitude = 1.0f; |
fkhan39 | 1:4ed94566512a | 87 | const double offset = 65535/2; // 0xFFFF/2 |
fkhan39 | 1:4ed94566512a | 88 | double rads = 0.0; |
fkhan39 | 1:4ed94566512a | 89 | uint16_t sample = 0; |
kswanson31 | 5:151b0fa1fb44 | 90 | */ |
fkhan39 | 9:63c3c734a620 | 91 | |
kswanson31 | 12:a2908fdf3b66 | 92 | /* PART 4, BUBBLE, PART 3 |
fkhan39 | 9:63c3c734a620 | 93 | LSM9DS1 imu(p9, p10, 0xD6, 0x3C); |
fkhan39 | 9:63c3c734a620 | 94 | imu.begin(); |
fkhan39 | 9:63c3c734a620 | 95 | if (!imu.begin()) { |
fkhan39 | 11:eca6295235e6 | 96 | pc.printf("Failed to communicate with imu9DS1.\n"); |
fkhan39 | 9:63c3c734a620 | 97 | } |
fkhan39 | 9:63c3c734a620 | 98 | imu.calibrate(); |
kswanson31 | 12:a2908fdf3b66 | 99 | */ |
fkhan39 | 11:eca6295235e6 | 100 | |
fkhan39 | 9:63c3c734a620 | 101 | |
fkhan39 | 9:63c3c734a620 | 102 | /* PART 9, SD CARD |
fkhan39 | 9:63c3c734a620 | 103 | mkdir("/sd/mydir", 0777); |
fkhan39 | 9:63c3c734a620 | 104 | FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); |
fkhan39 | 9:63c3c734a620 | 105 | if(fp == NULL) { |
fkhan39 | 9:63c3c734a620 | 106 | error("Could not open file for write\n"); |
fkhan39 | 9:63c3c734a620 | 107 | } |
fkhan39 | 9:63c3c734a620 | 108 | fprintf(fp, "Hello SD file World!"); |
fkhan39 | 9:63c3c734a620 | 109 | fclose(fp); |
fkhan39 | 9:63c3c734a620 | 110 | |
fkhan39 | 9:63c3c734a620 | 111 | std::ifstream file("/sd/mydir/sdtest.txt"); |
fkhan39 | 9:63c3c734a620 | 112 | string str; |
fkhan39 | 9:63c3c734a620 | 113 | |
fkhan39 | 9:63c3c734a620 | 114 | while (std::getline(file, str)) |
fkhan39 | 9:63c3c734a620 | 115 | { |
fkhan39 | 9:63c3c734a620 | 116 | const char * c = str.c_str(); |
fkhan39 | 9:63c3c734a620 | 117 | pc.printf(c); |
fkhan39 | 9:63c3c734a620 | 118 | } |
fkhan39 | 9:63c3c734a620 | 119 | */ |
fkhan39 | 9:63c3c734a620 | 120 | |
fkhan39 | 9:63c3c734a620 | 121 | /* PART 9, SPEAKER |
fkhan39 | 9:63c3c734a620 | 122 | // setup instance of new SongPlayer class, mySpeaker using pin 26 |
fkhan39 | 9:63c3c734a620 | 123 | // the pin must be a PWM output pin |
fkhan39 | 9:63c3c734a620 | 124 | SongPlayer mySpeaker(p26); |
fkhan39 | 9:63c3c734a620 | 125 | // Start song and return once playing starts |
fkhan39 | 9:63c3c734a620 | 126 | mySpeaker.PlaySong(note,duration); |
fkhan39 | 9:63c3c734a620 | 127 | double theta; |
fkhan39 | 9:63c3c734a620 | 128 | */ |
fkhan39 | 9:63c3c734a620 | 129 | |
fkhan39 | 9:63c3c734a620 | 130 | while (1) { |
fkhan39 | 9:63c3c734a620 | 131 | |
fkhan39 | 9:63c3c734a620 | 132 | /* PART 1 |
fkhan39 | 9:63c3c734a620 | 133 | |
fkhan39 | 9:63c3c734a620 | 134 | // analog out |
fkhan39 | 9:63c3c734a620 | 135 | for (int i = 0; i < 720; i++) { |
fkhan39 | 9:63c3c734a620 | 136 | rads = (pi * i) / 180.0f; |
fkhan39 | 9:63c3c734a620 | 137 | sample = (uint16_t)(amplitude * (offset * (cos(rads + pi))) + offset); |
fkhan39 | 9:63c3c734a620 | 138 | aout.write_u16(sample); |
fkhan39 | 9:63c3c734a620 | 139 | } |
fkhan39 | 9:63c3c734a620 | 140 | |
fkhan39 | 9:63c3c734a620 | 141 | // analog in |
fkhan39 | 9:63c3c734a620 | 142 | led1 = (ain > 0.2f) ? 1 : 0; |
fkhan39 | 9:63c3c734a620 | 143 | led2 = (ain > 0.4f) ? 1 : 0; |
fkhan39 | 9:63c3c734a620 | 144 | led3 = (ain > 0.6f) ? 1 : 0; |
fkhan39 | 9:63c3c734a620 | 145 | led4 = (ain > 0.8f) ? 1 : 0; |
fkhan39 | 9:63c3c734a620 | 146 | wait(.01); |
fkhan39 | 9:63c3c734a620 | 147 | */ |
fkhan39 | 9:63c3c734a620 | 148 | |
fkhan39 | 9:63c3c734a620 | 149 | /* PART 8 |
fkhan39 | 9:63c3c734a620 | 150 | //read in, subtract 0.67 DC bias, take absolute value, and scale up .1Vpp to 15 for builtin LED display |
fkhan39 | 9:63c3c734a620 | 151 | myleds = int(abs((mymicrophone - (0.67/3.3)))*500.0); |
fkhan39 | 9:63c3c734a620 | 152 | //Use an 8kHz audio sample rate (phone quality audio); |
fkhan39 | 9:63c3c734a620 | 153 | wait(1.0/8000.0); |
fkhan39 | 9:63c3c734a620 | 154 | */ |
fkhan39 | 9:63c3c734a620 | 155 | |
kswanson31 | 12:a2908fdf3b66 | 156 | /* PART 3 |
fkhan39 | 11:eca6295235e6 | 157 | |
fkhan39 | 11:eca6295235e6 | 158 | |
fkhan39 | 11:eca6295235e6 | 159 | imu.readAccel(); |
fkhan39 | 11:eca6295235e6 | 160 | imu.readMag(); |
fkhan39 | 11:eca6295235e6 | 161 | imu.readGyro(); |
fkhan39 | 11:eca6295235e6 | 162 | |
fkhan39 | 11:eca6295235e6 | 163 | |
fkhan39 | 11:eca6295235e6 | 164 | pc.printf("gyro: %d %d %d\n\r", imu.gx, imu.gy, imu.gz); |
fkhan39 | 11:eca6295235e6 | 165 | pc.printf("accel: %d %d %d\n\r", imu.ax, imu.ay, imu.az); |
fkhan39 | 11:eca6295235e6 | 166 | pc.printf("mag: %d %d %d\n\n\r", imu.mx, imu.my, imu.mz); |
kswanson31 | 12:a2908fdf3b66 | 167 | */ |
fkhan39 | 11:eca6295235e6 | 168 | |
fkhan39 | 9:63c3c734a620 | 169 | /* PART 4, BUBBLE/COMPASS |
fkhan39 | 9:63c3c734a620 | 170 | |
fkhan39 | 9:63c3c734a620 | 171 | imu.readAccel(); |
fkhan39 | 9:63c3c734a620 | 172 | imu.readMag(); |
fkhan39 | 9:63c3c734a620 | 173 | imu.readGyro(); |
kswanson31 | 3:99acbebbed6c | 174 | |
fkhan39 | 9:63c3c734a620 | 175 | lcd.filled_circle(64 + ax / 250, 64 + ay/ 250 , 8, BLACK); |
fkhan39 | 9:63c3c734a620 | 176 | ax = imu.ax, ay = imu.ay; |
fkhan39 | 9:63c3c734a620 | 177 | lcd.filled_circle(64 + ax / 250, 64 + ay/ 250 , 8, WHITE); |
fkhan39 | 9:63c3c734a620 | 178 | lcd.circle(64, 64, 10, WHITE); |
fkhan39 | 9:63c3c734a620 | 179 | |
fkhan39 | 9:63c3c734a620 | 180 | // compass, PART 4 extra credit |
fkhan39 | 9:63c3c734a620 | 181 | |
fkhan39 | 9:63c3c734a620 | 182 | lcd.line(64,64,64+60*cos(theta), 64+60*sin(theta), BLACK); |
fkhan39 | 9:63c3c734a620 | 183 | theta = atan2((double)imu.mx, (double)imu.my); |
fkhan39 | 9:63c3c734a620 | 184 | lcd.line(64,64,64+60*cos(theta), 64+60*sin(theta), GREEN); |
fkhan39 | 9:63c3c734a620 | 185 | lcd.locate(0,1); |
fkhan39 | 9:63c3c734a620 | 186 | lcd.printf("%f",180 * theta / 3.14159); |
fkhan39 | 9:63c3c734a620 | 187 | |
fkhan39 | 9:63c3c734a620 | 188 | */ |
kswanson31 | 12:a2908fdf3b66 | 189 | |
kswanson31 | 12:a2908fdf3b66 | 190 | /* PART 6 |
kswanson31 | 12:a2908fdf3b66 | 191 | |
kswanson31 | 12:a2908fdf3b66 | 192 | // using DigitalOut |
kswanson31 | 12:a2908fdf3b66 | 193 | // Ctrl = 1; |
kswanson31 | 12:a2908fdf3b66 | 194 | // myled = 1; |
kswanson31 | 12:a2908fdf3b66 | 195 | // wait(.2); |
kswanson31 | 12:a2908fdf3b66 | 196 | // Ctrl = 0; |
kswanson31 | 12:a2908fdf3b66 | 197 | // myled = 0; |
kswanson31 | 12:a2908fdf3b66 | 198 | // wait(.2); |
kswanson31 | 12:a2908fdf3b66 | 199 | // |
kswanson31 | 12:a2908fdf3b66 | 200 | // using PwmOut |
kswanson31 | 12:a2908fdf3b66 | 201 | myled = 1; |
kswanson31 | 12:a2908fdf3b66 | 202 | |
kswanson31 | 12:a2908fdf3b66 | 203 | for (int i = 0; i < 5; i++) { |
kswanson31 | 12:a2908fdf3b66 | 204 | Ctrl = i*0.2f; |
kswanson31 | 12:a2908fdf3b66 | 205 | wait(.1); |
kswanson31 | 12:a2908fdf3b66 | 206 | myled = 0; |
kswanson31 | 12:a2908fdf3b66 | 207 | wait(.1); |
kswanson31 | 12:a2908fdf3b66 | 208 | } |
kswanson31 | 12:a2908fdf3b66 | 209 | */ |
fkhan39 | 9:63c3c734a620 | 210 | } |
fkhan39 | 9:63c3c734a620 | 211 | } |
fkhan39 | 10:98f119e9582a | 212 | |
fkhan39 | 10:98f119e9582a | 213 | |
fkhan39 | 10:98f119e9582a | 214 | |
fkhan39 | 10:98f119e9582a | 215 | /* |
fkhan39 | 10:98f119e9582a | 216 | , |
fkhan39 | 10:98f119e9582a | 217 | / \ |
fkhan39 | 10:98f119e9582a | 218 | { } |
fkhan39 | 10:98f119e9582a | 219 | p ! |
fkhan39 | 10:98f119e9582a | 220 | ; : ; |
fkhan39 | 10:98f119e9582a | 221 | | : | |
fkhan39 | 10:98f119e9582a | 222 | | : | |
fkhan39 | 10:98f119e9582a | 223 | l ; l |
fkhan39 | 10:98f119e9582a | 224 | l ; l |
fkhan39 | 10:98f119e9582a | 225 | I ; I |
fkhan39 | 10:98f119e9582a | 226 | I ; I |
fkhan39 | 10:98f119e9582a | 227 | I ; I |
fkhan39 | 10:98f119e9582a | 228 | I ; I |
fkhan39 | 10:98f119e9582a | 229 | d | b |
fkhan39 | 10:98f119e9582a | 230 | H | H |
fkhan39 | 10:98f119e9582a | 231 | H | H |
fkhan39 | 10:98f119e9582a | 232 | H I H |
fkhan39 | 10:98f119e9582a | 233 | ,;, H I H ,;, |
fkhan39 | 10:98f119e9582a | 234 | ;H@H; ;_H_;, ;H@H; |
fkhan39 | 10:98f119e9582a | 235 | `\Y/d_,;|4H@HK|;,_b\Y/' |
fkhan39 | 10:98f119e9582a | 236 | '\;MMMMM$@@@$MMMMM;/' |
fkhan39 | 10:98f119e9582a | 237 | "~~~*;!8@8!;*~~~" |
fkhan39 | 10:98f119e9582a | 238 | ;888; |
fkhan39 | 10:98f119e9582a | 239 | ;888; |
fkhan39 | 10:98f119e9582a | 240 | ;888; |
fkhan39 | 10:98f119e9582a | 241 | ;888; |
fkhan39 | 10:98f119e9582a | 242 | d8@8b |
fkhan39 | 10:98f119e9582a | 243 | O8@8O |
fkhan39 | 10:98f119e9582a | 244 | T808T |
fkhan39 | 10:98f119e9582a | 245 | `~` |
fkhan39 | 10:98f119e9582a | 246 | */ |