Advertisement
degu234

subtracting sequencer2

Sep 7th, 2021
60
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 clockPin = 9;
  23. const int pinC = 0;           //setze Wert 0 für "pinC"
  24. const int pinCs = 1;           //setze Wert 1 für "pinC#"
  25. const int pinD = 2;           //setze Wert 2 für "pinD"
  26. const int pinDs = 3;           //setze Wert 3 für "pinD#"
  27.  
  28. //Notes-Probability
  29. int probC = 0;               //setze (vorerst) einen Wert für probC
  30. int probCs = 0;               //setze (vorerst) einen Wert für probC#
  31. int probD = 0;               //setze (vorerst) einen Wert für probD
  32. int probDs = 0;               //setze (vorerst) einen Wert für probD#
  33. #define analogReadArraysize 4
  34. int analogReadArray[analogReadArraysize];  // erstelle ein Array mit analogReadArraysize Werten, hier werden die analogreads der einzelnen noten für den durchlauf gespeichert
  35. float outPut[4] = {0, 2, 3, 4};             //Ausgangsspannungen für den DAC entsprechend den Noten C, C#, D, D# im 1V/Oktave System (12Noten/1V + Oktave)
  36. int clockState = 0;         // Variable to save tasterstate
  37.  
  38. bool dacStatus = false;
  39. void setup() {
  40.   Serial.begin(115200);
  41.  
  42.   if (DAC.isReady())
  43.   {
  44.     Serial.println("\nDAC in Ordnung!");
  45.     dacStatus = true;
  46.   }
  47.   else Serial.println("DAC Fehler!");
  48.  
  49.   probC = (int)map(analogRead(pinC), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  50.   analogReadArray[0] = probC;                          //und setze den Wert in das analogReadArray, erster Index
  51.   probCs = (int)map(analogRead(pinCs), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  52.   analogReadArray[1] = probCs;                          //und setze den Wert in das analogReadArray, zweiter Index
  53.   probD = (int)map(analogRead(pinD), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  54.   analogReadArray[2] = probD;                          //und setze den Wert in das analogReadArray, dritter Index
  55.   probDs = (int)map(analogRead(pinDs), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  56.   analogReadArray[3] = probDs;                          //und setze den Wert in das analogReadArray, vierter Index
  57. }
  58.  
  59. void loop() {
  60.   //clockState = digitalRead(clockPin);
  61.   if (dacStatus)  {
  62.  
  63.     //if (clockState == HIGH) {
  64.       delay(100);
  65.       int maxVal = 0;
  66.       int maxValIndex = 0;
  67.       for (int i = 0; i < analogReadArraysize; i++) {
  68.         if (analogReadArray[i] > maxVal) {
  69.           maxVal      = analogReadArray[i];
  70.           maxValIndex = i;
  71.         }
  72.       }
  73.  
  74.       DAC.setVoltage(outPut[maxValIndex]);
  75.  
  76.       analogReadArray[maxValIndex] = analogReadArray[maxValIndex] * 0.9; //10% abziehen
  77.  
  78.       Serial.print(maxValIndex);
  79.       Serial.print("--");
  80.       Serial.print(probC);
  81.       Serial.print("-");
  82.       Serial.print(probCs);
  83.       Serial.print("-");
  84.       Serial.print(probD);
  85.       Serial.print("-");
  86.       Serial.print(probDs);
  87.       Serial.print("--");
  88.       Serial.println(DAC.readRegister());
  89.       delay(500);
  90.    // }
  91.   }
  92. }
  93.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement