107 lines
2.5 KiB
C++
107 lines
2.5 KiB
C++
#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(">");
|
|
}
|
|
}
|