Advertisement
degu234

subtracting sequencer1

Sep 6th, 2021
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Mit diesem Notensequencer können "Wahrscheinlichkeiten" für jede Note eingegeben werden.
  2.  *  Nach dem Einschalten werden die aktuellen Potipositionen auf % "Wahrscheinlichkeit" umgerechnet und in einem
  3.  *  array hinterlegt. Es wird die Note mit der höchsten Wahrscheinlichkeit ermittelt.
  4.  *  Nach Eingang eines ersten Clocksignals soll die Note mit der höchsten WHK gespielt werden.
  5.  *  Danach werden der Note 10% wahrscheinlichkeit abgezogen und der nächste maximalwert ermittelt.
  6.  *  Nach einem neuelichen Clocksignal wird der gerade ermittelte maximalwert ausgegeben, 10%WHK der gerade
  7.  *  gespielten Note abgezogen und der nächste Maximalwert ermittelt.
  8.  *  
  9.  *  Eine Note wird mitunter solange gespielt (dabei weiterhin ein Abzug von 10& WHK bei jedem Clocksignal),
  10.  *  bis es eine andere Note gibt deren WHK mittlerweile höher ist.
  11.  *  Wenn die WHK für eine Note unter 10 fällt wird die Position des jeweiligen AnalogInputs abgefragt
  12.  *  und als neue WHK herangezogen.
  13.  *  Optional:
  14.  *  **Wenn alle Noten ein ähnliches WHK Level erreicht haben kann mittels random die WHK für die Notenfolge variiert werden.
  15.  *  **%-Abzug der WHK kann variiert werden
  16.  *  **Selectable Octave Range
  17.  
  18. */
  19. #include <MyMCP4725.h>
  20. MyMCP4725 DAC(0x60); //I2C-Adress = 0x60
  21.  
  22. const int pinC = 0;           //setze Wert 0 für "pinC"
  23. const int pinCs = 1;           //setze Wert 1 für "pinC#"
  24. const int pinD = 2;           //setze Wert 2 für "pinD"
  25. const int pinDs = 3;           //setze Wert 3 für "pinD#"
  26.  
  27. //Notes-Probability
  28. int probC = 0;               //setze (vorerst) einen Wert für probC
  29. int probCs = 0;               //setze (vorerst) einen Wert für probC#
  30. int probD = 0;               //setze (vorerst) einen Wert für probD
  31. int probDs = 0;               //setze (vorerst) einen Wert für probD#
  32. int analogReadArray[4];  // erstelle ein Array mit 4 Werten, hier werden die analogreads der einzelnen noten für den durchlauf gespeichert
  33. float outPut[4] = {0, 0.08333, 0.16667, 0.25};             //Ausgangsspannungen für den DAC entsprechend den Noten C, C#, D, D# im 1V/Oktave System (12Noten/1V + Oktave)
  34.  
  35. int maxVal = analogReadArray[0];
  36.  
  37. bool dacStatus = false;
  38. void setup() {
  39.   Serial.begin(115200);
  40.  
  41.   if (DAC.isReady())
  42.   {
  43.     Serial.println("\nDAC in Ordnung!");
  44.     dacStatus = true;
  45.   }
  46.   else Serial.println("DAC Fehler!");
  47.  
  48.   probC = (int)map(analogRead(pinC), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  49.   analogReadArray[0] = probC;                          //und setze den Wert in das analogReadArray, erster Index
  50.   probCs = (int)map(analogRead(pinCs), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  51.   analogReadArray[1] = probCs;                          //und setze den Wert in das analogReadArray, zweiter Index
  52.   probD = (int)map(analogRead(pinD), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  53.   analogReadArray[2] = probD;                          //und setze den Wert in das analogReadArray, dritter Index
  54.   probDs = (int)map(analogRead(pinDs), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  55.   analogReadArray[3] = probDs;                          //und setze den Wert in das analogReadArray, vierter Index
  56. }
  57.  
  58. void loop() {
  59.  
  60.   for (int i = 0; i < (sizeof(analogReadArray) / sizeof(analogReadArray[0])); i++) {
  61.     maxVal = max(analogReadArray[i], maxVal);
  62.   }
  63.  
  64.   //Ausgabe des Potiwertes im Normal-Modus
  65.   DAC.setVoltage(outPut[maxVal]);
  66.  
  67.   delay(100);
  68. }
  69.  
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement