//Mux control pins
int s0 = 8;
int s1 = 9;
int s2 = 10;
int s3 = 11;
//Mux in "SIG" pin
int SIG_pin = 3;
#include <EEPROM.h>
int dl;
uint8_t eft, spd, dly, dl1;
uint16_t a, b, ah, al;
void dataWrite(uint16_t data);
bool st;
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);
pinMode(18, INPUT_PULLUP);
pinMode(19, INPUT_PULLUP);
a = 1;
dly = 1;
eft = EEPROM.read(0);
spd = EEPROM.read(1);
if (spd > 7) {
spd = 2;
}
if (eft > 7) {
eft = 0;
}
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (!digitalRead(18) & st == 0) {
Serial.println("Tombol Pin 18 di TEKAN");
//digitalWrite(16, HIGH);
st = 1;
dataWrite(0);
if (eft < 8) {
eft++;
String x = "MODE";
String y = x + eft ;
Serial.println(y);
}else{
eft=0;
String x = "RSTMODE";
String y = x + eft ;
Serial.println(y);
}
EEPROM.write(0, eft);
}
if (digitalRead(18) & digitalRead(19)) {
st = 0;
}
if (!digitalRead(19) & st == 0) {
Serial.println("Tombol Pin 19 di TEKAN");
//digitalWrite(17, HIGH);
st = 1;
if (spd < 7) {
spd++;
String x = "SPD+";
String y = x + spd ;
Serial.println(y);
}else{
spd=1;
String x = "RSTSPD";
String y = x + spd ;
Serial.println(y);
Serial.println("MODE0");
}
EEPROM.write(1, spd);
}
//----------
if (dly > spd) {
dly = 0;
if (eft == 0) {
if (dl > 18) {
dl = 0;
}
if (dl == 0) {
a = 1;
}
dl++;
dataWrite(a);
if (dl < 18) a = a << 1;
}
if (eft == 1) {
if (dl > 32) {
dl = 0;
a = 2;
}
if (dl == 0) {
a = 2;
}
dl++;
if (dl == 16) {
a = 32768;
}
dataWrite(a);
if (dl < 16)
a = a << 1;
else
a = a >> 1;
}
if (eft == 2) {
if (dl > 8) {
dl = 0;
}
if (dl == 0) {
ah = 0x8000;
al = 0x01;
}
dl++;
a = ah | al;
dataWrite(a);
al = al << 1;
ah = ah >> 1;
}
if (eft == 3) {
if (dl > 16) {
dl = 0;
}
if (dl == 0) {
ah = 0x8000;
al = 0x01;
}
dl++;
a = ah | al;
dataWrite(a);
al = al << 1;
ah = ah >> 1;
}
if (eft == 4) {
if (dl > 16) {
dl = 0;
}
if (dl == 0) {
a = 0;
}
dl++;
dataWrite(a);
a = a << 1;
a = a | 1;
}
if (eft == 5) {
if (dl > 32) {
dl = 0;
}
if (dl == 0) {
a = 0;
}
dl++;
dataWrite(a);
a = a << 1;
if (dl < 16) {
a = a | 1;
}
if (dl == 16) {
a = 0xfffe;
}
}
if (eft == 6) {
if (dl1 == 0 | dl > dl1) {
dl1 = 16;
dl = 0;
a = 1;
b = 0;
}
dl++;
a = a | b;
dataWrite(a);
if (dl < dl1) {
a = a << 1;
}
if (dl == dl1) {
dl = 0;
dl1--;
b = a;
a = 1;
}
}
if (eft == 7) {
dataWrite(random(0, 0xffff));
}
if (eft == 8) {
}
}
dly++;
delay(10);
}
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;
}
void dataWrite(uint16_t data) {
for (byte i = 0; i < mux.channelCount(); i++) {
mux.write(i * 16 + 1, i);
delay(200);
}
Loading
cd74hc4067
cd74hc4067