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 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#
- int analogReadArray[4]; // erstelle ein Array mit 4 Werten, hier werden die analogreads der einzelnen noten für den durchlauf gespeichert
- 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)
- int maxVal = analogReadArray[0];
- 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() {
- for (int i = 0; i < (sizeof(analogReadArray) / sizeof(analogReadArray[0])); i++) {
- maxVal = max(analogReadArray[i], maxVal);
- }
- //Ausgabe des Potiwertes im Normal-Modus
- DAC.setVoltage(outPut[maxVal]);
- delay(100);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement