Mbed code for ECE4180 lab2

Dependencies:   mbed

Committer:
jguinta3
Date:
Tue Feb 11 22:29:34 2014 +0000
Revision:
0:8c9202ca7351
ECE4180 lab 2 initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jguinta3 0:8c9202ca7351 1 /*
jguinta3 0:8c9202ca7351 2 * Allen Wild
jguinta3 0:8c9202ca7351 3 * Joseph Guinta
jguinta3 0:8c9202ca7351 4 *
jguinta3 0:8c9202ca7351 5 * ECE 4180 Lab 2
jguinta3 0:8c9202ca7351 6 */
jguinta3 0:8c9202ca7351 7
jguinta3 0:8c9202ca7351 8 #include "mbed.h"
jguinta3 0:8c9202ca7351 9 #include "rtos.h"
jguinta3 0:8c9202ca7351 10 #include "HMC6352.h"
jguinta3 0:8c9202ca7351 11 #include "EthernetInterface.h"
jguinta3 0:8c9202ca7351 12 #include "uLCD_4DGL.h"
jguinta3 0:8c9202ca7351 13 #include "SDFileSystem.h"
jguinta3 0:8c9202ca7351 14 #include "Speaker.h"
jguinta3 0:8c9202ca7351 15 #include "wave_player.h"
jguinta3 0:8c9202ca7351 16 #include "Servo.h"
jguinta3 0:8c9202ca7351 17
jguinta3 0:8c9202ca7351 18 #define ANALOG_OUT_PIN p18
jguinta3 0:8c9202ca7351 19 #define ANALOG_IN p19
jguinta3 0:8c9202ca7351 20 #define SOUND_WAVFILE "/sd/wavfiles/coolsound.wav"
jguinta3 0:8c9202ca7351 21 #define PWM_PIN p0
jguinta3 0:8c9202ca7351 22
jguinta3 0:8c9202ca7351 23 void part1Function(void);
jguinta3 0:8c9202ca7351 24 void part2Function(void);
jguinta3 0:8c9202ca7351 25 void part4Function(void);
jguinta3 0:8c9202ca7351 26 void part5Function(void);
jguinta3 0:8c9202ca7351 27 void part6Function(void);
jguinta3 0:8c9202ca7351 28 void part7Function(void);
jguinta3 0:8c9202ca7351 29 void part8Function(void);
jguinta3 0:8c9202ca7351 30
jguinta3 0:8c9202ca7351 31 //Part 1 - Analog
jguinta3 0:8c9202ca7351 32 float Analog_out_data[40];
jguinta3 0:8c9202ca7351 33 AnalogOut a_out_signal(ANALOG_OUT_PIN);
jguinta3 0:8c9202ca7351 34 AnalogIn a_in(ANALOG_IN);
jguinta3 0:8c9202ca7351 35 DigitalOut led1(LED1);
jguinta3 0:8c9202ca7351 36 DigitalOut led2(LED2);
jguinta3 0:8c9202ca7351 37 DigitalOut led3(LED3);
jguinta3 0:8c9202ca7351 38 DigitalOut led4(LED4);
jguinta3 0:8c9202ca7351 39
jguinta3 0:8c9202ca7351 40 //Part 2 and 3 - I2C and Serial
jguinta3 0:8c9202ca7351 41 HMC6352 compass(p9, p10);
jguinta3 0:8c9202ca7351 42 Serial pc(USBTX, USBRX);
jguinta3 0:8c9202ca7351 43
jguinta3 0:8c9202ca7351 44
jguinta3 0:8c9202ca7351 45 //Part 4 - Ethernet
jguinta3 0:8c9202ca7351 46 EthernetInterface eth;
jguinta3 0:8c9202ca7351 47
jguinta3 0:8c9202ca7351 48
jguinta3 0:8c9202ca7351 49 //Part 5 - servo position control
jguinta3 0:8c9202ca7351 50 PwmOut servo(p21);
jguinta3 0:8c9202ca7351 51
jguinta3 0:8c9202ca7351 52 //Part 6 - Color LCD
jguinta3 0:8c9202ca7351 53 uLCD_4DGL uLCD(p28, p27, p29);
jguinta3 0:8c9202ca7351 54
jguinta3 0:8c9202ca7351 55 // Part 7 - SD
jguinta3 0:8c9202ca7351 56 SDFileSystem sd(p5, p6, p7, p8, "sd");
jguinta3 0:8c9202ca7351 57 //Part 8 - Speaker
jguinta3 0:8c9202ca7351 58 AnalogOut DACout(p18);
jguinta3 0:8c9202ca7351 59 wave_player waver(&DACout);
jguinta3 0:8c9202ca7351 60 int main() {
jguinta3 0:8c9202ca7351 61 part1Function(); //Analog
jguinta3 0:8c9202ca7351 62 part2Function();
jguinta3 0:8c9202ca7351 63 part4Function(); //Ethernet
jguinta3 0:8c9202ca7351 64 part5Function(); //servo
jguinta3 0:8c9202ca7351 65 part6Function(); //Color LCD
jguinta3 0:8c9202ca7351 66 part7Function(); //SD
jguinta3 0:8c9202ca7351 67 part8Function(); //Sound
jguinta3 0:8c9202ca7351 68 }
jguinta3 0:8c9202ca7351 69
jguinta3 0:8c9202ca7351 70
jguinta3 0:8c9202ca7351 71
jguinta3 0:8c9202ca7351 72 void part1Function(void) {
jguinta3 0:8c9202ca7351 73 int i = 0;
jguinta3 0:8c9202ca7351 74 //precompute sine wave values
jguinta3 0:8c9202ca7351 75 for( i=0; i<40; i++) {
jguinta3 0:8c9202ca7351 76 Analog_out_data[i]=((1.0 + sin((float(i)/40.0*6.28318530717959)))/2.0); // scale the sine wave from 0.0 to 1.0
jguinta3 0:8c9202ca7351 77 }
jguinta3 0:8c9202ca7351 78
jguinta3 0:8c9202ca7351 79
jguinta3 0:8c9202ca7351 80 //part 1 while loop - consider making each part a separate function (easy to call and comment out)
jguinta3 0:8c9202ca7351 81 while (true) {
jguinta3 0:8c9202ca7351 82
jguinta3 0:8c9202ca7351 83 //is this what he means by 2 complete cycles for each iteration of the loop??
jguinta3 0:8c9202ca7351 84 for (i = 0; i < 40; i++) { //cycle 1
jguinta3 0:8c9202ca7351 85 a_out_signal = Analog_out_data[i];
jguinta3 0:8c9202ca7351 86 wait(.1);
jguinta3 0:8c9202ca7351 87 }
jguinta3 0:8c9202ca7351 88 for (i = 0; i < 40; i++) { //cycle 2
jguinta3 0:8c9202ca7351 89 a_out_signal = Analog_out_data[i];
jguinta3 0:8c9202ca7351 90 wait(.1);
jguinta3 0:8c9202ca7351 91 }
jguinta3 0:8c9202ca7351 92
jguinta3 0:8c9202ca7351 93 //As the voltage passes a threshold, turn on another LED
jguinta3 0:8c9202ca7351 94 led1 = (a_in > 0.2) ? 1 : 0;
jguinta3 0:8c9202ca7351 95 led2 = (a_in > 0.4) ? 1 : 0;
jguinta3 0:8c9202ca7351 96 led3 = (a_in > 0.6) ? 1 : 0;
jguinta3 0:8c9202ca7351 97 led4 = (a_in > 0.8) ? 1 : 0;
jguinta3 0:8c9202ca7351 98
jguinta3 0:8c9202ca7351 99 wait(0.3);
jguinta3 0:8c9202ca7351 100 }
jguinta3 0:8c9202ca7351 101
jguinta3 0:8c9202ca7351 102 }//end of part1
jguinta3 0:8c9202ca7351 103
jguinta3 0:8c9202ca7351 104 void part2Function(void) {
jguinta3 0:8c9202ca7351 105 compass.setOpMode(2, 1, 20); //continuous mode, set/reset, 20Hz
jguinta3 0:8c9202ca7351 106
jguinta3 0:8c9202ca7351 107 while (1) {
jguinta3 0:8c9202ca7351 108
jguinta3 0:8c9202ca7351 109 wait(0.1);
jguinta3 0:8c9202ca7351 110
jguinta3 0:8c9202ca7351 111 pc.printf("Compass reading: %f\n", compass.sample() / 10.0); //Compass.sample() returns value from 0 -3599.xxx or something like that, so divide by 10 to get 0-360 degrees
jguinta3 0:8c9202ca7351 112
jguinta3 0:8c9202ca7351 113 }
jguinta3 0:8c9202ca7351 114 } //end part 2
jguinta3 0:8c9202ca7351 115
jguinta3 0:8c9202ca7351 116
jguinta3 0:8c9202ca7351 117 void part4Function(void) { //Code taken from http://mbed.org/handbook/Ethernet-Interface
jguinta3 0:8c9202ca7351 118 eth.init(); //Use DHCP
jguinta3 0:8c9202ca7351 119 eth.connect();
jguinta3 0:8c9202ca7351 120 pc.printf("IP Address is %s\n", eth.getIPAddress());
jguinta3 0:8c9202ca7351 121
jguinta3 0:8c9202ca7351 122 TCPSocketConnection sock;
jguinta3 0:8c9202ca7351 123 sock.connect("mbed.org", 80);
jguinta3 0:8c9202ca7351 124
jguinta3 0:8c9202ca7351 125 char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n";
jguinta3 0:8c9202ca7351 126 sock.send_all(http_cmd, sizeof(http_cmd)-1);
jguinta3 0:8c9202ca7351 127
jguinta3 0:8c9202ca7351 128 char buffer[300];
jguinta3 0:8c9202ca7351 129 int ret;
jguinta3 0:8c9202ca7351 130 while (true) {
jguinta3 0:8c9202ca7351 131 ret = sock.receive(buffer, sizeof(buffer)-1);
jguinta3 0:8c9202ca7351 132 if (ret <= 0)
jguinta3 0:8c9202ca7351 133 break;
jguinta3 0:8c9202ca7351 134 buffer[ret] = '\0';
jguinta3 0:8c9202ca7351 135 pc.printf("Received %d chars from server:\n%s\n", ret, buffer);
jguinta3 0:8c9202ca7351 136 }
jguinta3 0:8c9202ca7351 137
jguinta3 0:8c9202ca7351 138 sock.close();
jguinta3 0:8c9202ca7351 139
jguinta3 0:8c9202ca7351 140 eth.disconnect();
jguinta3 0:8c9202ca7351 141 while(1) {}
jguinta3 0:8c9202ca7351 142 } //end part 4
jguinta3 0:8c9202ca7351 143
jguinta3 0:8c9202ca7351 144 void part5Function(void) {
jguinta3 0:8c9202ca7351 145 servo.period_ms(20); //20ms period
jguinta3 0:8c9202ca7351 146 while (1) {
jguinta3 0:8c9202ca7351 147 for(float offset=0.0; offset<0.001; offset+=0.0001) {
jguinta3 0:8c9202ca7351 148 servo.pulsewidth_ms(1 + offset); // servo position determined by a pulsewidth between 1-2ms
jguinta3 0:8c9202ca7351 149 wait(0.2);
jguinta3 0:8c9202ca7351 150 }
jguinta3 0:8c9202ca7351 151 }
jguinta3 0:8c9202ca7351 152
jguinta3 0:8c9202ca7351 153 } //end part 5
jguinta3 0:8c9202ca7351 154
jguinta3 0:8c9202ca7351 155 void part6Function(void) {
jguinta3 0:8c9202ca7351 156 uLCD.printf("\nHello World!\n");
jguinta3 0:8c9202ca7351 157 } //end part 6
jguinta3 0:8c9202ca7351 158
jguinta3 0:8c9202ca7351 159 void part7Function(void) {
jguinta3 0:8c9202ca7351 160
jguinta3 0:8c9202ca7351 161
jguinta3 0:8c9202ca7351 162 mkdir("/sd/mydir", 0777);
jguinta3 0:8c9202ca7351 163
jguinta3 0:8c9202ca7351 164 FILE *fp = fopen("/sd/mydir/hellosd.txt", "w");
jguinta3 0:8c9202ca7351 165 if(fp == NULL) {
jguinta3 0:8c9202ca7351 166 error("Could not open file for write\n");
jguinta3 0:8c9202ca7351 167 }
jguinta3 0:8c9202ca7351 168 fprintf(fp, "Hello SD file world");
jguinta3 0:8c9202ca7351 169 fclose(fp);
jguinta3 0:8c9202ca7351 170
jguinta3 0:8c9202ca7351 171 fp = fopen("/sd/mydir/hellosd.txt", "r"); //open file, read string and write to pc through usb virtual com port
jguinta3 0:8c9202ca7351 172 if(fp == NULL) {
jguinta3 0:8c9202ca7351 173 error("Could not open file for read\n");
jguinta3 0:8c9202ca7351 174 }
jguinta3 0:8c9202ca7351 175 char mystring [100]; //allocate space for string
jguinta3 0:8c9202ca7351 176 if ( fgets (mystring , 100 , fp) != NULL ) //read in line
jguinta3 0:8c9202ca7351 177 pc.printf("%s\n",mystring); //can i do this? i haven't done c in so long
jguinta3 0:8c9202ca7351 178 fclose(fp);
jguinta3 0:8c9202ca7351 179 } //end part 7
jguinta3 0:8c9202ca7351 180
jguinta3 0:8c9202ca7351 181 void part8Function(void) {
jguinta3 0:8c9202ca7351 182
jguinta3 0:8c9202ca7351 183 //open wav file
jguinta3 0:8c9202ca7351 184 FILE *wave_file;
jguinta3 0:8c9202ca7351 185 wave_file = fopen(SOUND_WAVFILE, "r");
jguinta3 0:8c9202ca7351 186
jguinta3 0:8c9202ca7351 187 //play wav file
jguinta3 0:8c9202ca7351 188 waver.play(wave_file);
jguinta3 0:8c9202ca7351 189
jguinta3 0:8c9202ca7351 190 //close wav file
jguinta3 0:8c9202ca7351 191 fclose(wave_file);
jguinta3 0:8c9202ca7351 192 }//end part 8