Music Box 2

This commit is contained in:
RedGuy 2023-06-20 17:08:37 +03:00
parent 98bf101060
commit dd07bb851c

106
Music_box_2.ino Normal file
View File

@ -0,0 +1,106 @@
#include <SPI.h>
#include <SD.h>
#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(">");
}
}