before i get started im 15 and am kind of a rookie to arduino:
so i have been trying to make music with 2 nema bipolar stepper motors and i ran into this code
https://create.arduino.cc/projecthub/iot_lover/arduino-making-music-using-step-motors-a477d5?f=1
i need to use it with a this stepper driver Adafruit Motor/Stepper/Servo Shield for Arduino kit [v1.2] : ID 81 : $19.50 : Adafruit Industries, Unique & fun DIY electronics and kits
i honestly dont know how to do this
my code so far is below
#include <Stepper.h>
#include <AFMotor.h>
#include <Adafruit_CircuitPlayground.h>
#include <Adafruit_Circuit_Playground.h>
//#include <math.h>
//#include <Phpoc.h>
//#include <PhpocExpansion.h>
Stepper step1(13);
Stepper step2(14);
Stepper steps[2] = {step1, step2};
void stepPlaySetup(int play_id, int vref = 8, int mode = 2, int accel = 10000);
void setup() {
Serial.begin(9600);
while(!Serial)
;
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
Expansion.begin();
stepPlaySetup(0);
stepPlaySetup(1);
stepPlayTempo(38);
play_marble_machine_song();
}
void loop() {
}
const char melody1a[] PROGMEM = "5E2.67 4B2 4A8 4G8 4A4 4B4 4G8 4A8 5D8 R2.67 4B2 4A8 4G8 4A4 4F#4 4G8 4A8 5D8";
const char melody1b[] PROGMEM = "R2.67 4B2 5D8 5C8 4B4 4A4 4G8 4A8 4E8 R8 4C8 4E8 4B8 3B8 4C8 4D8 5D8 5C8 4B4 4A4 4G8 4A8 5E8";
const char melody1c[] PROGMEM = "R2.67 4B2 4A8 4G8 4A4 4B4 4G8 4A8 5D8 R2.67 4B2 5D8 5C8 4B4 4A4 4G8 4A8 5D8";
const char melody1d[] PROGMEM = "R2.67 4B2.67 4A8 5E8 R8 4B4 4A4 4G8 4F#8 4E8 R8 3B8 4C8 4F#8 4C8 4E8 4G8 4D8 4F#8 4A8 3B8 4B8 4D8 4G8 4A8 5E8";
const char chord1a[] PROGMEM = "3E4 4E2.67 3E8 4E4 3E4 4E2.67 3E8 4E4 3G4 4G2.67 3G8 4G4 3G4 4G2.67 3G8 4G4";
const char chord1b[] PROGMEM = "3D4 4D2.67 3D8 4D4 3D4 4D2.67 3D8 4D4 3C4 4C2.67 3C8 4C4 3D4 4D2.67 3D8 4D4";
const char chord1c[] PROGMEM = "3E4 4E2.67 3E8 4E4 3E4 4E2.67 3E8 4E4 3G4 4G2.67 3G8 4G4 3G4 4G2.67 3G8 4G4";
const char chord1d[] PROGMEM = "3D4 4D2.67 3D8 4D4 3D4 4D2.67 3D8 4D8 3C4 4C2.67 3C8 4C4 3D4 4D2.67 3D8 4D4";
const char* const melody_table[] PROGMEM = { melody1a, melody1b, melody1c, melody1d };
const char* const chord_table[] PROGMEM = { chord1a, chord1b, chord1c, chord1d };
char buffer[110];
int melody[55];
int chord[55];
byte melody_len, chord_len;
void play_marble_machine_song() {
for (byte i = 0; i < 4; i++) {
strcpy_P(buffer, (char*)pgm_read_word(&(melody_table*)));*
- melody_len = stepPlayEncode(buffer, melody);*
strcpy_P(buffer, (char*)pgm_read_word(&(chord_table*)));
chord_len = stepPlayEncode(buffer, chord);
_ stepPlayChangeDir();_
stepPlayHarmony(melody, chord, melody_len, chord_len);
//stepPlayMelody(melody, melody_len);
_ }_
_ Serial.println("End!");_
_}_
_/ Library /_
int stepPlaySpeed = 1000; // ms per bar
int stepPlayDirection = +1;
void stepPlaySetup(int play_id, int vref = 8, int mode = 2, int accel = 10000) {
steps[play_id].setVrefStop(2);
steps[play_id].setVrefDrive(vref);
steps[play_id].setMode(mode);
steps[play_id].setAccel(accel);
_}_
void stepPlayTempo(int tempo) {
_ stepPlaySpeed = (int)(1000.0 / (tempo / 60.0));_
_}_
void stepPlayChangeDir() {
_ stepPlayDirection = -1;_
_}_
int stepPlayEncode(char score, int score_encoded) {
_ char note[10];_
* int score_len = 0;
int score_encoded_id = 0;
_ int blankPos = -1;_
_ int blankPosNext = 0;_
_ while(blankPosNext != -1) {_
float dur_fp;
long dur_ms;
_ long freq;_
_ blankPosNext = blankPos + 1;_
_ while(score[blankPosNext] != ' ') {_
_ blankPosNext++;_
_ if(score[blankPosNext] == 0) {_
score_len = blankPosNext;
_ blankPosNext = -1;_
_ break;_
_ }_
_ }_
_ if(blankPosNext >= 0) {_
_ int i;_
_ for(i = blankPos + 1; i < blankPosNext; i++)_
_ note[i - (blankPos + 1)] = score;
note[i - (blankPos + 1)] = 0;
blankPos = blankPosNext;
if(note[0] == ' ')
continue;
} else {
int i;_
for(i = blankPos + 1; i < score_len; i++)
_ note[i - (blankPos + 1)] = score;
note[i - (blankPos + 1)] = 0;
}
if(note[0] == 'R') { / rest /
note[0] = '0';_
dur_fp = atof(note);
dur_ms = (long)(stepPlaySpeed / dur_fp);
_ freq = 0;
} else { / tone /
int tone = (note[0] - 48) * 12; // octave * 12_
_ // C C# D D# E F F# G G# A A# B*
* // 0 1 2 3 4 5 6 7 8 9 10 11*
* switch(note[1]) {
case 'C':
tone += 0;
break;
case 'D':
tone += 2;
break;
case 'E':
tone += 4;
break;
case 'F':
tone += 5;
break;
case 'G':
tone += 7;
break;
case 'A':
tone += 9;
break;
case 'B':
tone += 11;
break;
default:_
Serial.print("encode_score: unknown tone: ");
_ Serial.println(note);
return 0;
}
if(note[2] == '#') {
tone++;
note[0] = '0';
note[1] = '0';
note[2] = '0';
} else if(note[2] == 'b') {
tone--;
note[0] = '0';
note[1] = '0';
note[2] = '0';
} else {
note[0] = '0';
note[1] = '0';
}_
dur_fp = atof(note);
dur_ms = (long)(stepPlaySpeed / dur_fp);
_ int octave = tone / 12;
tone = tone % 12;
long freqA = 440.0 * pow(2, (octave - 4));
freq = (int)(freqA * pow(2, (tone - 9) / 12.0));
}_
score_encoded[score_encoded_id++] = freq;
score_encoded[score_encoded_id++] = dur_ms;
_ }_
return score_encoded_id;
_}_
void stepPlayMelody(int melody, int melody_len) {
int melody_count = 0;
* while(melody_count < melody_len) {
int freq = melody[melody_count++];
int dur_ms = melody[melody_count++];
_ if(freq) {
steps[0].setSpeed(freq);
steps[0].stepGoto(stepPlayDirection * 1000000);_
delay(dur_ms);
_ steps[0].stop(0);
} else // zero frequency is 'rest'_
delay(dur_ms);
_ }
}
void stepPlayHarmony(int *melody1, int *melody2, int melody1_len, int melody2_len) {
int melody[2] = {melody1, melody2};_
unsigned long melody_start_ms = millis();
* unsigned long melody_next_ms[2] = { 0, 0 };
int melody_count[2] = { 0, 0 };
int melody_len[2] = { melody1_len, melody2_len };
while((melody_count[0] < melody_len[0] ) || (melody_count[1] < melody_len[1] ) || melody_next_ms[0] || melody_next_ms[1]) {
_ for(int i = 0; i < 2; i++) {_
if(melody_next_ms) {
if(melody_next_ms <= millis()) {
_ steps.stop(0);
melody_next_ms = 0;
}
} else {_
if(melody_count < melody_len ) {
int freq = melody[melody_count];
int dur_ms = melody[melody_count + 1];
melody_count += 2;
_ if(freq) {
steps.stop(0);
steps.setSpeed(freq);
steps.stepGoto(stepPlayDirection * 1000000);
Serial.print("freq: ");
Serial.print(freq);_
Serial.print(", dur_ms: ");
Serial.println(dur_ms);
_ }
melody_next_ms = millis() + dur_ms;
}
}
}
}
}*
if anyone could help me or even be so nice as to do it for me that would be great
i will check on this topic daily so please post as soon as possible. Thank you_