Advertisement
degu234

subtracting sequencer2 ohne dac

Sep 7th, 2021
81
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.  
  29. //Notes-Probability
  30. int probC = 0;               //setze (vorerst) einen Wert für probC
  31. int probCs = 0;               //setze (vorerst) einen Wert für probC#
  32. int probD = 0;               //setze (vorerst) einen Wert für probD
  33. int probDs = 0;               //setze (vorerst) einen Wert für probD#
  34. int analogReadArraysize = 4;
  35. int analogReadArray[4];  // erstelle ein Array mit 4 Werten, hier werden die analogreads der einzelnen noten für den durchlauf gespeichert
  36. float outPut[4] = {3, 4, 4.5, 5};             //Ausgangsspannungen für den DAC entsprechend den Noten C, C#, D, D# im 1V/Oktave System (12Noten/1V + Oktave)
  37.  
  38. int maxVal = analogReadArray[0];
  39. int clockState = 0;         // Variable to save tasterstate
  40. int mode = 0;
  41. //bool dacStatus = false;
  42.  
  43. void setup() {
  44.   Serial.begin(115200);
  45. //  DAC.setVoltage(5);
  46. //  if (DAC.isReady())
  47. //  {
  48. //    Serial.println("\nDAC in Ordnung!");
  49. //    dacStatus = true;
  50. //  }
  51. //  else Serial.println("DAC Fehler!");
  52.  
  53.  
  54.   pinMode(clockPin, INPUT);
  55.  
  56.   probC =  map(analogRead(pinC), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  57.   probCs = map(analogRead(pinCs), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  58.   probD =  map(analogRead(pinD), 0, 1023, 0, 100);                            //lies im setup durchlauf, nach dem einschalten die potiwerte
  59.   probDs = map(analogRead(pinDs), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  60.    
  61.   analogReadArray[0] = probC;
  62.   analogReadArray[1] = probCs;
  63.   analogReadArray[2] = probD;
  64.   analogReadArray[3] = probDs;                                
  65. }
  66.  
  67. void loop() {
  68.   clockState = digitalRead(clockPin);
  69.   int maxValIndex = 0;
  70.  
  71.   //if (dacStatus) {
  72.     int maxVal = 0;
  73.  
  74.     for (int i = 0; i < analogReadArraysize; i++) {
  75.       if (analogReadArray[i] > maxVal) {
  76.         maxVal      = analogReadArray[i];
  77.         maxValIndex = i;
  78.       }
  79.     }
  80.    // if (clockState == HIGH) {
  81.       switch (maxValIndex) {
  82.         case 0:
  83.          // DAC.setVoltage(outPut[0]);
  84.           probC = probC - 10;
  85.           if (probC <= 10) {
  86.         probC = (int)map(analogRead(pinC), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  87.           }
  88.           break;
  89.         case 1:
  90.           //DAC.setVoltage(outPut[1]);
  91.           probCs = probCs - 10;
  92.           if (probCs <= 10) {
  93.         probCs = (int)map(analogRead(pinCs), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  94.           }
  95.           break;
  96.         case 2:
  97.          // DAC.setVoltage(outPut[2]);
  98.           probD = probD - 10;
  99.           if (probD <= 10) {
  100.         probD = (int)map(analogRead(pinD), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  101.          
  102.           }
  103.           break;
  104.         case 3:
  105.          // DAC.setVoltage(outPut[3]);
  106.           probDs = probDs - 10;
  107.           if (probDs <= 10) {
  108.         probDs = (int)map(analogRead(pinDs), 0, 1023, 0, 100);                           //lies im setup durchlauf, nach dem einschalten die potiwerte
  109.           }
  110.           break;
  111.         default:                                                                  //next taster push brings us back to page 0
  112.           mode = 0;
  113.       }
  114.      
  115.         analogReadArray[0] = probC;                          //und setze den Wert in das analogReadArray, erster Index
  116.         analogReadArray[1] = probCs;                          //und setze den Wert in das analogReadArray, erster Index
  117.         analogReadArray[2] = probD;                          //und setze den Wert in das analogReadArray, erster Index
  118.         analogReadArray[1] = probDs;                          //und setze den Wert in das analogReadArray, erster Index
  119.      
  120.  
  121.       //Ausgabe des Potiwertes im Normal-Modus
  122.       //DAC.setVoltage(outPut[maxVal]);
  123.       Serial.print(maxVal);
  124.       Serial.print("--");
  125.       Serial.print(maxValIndex);
  126.       Serial.print("--");
  127.       Serial.print(probC);
  128.       Serial.print("-");
  129.       Serial.print(probCs);
  130.       Serial.print("-");
  131.       Serial.print(probD);
  132.       Serial.print("-");
  133.       Serial.println(probDs);
  134.       //Serial.print("--");
  135.       //Serial.println(DAC.readRegister());
  136.  
  137.       delay(500);
  138.     //}
  139.   //}
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement