diff --git a/Music_box_2.ino b/Music_box_2.ino new file mode 100644 index 0000000..541de62 --- /dev/null +++ b/Music_box_2.ino @@ -0,0 +1,106 @@ +#include +#include +#define SizeRegisterModules 300 + +int IDarg = 0; +String ParsedCommand[SizeRegisterModules]; +File myFile; + +char getCharCommand(){ + if (Serial.available() > 0) { + char cmdraw = Serial.read(); + if (cmdraw > 0) return cmdraw; + } + return '?'; +} + +char getCharCommand2(){ + if (myFile.available() > 0) { + char cmdraw = myFile.read(); + if (cmdraw > 0) return cmdraw; + } + return '?'; +} + +void play(String *args) { + for(int i = 0;i<=1000;i++) { + if(args[i*3] == "tone") { + //tone(2,args[i*3+2],args[i*3+3]); + Serial.print("tone(2,"); + Serial.print(args[i*3+2]); + Serial.print(","); + Serial.print(args[i*3+3]); + Serial.println(");"); + } else if(args[i*3] == "delay") { + Serial.print("delay("); + Serial.print(args[i*3+3]); + Serial.println(");"); + } + } +} + +void mainL(String *args){ + if(args[0] == "play") + { + Serial.println("initialization done."); + myFile = SD.open(args[1]); + if (myFile) { + Serial.print(args[1]); + Serial.println(":"); + + // read from the file until there's nothing else in it: + while (myFile.available()) { + char CharCommand = getCharCommand(); + if (CharCommand != '}' && CharCommand != '?'){ + Serial.print(CharCommand); + if (CharCommand == ' ' && CharCommand == '(' && CharCommand == ',' && CharCommand == ')'){ + if(CharCommand == ')') { IDarg++; } + IDarg++; + }else{ + ParsedCommand[IDarg] += CharCommand; + } + } else { + Serial.println(" "); + play(ParsedCommand); + IDarg = 0; + for (int i = 0;i<=3000;i++) {ParsedCommand[i]="";} + Serial.print(">"); + } + } + // close the file: + myFile.close(); + } else { + // if the file didn't open, print an error: + Serial.print("error opening "); + Serial.println(args[1]); + } + } +} + +void setup() { + // Open serial communications and wait for port to open: + Serial.begin(9600); + while (!Serial) { + ; // wait for serial port to connect. Needed for native USB port only + } + SD.begin(4); + Serial.print("\n \n \n \n>"); +} + +void loop() { + char CharCommand = getCharCommand(); + if (CharCommand != ';' && CharCommand != '?'){ + Serial.print(CharCommand); + if (CharCommand == ' '){ + IDarg++; + }else{ + ParsedCommand[IDarg] += CharCommand; + } + }else if(CharCommand == ';'){ + Serial.println(" "); + mainL(ParsedCommand); + IDarg = 0; + for (int i = 0;i<=3000;i++) {ParsedCommand[i]="";} + Serial.print(">"); + } +}