Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Mit diesem Notensequencer können "Wahrscheinlichkeiten" für jede Note eingegeben werden.
- Nach dem Einschalten werden die aktuellen Potipositionen auf % "Wahrscheinlichkeit" umgerechnet und in einem
- array hinterlegt. Es wird die Note mit der höchsten Wahrscheinlichkeit ermittelt.
- Nach Eingang eines ersten Clocksignals soll die Note mit der höchsten WHK gespielt werden.
- Danach werden der Note 10% wahrscheinlichkeit abgezogen und der nächste maximalwert ermittelt.
- Nach einem neuelichen Clocksignal wird der gerade ermittelte maximalwert ausgegeben, 10%WHK der gerade
- gespielten Note abgezogen und der nächste Maximalwert ermittelt.
- Eine Note wird mitunter solange gespielt (dabei weiterhin ein Abzug von 10& WHK bei jedem Clocksignal),
- bis es eine andere Note gibt deren WHK mittlerweile höher ist.
- Wenn die WHK für eine Note unter 10 fällt wird die Position des jeweiligen AnalogInputs abgefragt
- und als neue WHK herangezogen.
- Optional:
- * **Wenn alle Noten ein ähnliches WHK Level erreicht haben kann mittels random die WHK für die Notenfolge variiert werden.
- * **%-Abzug der WHK kann variiert werden
- * **Selectable Octave Range
- */
- #include <MyMCP4725.h>
- MyMCP4725 DAC(0x60); //I2C-Adress = 0x60
- const int clockPin = 9;
- const int pinC = 0; //setze Wert 0 für "pinC"
- const int pinCs = 1; //setze Wert 1 für "pinC#"
- const int pinD = 2; //setze Wert 2 für "pinD"
- const int pinDs = 3; //setze Wert 3 für "pinD#"
- //Notes-Probability
- int probC = 0; //setze (vorerst) einen Wert für probC
- int probCs = 0; //setze (vorerst) einen Wert für probC#
- int probD = 0; //setze (vorerst) einen Wert für probD
- int probDs = 0; //setze (vorerst) einen Wert für probD#
- #define analogReadArraysize 4
- int analogReadArray[analogReadArraysize]; // erstelle ein Array mit analogReadArraysize Werten, hier werden die analogreads der einzelnen noten für den durchlauf gespeichert
- 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)
- int clockState = 0; // Variable to save tasterstate
- bool dacStatus = false;
- void setup() {
- Serial.begin(115200);
- if (DAC.isReady())
- {
- Serial.println("\nDAC in Ordnung!");
- dacStatus = true;
- }
- else Serial.println("DAC Fehler!");
- probC = (int)map(analogRead(pinC), 0, 1023, 0, 100); //lies im setup durchlauf, nach dem einschalten die potiwerte
- analogReadArray[0] = probC; //und setze den Wert in das analogReadArray, erster Index
- probCs = (int)map(analogRead(pinCs), 0, 1023, 0, 100); //lies im setup durchlauf, nach dem einschalten die potiwerte
- analogReadArray[1] = probCs; //und setze den Wert in das analogReadArray, zweiter Index
- probD = (int)map(analogRead(pinD), 0, 1023, 0, 100); //lies im setup durchlauf, nach dem einschalten die potiwerte
- analogReadArray[2] = probD; //und setze den Wert in das analogReadArray, dritter Index
- probDs = (int)map(analogRead(pinDs), 0, 1023, 0, 100); //lies im setup durchlauf, nach dem einschalten die potiwerte
- analogReadArray[3] = probDs; //und setze den Wert in das analogReadArray, vierter Index
- }
- void loop() {
- //clockState = digitalRead(clockPin);
- if (dacStatus) {
- //if (clockState == HIGH) {
- delay(100);
- int maxVal = 0;
- int maxValIndex = 0;
- for (int i = 0; i < analogReadArraysize; i++) {
- if (analogReadArray[i] > maxVal) {
- maxVal = analogReadArray[i];
- maxValIndex = i;
- }
- }
- DAC.setVoltage(outPut[maxValIndex]);
- analogReadArray[maxValIndex] = analogReadArray[maxValIndex] * 0.9; //10% abziehen
- Serial.print(maxValIndex);
- Serial.print("--");
- Serial.print(probC);
- Serial.print("-");
- Serial.print(probCs);
- Serial.print("-");
- Serial.print(probD);
- Serial.print("-");
- Serial.print(probDs);
- Serial.print("--");
- Serial.println(DAC.readRegister());
- delay(500);
- // }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement