From a1eb61a6a92404b712e16d2bf0bc96d6f756dd6b Mon Sep 17 00:00:00 2001 From: Mark van Renswoude Date: Wed, 24 Feb 2021 19:40:59 +0100 Subject: [PATCH] Updated terminology in Arduino sketch --- Arduino/MassiveKnob/MassiveKnob.ino | 79 ++++++++++--------- .../Worker/SerialWorker.cs | 8 +- 2 files changed, 43 insertions(+), 44 deletions(-) diff --git a/Arduino/MassiveKnob/MassiveKnob.ino b/Arduino/MassiveKnob/MassiveKnob.ino index ec70437..9e795ee 100644 --- a/Arduino/MassiveKnob/MassiveKnob.ino +++ b/Arduino/MassiveKnob/MassiveKnob.ino @@ -5,10 +5,10 @@ * */ // Set this to the number of potentiometers you have connected -const byte KnobCount = 1; +const byte AnalogInputCount = 1; // For each potentiometer, specify the port -const byte KnobPin[KnobCount] = { +const byte AnalogInputPin[AnalogInputCount] = { A2 }; @@ -38,10 +38,10 @@ enum OutputMode { }; OutputMode outputMode = Binary; -byte volume[KnobCount]; -unsigned long lastChange[KnobCount]; -int analogReadValue[KnobCount]; -float emaValue[KnobCount]; +byte analogValue[AnalogInputCount]; +unsigned long lastChange[AnalogInputCount]; +int analogReadValue[AnalogInputCount]; +float emaValue[AnalogInputCount]; unsigned long currentTime; unsigned long lastPlot; @@ -55,23 +55,23 @@ void setup() // Seed the moving average - for (byte knobIndex = 0; knobIndex < KnobCount; knobIndex++) + for (byte analogInputIndex = 0; analogInputIndex < AnalogInputCount; analogInputIndex++) { - pinMode(KnobPin[knobIndex], INPUT); - emaValue[knobIndex] = analogRead(KnobPin[knobIndex]); + pinMode(AnalogInputPin[analogInputIndex], INPUT); + emaValue[analogInputIndex] = analogRead(AnalogInputPin[analogInputIndex]); } for (byte seed = 1; seed < EMASeedCount - 1; seed++) - for (byte knobIndex = 0; knobIndex < KnobCount; knobIndex++) - getVolume(knobIndex); + for (byte analogInputIndex = 0; analogInputIndex < AnalogInputCount; analogInputIndex++) + getAnalogValue(analogInputIndex); // Read the initial values currentTime = millis(); - for (byte knobIndex = 0; knobIndex < KnobCount; knobIndex++) + for (byte analogInputIndex = 0; analogInputIndex < AnalogInputCount; analogInputIndex++) { - volume[knobIndex] = getVolume(knobIndex); - lastChange[knobIndex] = currentTime; + analogValue[analogInputIndex] = getAnalogValue(analogInputIndex); + lastChange[analogInputIndex] = currentTime; } } @@ -86,20 +86,20 @@ void loop() // is acceptable and saves a few calls to millis. currentTime = millis(); - // Check volume knobs - byte newVolume; - for (byte knobIndex = 0; knobIndex < KnobCount; knobIndex++) + // Check analog inputs + byte newAnalogValue; + for (byte analogInputIndex = 0; analogInputIndex < AnalogInputCount; analogInputIndex++) { - newVolume = getVolume(knobIndex); + newAnalogValue = getAnalogValue(analogInputIndex); - if (newVolume != volume[knobIndex] && (currentTime - lastChange[knobIndex] >= MinimumInterval)) + if (newAnalogValue != analogValue[analogInputIndex] && (currentTime - lastChange[analogInputIndex] >= MinimumInterval)) { if (active) // Send out new value - outputVolume(knobIndex, newVolume); + outputAnalogValue(analogInputIndex, newAnalogValue); - volume[knobIndex] = newVolume; - lastChange[knobIndex] = currentTime; + analogValue[analogInputIndex] = newAnalogValue; + lastChange[analogInputIndex] = currentTime; } } @@ -170,13 +170,16 @@ void processHandshakeMessage() { case Binary: Serial.write('H'); - Serial.write(KnobCount); + Serial.write(AnalogInputCount); + Serial.write((byte)0); + Serial.write((byte)0); + Serial.write((byte)0); break; case PlainText: Serial.print("Hello! I have "); - Serial.print(KnobCount); - Serial.println(" knobs."); + Serial.print(AnalogInputCount); + Serial.println(" analog inputs and no support yet for everything else."); break; } @@ -198,35 +201,35 @@ void processQuitMessage() } -byte getVolume(byte knobIndex) +byte getAnalogValue(byte analogInputIndex) { - analogRead(KnobPin[knobIndex]); + analogRead(AnalogInputPin[analogInputIndex]); // Give the ADC some time to stabilize delay(10); - analogReadValue[knobIndex] = analogRead(KnobPin[knobIndex]); - emaValue[knobIndex] = (EMAAlpha * analogReadValue[knobIndex]) + ((1 - EMAAlpha) * emaValue[knobIndex]); + analogReadValue[analogInputIndex] = analogRead(AnalogInputPin[analogInputIndex]); + emaValue[analogInputIndex] = (EMAAlpha * analogReadValue[analogInputIndex]) + ((1 - EMAAlpha) * emaValue[analogInputIndex]); - return map(emaValue[knobIndex], 0, 1023, 0, 100); + return map(emaValue[analogInputIndex], 0, 1023, 0, 100); } -void outputVolume(byte knobIndex, byte newVolume) +void outputAnalogValue(byte analogInputIndex, byte newValue) { switch (outputMode) { case Binary: Serial.write('V'); - Serial.write(knobIndex); - Serial.write(newVolume); + Serial.write(analogInputIndex); + Serial.write(newValue); break; case PlainText: - Serial.print("Volume #"); - Serial.print(knobIndex); + Serial.print("Analog value #"); + Serial.print(analogInputIndex); Serial.print(" = "); - Serial.println(newVolume); + Serial.println(newValue); break; } } @@ -234,7 +237,7 @@ void outputVolume(byte knobIndex, byte newVolume) void outputPlotter() { - for (byte i = 0; i < KnobCount; i++) + for (byte i = 0; i < AnalogInputCount; i++) { if (i > 0) Serial.print('\t'); @@ -243,7 +246,7 @@ void outputPlotter() Serial.print('\t'); Serial.print(emaValue[i]); Serial.print('\t'); - Serial.print(volume[i]); + Serial.print(analogValue[i]); } Serial.println(); diff --git a/Windows/MassiveKnob.Plugin.SerialDevice/Worker/SerialWorker.cs b/Windows/MassiveKnob.Plugin.SerialDevice/Worker/SerialWorker.cs index 56c7b9b..052fb84 100644 --- a/Windows/MassiveKnob.Plugin.SerialDevice/Worker/SerialWorker.cs +++ b/Windows/MassiveKnob.Plugin.SerialDevice/Worker/SerialWorker.cs @@ -174,13 +174,9 @@ namespace MassiveKnob.Plugin.SerialDevice.Worker if ((char) response == 'H') { - // TODO support multiple I/O's - var knobCount = serialPort.ReadByte(); - if (knobCount > -1) - { - specs = new DeviceSpecs(knobCount, 0, 0, 0); + specs = new DeviceSpecs(serialPort.ReadByte(), serialPort.ReadByte(), serialPort.ReadByte(), serialPort.ReadByte()); + if (specs.AnalogInputCount > -1 && specs.DigitalInputCount > -1 && specs.AnalogOutputCount > -1 && specs.DigitalOutputCount > -1) return true; - } } else CheckForError(serialPort, (char)response);