Hallo geehrte Schwarmintelligenz.
Bauteile: Multiplexer Texas Instrument CD4051B, Teensy 3.2, acht 10Kohm Drehpotis.
Ich denke und hoffe, dass dieses Problem von der Sorte ist, wo ihr sofort das Problem erkennt, da es so easy ist!
Ich habe acht Drehpotis an einen Teensy über einen Multiplexer angeschlossen, so wie es in den Anfängerkursen immer erklärt wird.
Nun werden die Werte der Potis aber erst ab halber Drehstrecke abgefragt. Drehe ich einen Poti die erste Wegstrecke, werden keine Werte ausgegeben, und ab da aber ganz normal ab 0 bis 1023.
Nunja, könnte ein Lötfehler sein, als Laie kann ich aber keine Lötbrücken oder ähnliches messen, ausserdem läuft es soweit ja, ein Lötfehler würde, denke ich, das ganze Programm nicht laufen lassen.
Beim Multiplexer kommen jedenfalls 5 Volt an, was für ihn laut Datenblatt wohl richtig ist.
Die Serials sind sauber verbunden und Vee, Vss und der INH, also der Enable/Disable Anschluss liegen auf Ground auch vernünftig verlötet.
Den Sketch habe ich unkommentiert angefügt, da er sehr einfach ist. Denke eh nicht, dass im Programm der Fehler liegt.
Danke euch vielmals im Voraus...
LG aus DK nach D...
int potiWert[8];
int cWert[8];
int cWertAlt[8];
byte controllerNummer[] = {22,23,24,25,26,27,28,29};
int bit1 = 0;
int bit2 = 0;
int bit3 = 0;
int ledPin14 = 14;
int ledPin13 = 13;
const unsigned long leuchtDauer = 100;
unsigned long startZeit;
void setup() {
pinMode(ledPin13, OUTPUT);
pinMode(ledPin14, OUTPUT);
pinMode(20, OUTPUT);
pinMode(21, OUTPUT);
pinMode(22, OUTPUT);
Serial.begin(31250);
}
void loop () {
digitalWrite(ledPin13, HIGH);
for ( byte i = 0 ; i <= 7; i++ ) {
bit1 = bitRead(i,0);
bit2 = bitRead(i,1);
bit3 = bitRead(i,2);
digitalWrite(20, bit1);
digitalWrite(21, bit2);
digitalWrite(22, bit3);
potisAbfragen(i, A5);
}}
void potisAbfragen(byte zaehler, int analogPin){
potiWert[zaehler] = (9 * potiWert[zaehler] + 1 * analogRead(analogPin)) / 10;
cWert[zaehler] = map(potiWert[zaehler],0,1023,127,0);
if (cWert[zaehler] != cWertAlt[zaehler]) {
// usbMIDI.sendControlChange(controllerNummer[zaehler],cWert[zaehler],0);
Serial.println(cWert[zaehler]);
Serial.println(controllerNummer[zaehler]);
LED1();
cWertAlt[zaehler] = cWert[zaehler];}
LED0();
}
void LED1(){
digitalWrite(ledPin14, HIGH); //Eine LED leuchtet, wenn der Poti benutzt wird.
startZeit = millis();
}
void LED0(){
if (millis() - startZeit >= leuchtDauer) { // wenn die Leuchtdauer vorbei ist die LED ausschalten
digitalWrite(ledPin14, LOW);}}