Bluepill HC4067 via Arduino IDE
Hi everyone. I´d like to use a HC4067 mulitplexer to expand analog inputs on a bluepill. I´m using Arduino IDE to program the thing. But I can´t get reliable results. The values are jumping up and down or not reacting to input (potentiometer).
I´m wondering if using a HC4067 is restricted to certian pins?? I´m trying to use:
int s0 = PB4;
int s1 = PB3;
int s2 = PA15;
int s3 = PA12 ;
SIG = PA4;
I´m powering the HC4067 with 3.3 V and have grounded all inputs except input 1. I get fluctuating readings and POT on input 1 isn´t doing much, although I should see 0-4096.
Any help appreciated. Keep in mind ... newbie here. Or father with just occasional spare time trying to build an RC transmiiter for his son.
Before you ask: I use these pins because there are already other things going on on the board...NRF24 transmitter, Oled, etc.
This code is just a test setup.
//Mux control pins
int s0 = PB4;
int s1 = PB3;
int s2 = PA15;
int s3 = PA12 ;
//Mux in "SIG" pin
int SIG_pin = PA4;
void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(9600);
}
void loop() {
//Loop through and read all 16 values
//Reports back Value at channel 6 is: 346
for (int i = 0; i < 16; i ++) {
Serial.print("Value at channel ");
Serial.print(i);
Serial.print("is : ");
Serial.println(readMux(i));
delay(100);
}
}
int readMux(int channel) {
int controlPin[] = {s0, s1, s2, s3};
int muxChannel[16][4] = {
{0, 0, 0, 0}, //channel 0
{1, 0, 0, 0}, //channel 1
{0, 1, 0, 0}, //channel 2
{1, 1, 0, 0}, //channel 3
{0, 0, 1, 0}, //channel 4
{1, 0, 1, 0}, //channel 5
{0, 1, 1, 0}, //channel 6
{1, 1, 1, 0}, //channel 7
{0, 0, 0, 1}, //channel 8
{1, 0, 0, 1}, //channel 9
{0, 1, 0, 1}, //channel 10
{1, 1, 0, 1}, //channel 11
{0, 0, 1, 1}, //channel 12
{1, 0, 1, 1}, //channel 13
{0, 1, 1, 1}, //channel 14
{1, 1, 1, 1} //channel 15
};
//loop through the 4 sig
for (int i = 0; i < 4; i ++) {
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
//read the value at the SIG pin
int val = analogRead(SIG_pin);
//return the value
return val;
}