report

Dependencies:   ADXL362 Lab7 mbed

Committer:
madfain
Date:
Fri Feb 02 23:05:39 2018 +0000
Revision:
1:ed3c12662b08
Parent:
0:db770a1bef64
Child:
3:5f7286858dd0
Lab Three

Who changed what in which revision?

UserRevisionLine numberNew 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 1:ed3c12662b08 57
madfain 1:ed3c12662b08 58 while(!pc.readable()) {
madfain 0:db770a1bef64 59 // sinewave output
madfain 0:db770a1bef64 60 for (int i = 0; i < BUFFER_SIZE; i++) {
madfain 0:db770a1bef64 61 Vout.write_u16(buffer[i]/(3.30 * (1.00/inV)));
madfain 1:ed3c12662b08 62 wait_us((int)wait_time);
madfain 0:db770a1bef64 63 }
madfain 0:db770a1bef64 64 }
madfain 1:ed3c12662b08 65 return;
madfain 0:db770a1bef64 66 }
madfain 0:db770a1bef64 67
madfain 0:db770a1bef64 68 void ledcom(char* onoff)
madfain 0:db770a1bef64 69 {
madfain 0:db770a1bef64 70 if(strstr(onoff, "ON") != NULL)
madfain 0:db770a1bef64 71 led1 = 1;
madfain 0:db770a1bef64 72 else
madfain 0:db770a1bef64 73 led1 = 0;
madfain 0:db770a1bef64 74 }
madfain 0:db770a1bef64 75
madfain 0:db770a1bef64 76 void buttoncom(void)
madfain 0:db770a1bef64 77 {
madfain 0:db770a1bef64 78 if(button.read() == 0){
madfain 0:db770a1bef64 79 pc.printf("PRESSED \n\r");
madfain 0:db770a1bef64 80 }
madfain 0:db770a1bef64 81 else if (button.read() != 0) {
madfain 0:db770a1bef64 82 pc.printf("RELEASED \n\r");
madfain 0:db770a1bef64 83 }
madfain 0:db770a1bef64 84 }
madfain 0:db770a1bef64 85
madfain 0:db770a1bef64 86 void blinkcom(char* reps)
madfain 0:db770a1bef64 87 {
madfain 0:db770a1bef64 88 int x = atoi(reps);
madfain 0:db770a1bef64 89 int i;
madfain 0:db770a1bef64 90 for(i = 0; i < x; i++)
madfain 0:db770a1bef64 91 {
madfain 0:db770a1bef64 92 led1 = 1;
madfain 0:db770a1bef64 93 wait(.5);
madfain 0:db770a1bef64 94 led1 = 0;
madfain 0:db770a1bef64 95 wait(.5);
madfain 0:db770a1bef64 96 }
madfain 0:db770a1bef64 97 }
madfain 0:db770a1bef64 98
madfain 0:db770a1bef64 99 void dccom(char *volts)
madfain 0:db770a1bef64 100 {
madfain 0:db770a1bef64 101 float volt = atof(volts);
madfain 0:db770a1bef64 102 pc.printf("voltage output: %4.2f \n\r", volt);
madfain 0:db770a1bef64 103 Vout.write_u16((volt/3.317)*0xFFFF);
madfain 0:db770a1bef64 104 }
madfain 0:db770a1bef64 105
madfain 0:db770a1bef64 106
madfain 0:db770a1bef64 107 int main() {
madfain 0:db770a1bef64 108 char s[20];
madfain 0:db770a1bef64 109 pc.printf("Enter command \n\r");
madfain 0:db770a1bef64 110 while (true) {
madfain 0:db770a1bef64 111 int j = 0;
madfain 0:db770a1bef64 112 char c;
madfain 0:db770a1bef64 113
madfain 0:db770a1bef64 114 while(true){
madfain 0:db770a1bef64 115 c = pc.getc();
madfain 0:db770a1bef64 116 pc.putc(c);
madfain 0:db770a1bef64 117 s[j]=c;
madfain 0:db770a1bef64 118 j++;
madfain 0:db770a1bef64 119 if(c == '\r'){
madfain 0:db770a1bef64 120 pc.printf("\n\r");
madfain 0:db770a1bef64 121 break;
madfain 0:db770a1bef64 122 }
madfain 0:db770a1bef64 123 }
madfain 0:db770a1bef64 124 s[j] = '\0';
madfain 0:db770a1bef64 125 char s_one[20];
madfain 0:db770a1bef64 126 char s_two[20];
madfain 0:db770a1bef64 127 int len = strlen(s);
madfain 0:db770a1bef64 128 int pos = 0;
madfain 0:db770a1bef64 129
madfain 0:db770a1bef64 130 int i = 0;
madfain 0:db770a1bef64 131 for (; i < len; i++){
madfain 0:db770a1bef64 132
madfain 0:db770a1bef64 133 if (s[i] == ' '){
madfain 0:db770a1bef64 134 pos = i;
madfain 0:db770a1bef64 135 break;
madfain 0:db770a1bef64 136 }
madfain 0:db770a1bef64 137 else if (i == len)
madfain 0:db770a1bef64 138 pos = len+1;
madfain 0:db770a1bef64 139 }
madfain 0:db770a1bef64 140
madfain 0:db770a1bef64 141
madfain 0:db770a1bef64 142 if (pos <= len){
madfain 0:db770a1bef64 143 memcpy(s_two, &s[pos], len-pos);
madfain 0:db770a1bef64 144 s_two[len - pos] = '\0';
madfain 0:db770a1bef64 145
madfain 0:db770a1bef64 146 memcpy(s_one, &s[0], pos+1);
madfain 0:db770a1bef64 147 s_one[pos] = '\0';
madfain 0:db770a1bef64 148 }
madfain 0:db770a1bef64 149
madfain 0:db770a1bef64 150 else {
madfain 0:db770a1bef64 151 memcpy(s_one, &s[0], len);
madfain 0:db770a1bef64 152 s_one[len] = '\0';
madfain 0:db770a1bef64 153 pc.printf("%s \n\r", s_one);
madfain 0:db770a1bef64 154 }//case where there is no space
madfain 0:db770a1bef64 155
madfain 0:db770a1bef64 156
madfain 0:db770a1bef64 157 if (strstr(s_one, "LED") != NULL) {
madfain 0:db770a1bef64 158 ledcom(s_two);
madfain 0:db770a1bef64 159 }
madfain 0:db770a1bef64 160 else if (strstr(s, "BUTTON") != NULL) {
madfain 0:db770a1bef64 161 buttoncom();
madfain 0:db770a1bef64 162 }
madfain 0:db770a1bef64 163 else if (strstr(s_one, "BLINK") != NULL) {
madfain 0:db770a1bef64 164 blinkcom(s_two);
madfain 0:db770a1bef64 165 }
madfain 0:db770a1bef64 166 else if (strstr(s_one, "DC") != NULL) {
madfain 0:db770a1bef64 167 dccom(s_two);
madfain 0:db770a1bef64 168 }
madfain 0:db770a1bef64 169 else if (strstr(s_one, "SINE") != NULL){
madfain 0:db770a1bef64 170 sinecom(s_two);
madfain 0:db770a1bef64 171 }
madfain 1:ed3c12662b08 172 else pc.printf("Bad command, try again buddy \n\r");
madfain 0:db770a1bef64 173 }
madfain 0:db770a1bef64 174 }