Evan Zhang / Mbed 2 deprecated StepperMotorSong4180

Dependencies:   mbed mbed-rtos SDFileSystem11

Committer:
cawald18
Date:
Mon Apr 26 22:05:32 2021 +0000
Revision:
6:2450dc369670
Parent:
5:bc7213111da0
Child:
7:dd65856c3982
Updated;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cawald18 0:6cc2c1f459f1 1 #include "mbed.h"
cawald18 0:6cc2c1f459f1 2 #include "rtos.h"
cawald18 0:6cc2c1f459f1 3 #include "notes.h"
cawald18 1:ddbed1542633 4 #include "SDFileSystem.h"
cawald18 1:ddbed1542633 5 #include <string>
cawald18 1:ddbed1542633 6 #include <sstream>
cawald18 1:ddbed1542633 7 #include <iostream>
cawald18 1:ddbed1542633 8 #include <cstdlib>
cawald18 1:ddbed1542633 9
cawald18 0:6cc2c1f459f1 10 Thread motor;
cawald18 1:ddbed1542633 11 SDFileSystem sd(p5, p6, p7, p8, "sd");
cawald18 0:6cc2c1f459f1 12 Serial pc(USBTX, USBRX); // tx, rx
cawald18 1:ddbed1542633 13 class Note {
cawald18 1:ddbed1542633 14 public:
cawald18 1:ddbed1542633 15 int midiNote;
cawald18 1:ddbed1542633 16 float start;
cawald18 1:ddbed1542633 17 float stop;
cawald18 1:ddbed1542633 18 Note(int midi, float sta, float sto) {
cawald18 1:ddbed1542633 19 start = sta;
cawald18 1:ddbed1542633 20 stop = sto;
cawald18 1:ddbed1542633 21 midiNote = midi;
cawald18 1:ddbed1542633 22 }
cawald18 1:ddbed1542633 23 };
cawald18 1:ddbed1542633 24
cawald18 0:6cc2c1f459f1 25
cawald18 0:6cc2c1f459f1 26
cawald18 5:bc7213111da0 27 DigitalOut led1(LED2);
cawald18 5:bc7213111da0 28 DigitalOut f1(p21);
cawald18 5:bc7213111da0 29 DigitalOut f2(p22);
cawald18 5:bc7213111da0 30 DigitalOut f3(p23);
cawald18 6:2450dc369670 31 DigitalOut m1e(p17);
cawald18 6:2450dc369670 32 DigitalOut m2e(p18);
cawald18 6:2450dc369670 33 DigitalOut m3e(p19);
cawald18 5:bc7213111da0 34 Ticker t1;
cawald18 5:bc7213111da0 35 Ticker t2;
cawald18 5:bc7213111da0 36 Ticker t3;
cawald18 5:bc7213111da0 37 float motor1stop;
cawald18 5:bc7213111da0 38 float motor2stop;
cawald18 5:bc7213111da0 39 float motor3stop;
cawald18 4:f14ca9203f62 40
cawald18 5:bc7213111da0 41 Timer motor1timer;
cawald18 5:bc7213111da0 42 void flip1()
cawald18 5:bc7213111da0 43 {
cawald18 5:bc7213111da0 44 f1 = !f1;
cawald18 5:bc7213111da0 45 }
cawald18 5:bc7213111da0 46 void flip2()
cawald18 5:bc7213111da0 47 {
cawald18 5:bc7213111da0 48 f2 = !f2;
cawald18 5:bc7213111da0 49 }
cawald18 5:bc7213111da0 50 void flip3(){
cawald18 5:bc7213111da0 51 f3 = !f3;
cawald18 5:bc7213111da0 52 }
cawald18 5:bc7213111da0 53 /*
cawald18 5:bc7213111da0 54 Takes the midi number in from the array and then converts it to a frequency in hz;
cawald18 5:bc7213111da0 55 */
cawald18 5:bc7213111da0 56 float midi2freq(float midi){
cawald18 5:bc7213111da0 57 return 440.0*powf(2.0, (midi-69)/12);
cawald18 5:bc7213111da0 58 }
cawald18 5:bc7213111da0 59
cawald18 0:6cc2c1f459f1 60 int main() {
cawald18 6:2450dc369670 61 f1 = 0;
cawald18 6:2450dc369670 62 f2 = 0;
cawald18 6:2450dc369670 63 f3 = 0;
cawald18 6:2450dc369670 64 m1e = 0;
cawald18 6:2450dc369670 65 m2e = 0;
cawald18 6:2450dc369670 66 m3e = 0;
cawald18 6:2450dc369670 67 motor1stop = 0;
cawald18 6:2450dc369670 68 motor2stop = 0;
cawald18 6:2450dc369670 69 motor3stop = 0;
cawald18 6:2450dc369670 70
cawald18 2:39d41fd0f52b 71 bool holdNotes = 0; //Stop reading notes file
cawald18 2:39d41fd0f52b 72 bool holdStart = 0; //Stop reading start times
cawald18 2:39d41fd0f52b 73 bool holdFinish = 0; //Stop reading in finish times
cawald18 1:ddbed1542633 74 pc.baud(115200);
cawald18 1:ddbed1542633 75 const char * d;
cawald18 1:ddbed1542633 76 std::string str = "123.4567";
cawald18 1:ddbed1542633 77 d = str.c_str();
cawald18 1:ddbed1542633 78 // convert string to float
cawald18 1:ddbed1542633 79 float num_float = std::atof(d);
cawald18 1:ddbed1542633 80
cawald18 1:ddbed1542633 81 // convert string to double
cawald18 6:2450dc369670 82 //pc.printf("%f\n", num_float-1.0);
cawald18 1:ddbed1542633 83 int temp = 0;
cawald18 1:ddbed1542633 84
cawald18 1:ddbed1542633 85 pc.printf("Hello World!");
cawald18 1:ddbed1542633 86 string output = "";
cawald18 1:ddbed1542633 87
cawald18 1:ddbed1542633 88 FILE *fpn = fopen("/sd/notesmatrix.txt", "r");
cawald18 1:ddbed1542633 89 FILE *fpstart = fopen("/sd/notesstart.txt", "r");
cawald18 1:ddbed1542633 90 FILE *fpfinish = fopen("/sd/notesfinish.txt","r");
cawald18 1:ddbed1542633 91 unsigned char c;
cawald18 6:2450dc369670 92 //pc.printf("I'm here\n");
cawald18 2:39d41fd0f52b 93 Note myNote = Note(0, 0, 0);
cawald18 6:2450dc369670 94 motor1timer.start();
cawald18 1:ddbed1542633 95 while (!feof(fpn)){ // while not end of file
cawald18 2:39d41fd0f52b 96 while(!holdNotes) {
cawald18 1:ddbed1542633 97 c = fgetc(fpn); // get a character/byte from the file
cawald18 1:ddbed1542633 98 if(c == ','){
cawald18 1:ddbed1542633 99 stringstream degree(output);
cawald18 1:ddbed1542633 100 degree >> temp;
cawald18 6:2450dc369670 101 //pc.printf("%d\n", temp);
cawald18 6:2450dc369670 102 myNote.midiNote = temp;
cawald18 1:ddbed1542633 103 output = "";
cawald18 2:39d41fd0f52b 104 holdNotes = 1;
cawald18 1:ddbed1542633 105 } else {
cawald18 1:ddbed1542633 106 output += c;
cawald18 1:ddbed1542633 107 }
cawald18 2:39d41fd0f52b 108 }
cawald18 6:2450dc369670 109
cawald18 1:ddbed1542633 110 output = "";
cawald18 2:39d41fd0f52b 111 while(!holdStart) {
cawald18 2:39d41fd0f52b 112 c = fgetc(fpstart);
cawald18 2:39d41fd0f52b 113 if(c == ','){
cawald18 2:39d41fd0f52b 114 d = output.c_str();
cawald18 2:39d41fd0f52b 115 num_float = std::atof(d);
cawald18 6:2450dc369670 116 //pc.printf("%f\n", num_float);
cawald18 2:39d41fd0f52b 117 output = "";
cawald18 2:39d41fd0f52b 118 myNote.start = num_float;
cawald18 2:39d41fd0f52b 119 holdStart = 1;
cawald18 2:39d41fd0f52b 120 } else {
cawald18 2:39d41fd0f52b 121 output+= c;
cawald18 2:39d41fd0f52b 122 }
cawald18 1:ddbed1542633 123
cawald18 2:39d41fd0f52b 124 }
cawald18 1:ddbed1542633 125 output = "";
cawald18 2:39d41fd0f52b 126 while(!holdFinish){
cawald18 1:ddbed1542633 127 c = fgetc(fpfinish);
cawald18 1:ddbed1542633 128 if(c == ','){
cawald18 1:ddbed1542633 129 d = output.c_str();
cawald18 1:ddbed1542633 130 num_float = std::atof(d);
cawald18 6:2450dc369670 131 //pc.printf("%f\n", num_float);
cawald18 1:ddbed1542633 132 output = "";
cawald18 2:39d41fd0f52b 133 myNote.stop = num_float;
cawald18 2:39d41fd0f52b 134 holdFinish = 1;
cawald18 1:ddbed1542633 135 } else {
cawald18 1:ddbed1542633 136 output+= c;
cawald18 1:ddbed1542633 137 }
cawald18 1:ddbed1542633 138
cawald18 2:39d41fd0f52b 139 } //ONCE WE REACH THIS POINT ALL PARTS OF THE NOTE OBJECT SHOULD BE SET
cawald18 6:2450dc369670 140 if(motor1stop< motor1timer.read()) {
cawald18 6:2450dc369670 141 t1.detach();
cawald18 6:2450dc369670 142 m1e = 0;
cawald18 6:2450dc369670 143 }
cawald18 6:2450dc369670 144 if(motor2stop< motor1timer.read()){
cawald18 6:2450dc369670 145 t2.detach();
cawald18 6:2450dc369670 146 m2e = 0;
cawald18 6:2450dc369670 147 }
cawald18 6:2450dc369670 148 if(motor3stop< motor1timer.read()) {
cawald18 6:2450dc369670 149 t3.detach();
cawald18 6:2450dc369670 150 m3e = 0;
cawald18 0:6cc2c1f459f1 151 }
cawald18 2:39d41fd0f52b 152
cawald18 6:2450dc369670 153 if(myNote.start <= motor1timer.read()){
cawald18 6:2450dc369670 154 if(motor1stop < motor1timer.read()) { //Check if we should add it
cawald18 6:2450dc369670 155 t1.attach(&flip1, .5/midi2freq(myNote.midiNote)); //
cawald18 6:2450dc369670 156 motor1stop = myNote.stop+motor1timer.read();
cawald18 6:2450dc369670 157 m1e = 1;
cawald18 6:2450dc369670 158 holdNotes = 0;
cawald18 6:2450dc369670 159 holdStart = 0;
cawald18 6:2450dc369670 160 holdFinish = 0;
cawald18 6:2450dc369670 161 } else if(motor2stop < motor1timer.read()) {
cawald18 6:2450dc369670 162 t2.attach(&flip2, .5/midi2freq(myNote.midiNote));
cawald18 6:2450dc369670 163 motor2stop = myNote.stop+motor1timer.read();
cawald18 6:2450dc369670 164 m2e = 1;
cawald18 6:2450dc369670 165 holdNotes = 0;
cawald18 6:2450dc369670 166 holdStart = 0;
cawald18 6:2450dc369670 167 holdFinish = 0;
cawald18 6:2450dc369670 168 } else if(motor3stop < motor1timer.read()) {
cawald18 6:2450dc369670 169 t3.attach(&flip3, .5/midi2freq(myNote.midiNote));
cawald18 6:2450dc369670 170 motor3stop = myNote.stop+motor1timer.read();
cawald18 6:2450dc369670 171 m3e = 1;
cawald18 6:2450dc369670 172 holdNotes = 0;
cawald18 6:2450dc369670 173 holdStart = 0;
cawald18 6:2450dc369670 174 holdFinish = 0;
cawald18 6:2450dc369670 175 } else {
cawald18 6:2450dc369670 176 holdNotes = 0;
cawald18 6:2450dc369670 177 holdStart = 0;
cawald18 6:2450dc369670 178 holdFinish = 0;
cawald18 6:2450dc369670 179 }
cawald18 6:2450dc369670 180 } //We have now finished assigning the note to be played
cawald18 6:2450dc369670 181 led1 = !led1;
cawald18 6:2450dc369670 182
cawald18 6:2450dc369670 183
cawald18 6:2450dc369670 184 } //End of while loop for playing
cawald18 6:2450dc369670 185 motor1stop = 0;
cawald18 6:2450dc369670 186 motor2stop = 0;
cawald18 6:2450dc369670 187 motor3stop = 0;
cawald18 2:39d41fd0f52b 188
cawald18 2:39d41fd0f52b 189
cawald18 0:6cc2c1f459f1 190 }