~

Dependencies:   4DGL-uLCD-SE SDFileSystem

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?

UserRevisionLine numberNew 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 */