#include "HX711.h"
int s0 = 21;
int s1 = 19;
int s2 = 18;
int s3 = 5;
int inputSignalPin = 17;
int echoPin = 2;
int dataPin = 17;
int clockPin = 12 ;
HX711 scale;
int readMux(int channel){
int controlPin[] = {s0,s1,s2,s3};
int muxChannel[16][4]={
{0,0,0,0}, // channel 0
{0,0,0,1}, // channel 1
{0,0,1,0}, // channel 2
{0,1,0,0}, // channel 3
{1,0,0,0}, // channel 4
{0,0,1,1}, // channel 5
{0,1,0,1}, // channel 6
{1,0,0,1}, // channel 7
{0,1,1,0}, // channel 8
{1,0,1,0}, // channel 9
{1,1,0,0}, // channel 10
{0,1,1,1}, // channel 11
{1,0,1,1}, // channel 12
{1,1,0,1}, // channel 13
{1,1,1,0}, // channel 14
{1,1,1,1}, // channel 15
};
// lop 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(inputSignalPin);
// return value
return val;
// Kirim sinyal trigger
digitalWrite(inputSignalPin, LOW);
delayMicroseconds(2);
digitalWrite(inputSignalPin, HIGH);
delayMicroseconds(10);
digitalWrite(inputSignalPin, LOW);
// Baca sinyal echo
int duration = pulseIn(echoPin, HIGH);
// Konversi durasi ke jarak
int distance = duration * 0.034 / 2;
return distance;
scale.begin(dataPin, clockPin);
return scale.read();
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
pinMode(inputSignalPin, INPUT);
pinMode(echoPin, INPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
}
void loop() {
// Put your main code here, to run repeatedly:
for (int i = 0; i < 16; i++) {
int inputSignal = readMux(i);
Serial.print("Channel ");
Serial.print(i);
Serial.print(": ");
Serial.println(inputSignal);
int distance = readMux(i);
Serial.print("Distance : ");
Serial.print(distance);
Serial.println(" cm");
long weight = readMux(i);
Serial.print("Weight : ");
Serial.print(weight);
Serial.println(" units");
analogWrite(inputSignalPin, 0); // Off
analogWrite(inputSignalPin, 64); // Off
analogWrite(inputSignalPin, 127); // Medium brightnes
analogWrite(inputSignalPin, 191); // Medium brightness
analogWrite(inputSignalPin, 235); // Full brightness
analogWrite(inputSignalPin, 255); // Full brightness
}
}