פרסומת

אורגן Arduino

הסרטון הבא מציג דוגמא לשימוש בבקר Arduino עם רמקול קטן וחמישה לדים.

התוכנה המפעילה את המעגל כתובה בשפת Processing. התוכנה עצמה מכילה בבסיסה שני מערכים. באחד מצויים רצף התווים לניגון ובשני מצויים האורכים לניגון (אורך ההשמעה לכל תו). ניתן עוד לשכלל את התוכנה להוסיף תווים נוספים ע"פ התדר שלהם. ולשנות את אורכי הניגון למשתני float למצבי נגינה מרובים. (בסרטון מושמעת מנגינת הסימפוניה התשיעית של בטהובן)

 

הנה הקוד הבסיסי של התוכנה:

[cce lang="java"]

int speakerPin = 13;
int potPin = 2; 
int length= 54;
char notes[] = "efggfedccdeedefggfedccdedcdecddecdfedcddefggfedccdedc";
float beats[]= {2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2};

int tempo = 190;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < length; i++) {
    tempo = analogRead(potPin); 
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }
    // pause between notes
    delay(tempo / 2);
  }
}

[/cce]

עדיין אין תגובות למאמר זה

הגב למאמר זה

כתובת האימייל שלך לא תפורסם


*