report
Dependencies: ADXL362 Lab7 mbed
main.cpp@0:db770a1bef64, 2018-02-02 (annotated)
- Committer:
- madfain
- Date:
- Fri Feb 02 15:03:02 2018 +0000
- Revision:
- 0:db770a1bef64
- Child:
- 1:ed3c12662b08
Lab three
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
madfain | 0:db770a1bef64 | 1 | #include <stdio.h> |
madfain | 0:db770a1bef64 | 2 | #include <stdlib.h> |
madfain | 0:db770a1bef64 | 3 | #include <string.h> |
madfain | 0:db770a1bef64 | 4 | #include "mbed.h" |
madfain | 0:db770a1bef64 | 5 | |
madfain | 0:db770a1bef64 | 6 | #define PI (3.141592653589793238462) |
madfain | 0:db770a1bef64 | 7 | #define AMPLITUDE (1.0) // x * 3.3V |
madfain | 0:db770a1bef64 | 8 | #define PHASE (PI * 1) // 2*pi is one period |
madfain | 0:db770a1bef64 | 9 | #define RANGE (0x7FFF) |
madfain | 0:db770a1bef64 | 10 | #define OFFSET (0x7FFF) |
madfain | 0:db770a1bef64 | 11 | |
madfain | 0:db770a1bef64 | 12 | // Configuration for sinewave output |
madfain | 0:db770a1bef64 | 13 | #define BUFFER_SIZE (120) |
madfain | 0:db770a1bef64 | 14 | uint16_t buffer[BUFFER_SIZE]; |
madfain | 0:db770a1bef64 | 15 | |
madfain | 0:db770a1bef64 | 16 | Serial pc(USBTX, USBRX); |
madfain | 0:db770a1bef64 | 17 | DigitalOut led1(LED1); |
madfain | 0:db770a1bef64 | 18 | DigitalIn button(PC_13); |
madfain | 0:db770a1bef64 | 19 | AnalogOut Vout(PA_4); |
madfain | 0:db770a1bef64 | 20 | |
madfain | 0:db770a1bef64 | 21 | // Create the sinewave buffer |
madfain | 0:db770a1bef64 | 22 | void calculate_sinewave(void){ |
madfain | 0:db770a1bef64 | 23 | for (int i = 0; i < BUFFER_SIZE; i++) { |
madfain | 0:db770a1bef64 | 24 | double rads = (PI * (i*3))/180.0; // Convert degree in radian |
madfain | 0:db770a1bef64 | 25 | buffer[i] = (uint16_t)(AMPLITUDE * (RANGE * (cos(rads + PHASE))) + OFFSET); |
madfain | 0:db770a1bef64 | 26 | } |
madfain | 0:db770a1bef64 | 27 | } |
madfain | 0:db770a1bef64 | 28 | |
madfain | 0:db770a1bef64 | 29 | |
madfain | 0:db770a1bef64 | 30 | void sinecom(char* inputstring) { |
madfain | 0:db770a1bef64 | 31 | |
madfain | 0:db770a1bef64 | 32 | calculate_sinewave(); |
madfain | 0:db770a1bef64 | 33 | char s[20]; |
madfain | 0:db770a1bef64 | 34 | char sV[20]; |
madfain | 0:db770a1bef64 | 35 | char sF[20]; |
madfain | 0:db770a1bef64 | 36 | int pos, len; |
madfain | 0:db770a1bef64 | 37 | int i = 1; |
madfain | 0:db770a1bef64 | 38 | strcpy(s, inputstring); |
madfain | 0:db770a1bef64 | 39 | len = strlen(s); |
madfain | 0:db770a1bef64 | 40 | |
madfain | 0:db770a1bef64 | 41 | |
madfain | 0:db770a1bef64 | 42 | for (; i < len; i++){ |
madfain | 0:db770a1bef64 | 43 | if (s[i] == ' '){ |
madfain | 0:db770a1bef64 | 44 | pos = i; |
madfain | 0:db770a1bef64 | 45 | break; |
madfain | 0:db770a1bef64 | 46 | } |
madfain | 0:db770a1bef64 | 47 | } |
madfain | 0:db770a1bef64 | 48 | |
madfain | 0:db770a1bef64 | 49 | memcpy(sF, &s[pos], len-pos); |
madfain | 0:db770a1bef64 | 50 | memcpy(sV, &s[0], pos); |
madfain | 0:db770a1bef64 | 51 | float inV = atof(sV); |
madfain | 0:db770a1bef64 | 52 | float input_f = atof(sF); |
madfain | 0:db770a1bef64 | 53 | pc.printf("Voltage: %f \n\r",inV); |
madfain | 0:db770a1bef64 | 54 | pc.printf("Frequency: %f \n\r",input_f); |
madfain | 0:db770a1bef64 | 55 | |
madfain | 0:db770a1bef64 | 56 | float wait_time = -9.955923 + (20817940 + 9.955923) / (1 + powf(input_f/0.0007111212, 1.049561)); //took data points and got this equation by estimating the graph with computer, results in 1-3% error |
madfain | 0:db770a1bef64 | 57 | while(1) { |
madfain | 0:db770a1bef64 | 58 | // sinewave output |
madfain | 0:db770a1bef64 | 59 | for (int i = 0; i < BUFFER_SIZE; i++) { |
madfain | 0:db770a1bef64 | 60 | Vout.write_u16(buffer[i]/(3.30 * (1.00/inV))); |
madfain | 0:db770a1bef64 | 61 | wait_us(wait_time); |
madfain | 0:db770a1bef64 | 62 | } |
madfain | 0:db770a1bef64 | 63 | } |
madfain | 0:db770a1bef64 | 64 | } |
madfain | 0:db770a1bef64 | 65 | |
madfain | 0:db770a1bef64 | 66 | void ledcom(char* onoff) |
madfain | 0:db770a1bef64 | 67 | { |
madfain | 0:db770a1bef64 | 68 | if(strstr(onoff, "ON") != NULL) |
madfain | 0:db770a1bef64 | 69 | led1 = 1; |
madfain | 0:db770a1bef64 | 70 | else |
madfain | 0:db770a1bef64 | 71 | led1 = 0; |
madfain | 0:db770a1bef64 | 72 | } |
madfain | 0:db770a1bef64 | 73 | |
madfain | 0:db770a1bef64 | 74 | void buttoncom(void) |
madfain | 0:db770a1bef64 | 75 | { |
madfain | 0:db770a1bef64 | 76 | if(button.read() == 0){ |
madfain | 0:db770a1bef64 | 77 | pc.printf("PRESSED \n\r"); |
madfain | 0:db770a1bef64 | 78 | } |
madfain | 0:db770a1bef64 | 79 | else if (button.read() != 0) { |
madfain | 0:db770a1bef64 | 80 | pc.printf("RELEASED \n\r"); |
madfain | 0:db770a1bef64 | 81 | } |
madfain | 0:db770a1bef64 | 82 | } |
madfain | 0:db770a1bef64 | 83 | |
madfain | 0:db770a1bef64 | 84 | void blinkcom(char* reps) |
madfain | 0:db770a1bef64 | 85 | { |
madfain | 0:db770a1bef64 | 86 | int x = atoi(reps); |
madfain | 0:db770a1bef64 | 87 | int i; |
madfain | 0:db770a1bef64 | 88 | for(i = 0; i < x; i++) |
madfain | 0:db770a1bef64 | 89 | { |
madfain | 0:db770a1bef64 | 90 | led1 = 1; |
madfain | 0:db770a1bef64 | 91 | wait(.5); |
madfain | 0:db770a1bef64 | 92 | led1 = 0; |
madfain | 0:db770a1bef64 | 93 | wait(.5); |
madfain | 0:db770a1bef64 | 94 | } |
madfain | 0:db770a1bef64 | 95 | } |
madfain | 0:db770a1bef64 | 96 | |
madfain | 0:db770a1bef64 | 97 | void dccom(char *volts) |
madfain | 0:db770a1bef64 | 98 | { |
madfain | 0:db770a1bef64 | 99 | float volt = atof(volts); |
madfain | 0:db770a1bef64 | 100 | pc.printf("voltage output: %4.2f \n\r", volt); |
madfain | 0:db770a1bef64 | 101 | Vout.write_u16((volt/3.317)*0xFFFF); |
madfain | 0:db770a1bef64 | 102 | } |
madfain | 0:db770a1bef64 | 103 | |
madfain | 0:db770a1bef64 | 104 | |
madfain | 0:db770a1bef64 | 105 | int main() { |
madfain | 0:db770a1bef64 | 106 | char s[20]; |
madfain | 0:db770a1bef64 | 107 | pc.printf("Enter command \n\r"); |
madfain | 0:db770a1bef64 | 108 | while (true) { |
madfain | 0:db770a1bef64 | 109 | int j = 0; |
madfain | 0:db770a1bef64 | 110 | char c; |
madfain | 0:db770a1bef64 | 111 | |
madfain | 0:db770a1bef64 | 112 | while(true){ |
madfain | 0:db770a1bef64 | 113 | c = pc.getc(); |
madfain | 0:db770a1bef64 | 114 | pc.putc(c); |
madfain | 0:db770a1bef64 | 115 | s[j]=c; |
madfain | 0:db770a1bef64 | 116 | j++; |
madfain | 0:db770a1bef64 | 117 | if(c == '\r'){ |
madfain | 0:db770a1bef64 | 118 | pc.printf("\n\r"); |
madfain | 0:db770a1bef64 | 119 | break; |
madfain | 0:db770a1bef64 | 120 | } |
madfain | 0:db770a1bef64 | 121 | } |
madfain | 0:db770a1bef64 | 122 | s[j] = '\0'; |
madfain | 0:db770a1bef64 | 123 | char s_one[20]; |
madfain | 0:db770a1bef64 | 124 | char s_two[20]; |
madfain | 0:db770a1bef64 | 125 | int len = strlen(s); |
madfain | 0:db770a1bef64 | 126 | int pos = 0; |
madfain | 0:db770a1bef64 | 127 | |
madfain | 0:db770a1bef64 | 128 | int i = 0; |
madfain | 0:db770a1bef64 | 129 | for (; i < len; i++){ |
madfain | 0:db770a1bef64 | 130 | |
madfain | 0:db770a1bef64 | 131 | if (s[i] == ' '){ |
madfain | 0:db770a1bef64 | 132 | pos = i; |
madfain | 0:db770a1bef64 | 133 | break; |
madfain | 0:db770a1bef64 | 134 | } |
madfain | 0:db770a1bef64 | 135 | else if (i == len) |
madfain | 0:db770a1bef64 | 136 | pos = len+1; |
madfain | 0:db770a1bef64 | 137 | } |
madfain | 0:db770a1bef64 | 138 | |
madfain | 0:db770a1bef64 | 139 | |
madfain | 0:db770a1bef64 | 140 | if (pos <= len){ |
madfain | 0:db770a1bef64 | 141 | memcpy(s_two, &s[pos], len-pos); |
madfain | 0:db770a1bef64 | 142 | s_two[len - pos] = '\0'; |
madfain | 0:db770a1bef64 | 143 | |
madfain | 0:db770a1bef64 | 144 | memcpy(s_one, &s[0], pos+1); |
madfain | 0:db770a1bef64 | 145 | s_one[pos] = '\0'; |
madfain | 0:db770a1bef64 | 146 | } |
madfain | 0:db770a1bef64 | 147 | |
madfain | 0:db770a1bef64 | 148 | else { |
madfain | 0:db770a1bef64 | 149 | memcpy(s_one, &s[0], len); |
madfain | 0:db770a1bef64 | 150 | s_one[len] = '\0'; |
madfain | 0:db770a1bef64 | 151 | pc.printf("%s \n\r", s_one); |
madfain | 0:db770a1bef64 | 152 | }//case where there is no space |
madfain | 0:db770a1bef64 | 153 | |
madfain | 0:db770a1bef64 | 154 | |
madfain | 0:db770a1bef64 | 155 | if (strstr(s_one, "LED") != NULL) { |
madfain | 0:db770a1bef64 | 156 | ledcom(s_two); |
madfain | 0:db770a1bef64 | 157 | } |
madfain | 0:db770a1bef64 | 158 | else if (strstr(s, "BUTTON") != NULL) { |
madfain | 0:db770a1bef64 | 159 | buttoncom(); |
madfain | 0:db770a1bef64 | 160 | } |
madfain | 0:db770a1bef64 | 161 | else if (strstr(s_one, "BLINK") != NULL) { |
madfain | 0:db770a1bef64 | 162 | blinkcom(s_two); |
madfain | 0:db770a1bef64 | 163 | } |
madfain | 0:db770a1bef64 | 164 | else if (strstr(s_one, "DC") != NULL) { |
madfain | 0:db770a1bef64 | 165 | dccom(s_two); |
madfain | 0:db770a1bef64 | 166 | } |
madfain | 0:db770a1bef64 | 167 | else if (strstr(s_one, "SINE") != NULL){ |
madfain | 0:db770a1bef64 | 168 | sinecom(s_two); |
madfain | 0:db770a1bef64 | 169 | } |
madfain | 0:db770a1bef64 | 170 | else pc.printf("Bad command, try again buddy \n\r"); |
madfain | 0:db770a1bef64 | 171 | } |
madfain | 0:db770a1bef64 | 172 | } |