//hanya perlu 8 pin, tidak 12 pin
int in_gerbang1a = 7;
int in_gerbang1b = 6;
int in_gerbang2a = 5;
int in_gerbang2b = 4;
int out_gerbang1 = 8;
int out_gerbang2 = 9;
int out_gerbang3 = 10;
int out_gerbang4 = 11;
String jenis = "";
int jumlah = 0;
void setup() {
Serial.begin(9600);
pinMode(in_gerbang1a, OUTPUT);
pinMode(in_gerbang1b, OUTPUT);
pinMode(in_gerbang2a, OUTPUT);
pinMode(in_gerbang2b, OUTPUT);
pinMode(out_gerbang1, INPUT);
pinMode(out_gerbang2, INPUT);
pinMode(out_gerbang3, INPUT);
pinMode(out_gerbang4, INPUT);
Serial.println("Letakkan dan tekan IC gerbang logika pada protoboard");
}
void loop() {
//if(cek_AdaIC == true){
cek_NOT();
//Jika bukan NOT, cek yang lainnya
if(jenis == ""){
digitalWrite(in_gerbang1a, 0);
digitalWrite(in_gerbang1b, 0);
digitalWrite(in_gerbang2a, 0);
digitalWrite(in_gerbang2b, 0);
if(digitalRead(out_gerbang1) == 0 || digitalRead(out_gerbang2) == 0 ||
digitalRead(out_gerbang3) == 0 || digitalRead(out_gerbang4) == 0 ){
digitalWrite(in_gerbang1a, 0);
digitalWrite(in_gerbang1b, 0);
digitalWrite(in_gerbang2a, 1);
digitalWrite(in_gerbang2b, 1);
if(digitalRead(out_gerbang1) == 0 || digitalRead(out_gerbang2) == 0 ||
digitalRead(out_gerbang2) == 0 || digitalRead(out_gerbang4) == 0 ){
if(digitalRead(out_gerbang1) == 0){
jumlah++;
jenis = "AND";
}
if(digitalRead(out_gerbang2) == 0){
jumlah++;
jenis = "AND";
}
if(digitalRead(out_gerbang3) == 0){
jumlah++;
jenis = "AND";
}
if(digitalRead(out_gerbang4) == 0){
jumlah++;
jenis = "AND";
}
Serial.println("Jenis IC: "+jenis);
Serial.print("Jumlah Gerbang: ");
Serial.print(jumlah);
Serial.println();
delay(1000);
jumlah = 0;
}
else if(digitalRead(out_gerbang1) == 1 || digitalRead(out_gerbang2) == 1 ||
digitalRead(out_gerbang3) == 1 || digitalRead(out_gerbang4) == 1 ){
digitalWrite(in_gerbang1a, 1);
digitalWrite(in_gerbang1b, 1);
digitalWrite(in_gerbang2a, 1);
digitalWrite(in_gerbang2b, 1);
if(digitalRead(out_gerbang1) == 1 || digitalRead(out_gerbang2) == 1 ||
digitalRead(out_gerbang2) == 1 || digitalRead(out_gerbang4) == 1 ){
if(digitalRead(out_gerbang1) == 1){
jumlah++;
jenis = "OR";
}
if(digitalRead(out_gerbang2) == 1){
jumlah++;
jenis = "OR";
}
if(digitalRead(out_gerbang3) == 1){
jumlah++;
jenis = "OR";
}
if(digitalRead(out_gerbang4) == 1){
jumlah++;
jenis = "OR";
}
}
Serial.println("Jenis IC: "+jenis);
Serial.print("Jumlah Gerbang: ");
Serial.print(jumlah);
Serial.println();
delay(1000);
jumlah = 0;
}
}
}
}
void cek_NOT(){
pinMode(in_gerbang2a, OUTPUT);
pinMode(in_gerbang2b, OUTPUT);
pinMode(out_gerbang2, INPUT);
pinMode(out_gerbang4, INPUT);
digitalWrite(in_gerbang2a, 0);
digitalWrite(in_gerbang2b, 0);
if(digitalRead(out_gerbang2) == 1 || digitalRead(out_gerbang4) == 1){
digitalWrite(in_gerbang2a, 1);
digitalWrite(in_gerbang2b, 1);
if(digitalRead(out_gerbang2) == 0 || digitalRead(out_gerbang4) == 0){
if(digitalRead(out_gerbang2) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 1");
}
if(digitalRead(out_gerbang4) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 2");
}
}
}
pinMode(in_gerbang2a, INPUT);
pinMode(in_gerbang2b, INPUT);
pinMode(in_gerbang1a, OUTPUT);
pinMode(in_gerbang1b, OUTPUT);
digitalWrite(in_gerbang1a, 0);
digitalWrite(in_gerbang1b, 0);
if(digitalRead(in_gerbang2a) == 1 || digitalRead(in_gerbang2b) == 1){
digitalWrite(in_gerbang1a, 1);
digitalWrite(in_gerbang1b, 1);
if(digitalRead(in_gerbang2a) == 0 || digitalRead(in_gerbang2b) == 0){
if(digitalRead(in_gerbang2a) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 3");
}
if(digitalRead(in_gerbang2b) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 4");
}
}
}
pinMode(in_gerbang2a, OUTPUT);
pinMode(in_gerbang2b, OUTPUT);
pinMode(out_gerbang1, OUTPUT);
pinMode(out_gerbang3, OUTPUT);
pinMode(in_gerbang1a, INPUT);
pinMode(in_gerbang1b, INPUT);
digitalWrite(out_gerbang1, 0);
digitalWrite(out_gerbang3, 0);
if(digitalRead(in_gerbang1a) == 1 || digitalRead(in_gerbang1b) == 1){
digitalWrite(out_gerbang1, 1);
digitalWrite(out_gerbang3, 1);
if(digitalRead(in_gerbang1a) == 0 || digitalRead(in_gerbang1b) == 0){
if(digitalRead(in_gerbang1a) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 5");
}
if(digitalRead(in_gerbang1b) == 0){
jumlah++;
jenis = "NOT";
Serial.println("ada NOT 6");
}
}
}
pinMode(out_gerbang1, INPUT);
pinMode(out_gerbang3, INPUT);
pinMode(in_gerbang1a, OUTPUT);
pinMode(in_gerbang1b, OUTPUT);
Serial.println("Jenis IC: "+jenis);
Serial.print("Jumlah Gerbang: ");
Serial.print(jumlah);
Serial.println();
delay(1000);
jumlah = 0;
}
boolean cek_AdaIC() { //cek apakah IC telah diletakkan dan ditekan
digitalWrite(in_gerbang1a, 0);
digitalWrite(in_gerbang1b, 0);
digitalWrite(in_gerbang2a, 0);
digitalWrite(in_gerbang2b, 0);
if(digitalRead(out_gerbang1) == 0 && digitalRead(out_gerbang2) == 0 &&
digitalRead(out_gerbang3) == 0 && digitalRead(out_gerbang4) == 0 ){
digitalWrite(in_gerbang1a, 0);
digitalWrite(in_gerbang1b, 0);
digitalWrite(in_gerbang2a, 1);
digitalWrite(in_gerbang2b, 1);
if(digitalRead(out_gerbang1) == 0 && digitalRead(out_gerbang2) == 0 &&
digitalRead(out_gerbang3) == 0 && digitalRead(out_gerbang4) == 0 ){
digitalWrite(in_gerbang1a, 1);
digitalWrite(in_gerbang1b, 1);
digitalWrite(in_gerbang2a, 0);
digitalWrite(in_gerbang2b, 0);
if(digitalRead(out_gerbang1) == 0 && digitalRead(out_gerbang2) == 0 &&
digitalRead(out_gerbang3) == 0 && digitalRead(out_gerbang4) == 0 ){
digitalWrite(in_gerbang1a, 1);
digitalWrite(in_gerbang1b, 1);
digitalWrite(in_gerbang2a, 1);
digitalWrite(in_gerbang2b, 1);
if(digitalRead(out_gerbang1) == 0 && digitalRead(out_gerbang2) == 0 &&
digitalRead(out_gerbang3) == 0 && digitalRead(out_gerbang4) == 0 ){
cek_NOT();
if(jenis != "NOT") {
return false;
}
}else{
return true;
}
}else{
return true;
}
}else{
return true;
}
}else{
return true;
}
}