4-Digit Display beinflusst Read von Schiebepotentiometer

Hi!

Ich bin nicht so firm mit der Elektronik, daher wende ich mich mit der Bitte um Unterstützung an das Forum. Ich habe einen Arduino Pro Micro, an dem ich ein Schiebeptentiometer hängen habe, dass auch wunderbar auslesen kann. Sobald ich jedoch ein 4-digit display (HW-069) an den Arduino mit dran hänge, beginnen die Werte des Schiebepotentiometers recht stark zu schwanken. Muss da irgendwo eventuell noch ein Widerstand hin um die beiden Komponenten irgendwie quasi zu "entkoppeln"?

Vielen Dank für Eure Hilfe!

Dann ist wohl deine Spannung nicht stabil.
Die solltest du mal nachmessen.

Hallo,
das sieht entweder nach einer nicht stabilen Spannungsversorgung oder nach "schlechten" Steckvebindungen aus. Tausche mal zum Testen die rot/weissen Drähte gegen Dupontkabel aus.
Und mit einem 470µF Kondensator an der Spnnungschiene könntest du testweise versuchen die Spannung zu glätten.
Ansonsten hilft eine zweite Spannungsquelle für das Pot.

Und wo ist der Sketch den Du verendest?
Grüße Uwe

Du meinst wohl 470µF?

jepp, danke für den Hinweis

Der Sketch ist noch im Entstehen aber hier wie er bisher aussieht (den Taster habe ich beim Foto zuerst weggelassen, der Einfachheit halber). Eine zweite Spannungsquelle ist leider nicht so einfach möglich, da das Ganze ein Midi Controller werden soll und nur via USB gespeist sein soll - oder ist das anders gemeint?

#include <TM1637Display.h>
#include <MIDIUSB.h>

/************* FADER ****************
 * **********************************
 * **********************************/
class Fader{
  private:
    int _pin;
    int _midiChannel;
    int _CCNum;
    int _readThreshold = 2;
    int _oldValue = -1;
    int _oldMidiValue = -1;

    void controlChange(byte channel, byte control, byte value) {
      midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
      MidiUSB.sendMIDI(event);
    }

  public:
    Fader(int pin, int midiChannel, int CCNum){
      _pin = pin;
      _midiChannel = midiChannel;
      _CCNum = CCNum;

      pinMode(_pin, INPUT);
    }

    void readValue(){
      int val = analogRead(_pin);

      if(abs(_oldValue - val) > _readThreshold){
        //int midiValue = map(val, 0, 1023, 0, 127);
        int midiValue = val/8;
        if(midiValue != _oldMidiValue){
          controlChange(_midiChannel, _CCNum, val/8);
          MidiUSB.flush();
          _oldMidiValue = midiValue;
        }
        _oldValue = val;
      }

    }
  
};

/************* PUSHBUTTON ***********
 * **********************************
 * **********************************/

class PushButton{
  private:
    int _pin;
    bool _isPressed = false;
    bool _isActive = true;
    int _count = 111;
    long _startTime = 0;
    int _setupMode = 0; 
    TM1637Display* _display;

  public:
    PushButton(int pin, TM1637Display *disp) throw() {
      _pin = pin;
      _display = disp;

      pinMode(_pin, INPUT);
    }

    void readState(){

      int state = digitalRead(_pin);

      if(state == LOW){
        if (_isPressed && _isActive && _setupMode == 0){
          _count++;
          _display->showNumberDec(_count);
        }
        _isPressed = false;
        _isActive = true;

      }        
      else if(state == HIGH && _isActive && !_isPressed){
        _isPressed = true;
        _startTime = millis();
      }
      else if(_isPressed && _isActive){

        if((millis() - _startTime) > 1500){

          if(_setupMode == 0){                //faderBox is now in change cc mode
            _display->showNumberDec(1);
            _setupMode = 1;
            _isActive = false;
          }
          else if(_setupMode == 1){
            _display->showNumberDec(0);      //faderBox leaves change cc mode and stores new values in eprom
            _setupMode = 0;
            _isActive = false;
          }

        }
          
      }
      
    }
};

/************* MAIN *****************
 * **********************************
 * **********************************/

const int FADER_COUNT = 3;
Fader faders[] = {
    Fader(A0, 1, 1),
    Fader(A1, 1, 11),
    Fader(A2, 1, 12),
};

TM1637Display display(2, 3);
uint8_t displayValue[4];
PushButton button(4, &display);


void setup(){
    Serial.begin(9600);
    display.setBrightness(1); //0-7
    //displayValue[0] = SEG_D | SEG_E | SEG_G;
    displayValue[0] = display.encodeDigit(12);
    displayValue[1] = display.encodeDigit(1);
    displayValue[2] = display.encodeDigit(2);
    displayValue[3] = display.encodeDigit(7);
    //display.showNumberDec(2323);
    display.setSegments(displayValue);

    pinMode(4, INPUT);

}

void loop(){

  button.readState();
  
  for(int i = 0; i < FADER_COUNT; i++)
    faders[i].readValue();

}

Super, der Test mit den Kondensatoren hat funktioniert, danke! Ich habe jetzt 5x 100µF parallel hängen also um 30µF mehr als Ihr vorgeschlagen habt. Kann das zu Problemen führen bzw. sind genau 470µF wichtig?

Daumenwert

Alles klar, danke! :slight_smile:

Elektrolyt-Kondensatoren haben oft Tolleranzen von -20% bis +80%. Was sind dann schon 6%

Grüße Uwe