0% found this document useful (0 votes)
16 views13 pages

Program Arduino Lab ELDA 2

This document contains the code for an Arduino project that controls an LCD display and multiplexer to select different components for testing. It initializes libraries and pins, defines variables for the LCD, rotary encoders, and multiplexer channels. The main functions control the LCD menu display, rotary encoder selection, multiplexer channel selection, and component tests by turning on corresponding LEDs.

Uploaded by

Oups Gaming
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
16 views13 pages

Program Arduino Lab ELDA 2

This document contains the code for an Arduino project that controls an LCD display and multiplexer to select different components for testing. It initializes libraries and pins, defines variables for the LCD, rotary encoders, and multiplexer channels. The main functions control the LCD menu display, rotary encoder selection, multiplexer channel selection, and component tests by turning on corresponding LEDs.

Uploaded by

Oups Gaming
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 13

//Library

#include <PWM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);

//led indikator
int led1 = 45;
int led2 = 47;
int led3 = 49;
int led4 = 51;
int led5 = 53;

//Rotary 1
int CLK1 = 35;
int DT1 = 37;
int SW1 = 33;

//Rotary 2
int CLK2 = 43;
int DT2 = 41;
int SW2 = 39;

//Multiplexer
int s0 = 7;
int s1 = 8;
int s2 = 9;
int s3 = 10;
int muxCh = 0;

//input PWM
long pwm = 11;

//Program Menu
int menu1 = 1;
int menu2 = 1;
int page = 1;
int CLK1state;
int CLK1Laststate;

// Rotary 1 Pengaturan Dutycycle


int statusCLK1;
int laststatusCLK1;
int DTC = 0;
int count1 = 0;
float convertion = 0;

// Rotary 2 Pengaturan Frekuensi


int statusCLK2;
int laststatusCLK2;
long count2 = 0;
long scale = 1000;
long Frequency = 0;
long freq = 0;

void setup(){
//LCD
//Serial.begin(9600);
lcd.begin();
lcd.backlight();

//Multiplexer
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

//Rotary 1 DTC Setting


pinMode(CLK1, INPUT);
pinMode(DT1, INPUT);
pinMode(SW1, INPUT);

//Rotary 2 Frequency Setting


pinMode(CLK2, INPUT);
pinMode(DT2, INPUT);
pinMode(SW2, INPUT);

//Input PWM
pinMode(pwm, OUTPUT);
InitTimersSafe();

//Program Menu
CLK1Laststate = digitalRead(CLK1);
startModule();
}

void loop(){
menuPage();
swState();
lcdPage1();
lcdPage2();
lcdPage3();
lcdPage4();
setMultiplexer();
bugFix();
//debuging();
}

//Pembukaan
void startModule(){
lcd.setCursor(2,0);
lcd.print("Modul Praktikum");
lcd.setCursor(5,1);
lcd.print("Penyakelaran");
lcd.setCursor(3,2);
lcd.print("BJT, MOSFET, IGBT");
delay(2000);
lcd.clear();
// lcd.setCursor(8,0);
// lcd.print("Oleh");
// lcd.setCursor(2,1);
// lcd.print("Novan Enardo Wijanarko");
// lcd.setCursor(6,2);
// lcd.print("16 642 026");
// lcd.setCursor(1,3);
// lcd.print("TEKNIK ELEKTRO 2020");
// delay(1000);
// lcd.clear();
}
//void debuging(){
// Serial.print(page);

// Serial.print(menu1);
// Serial.println(menu2);
// Serial.println(muxCh);
// Serial.print(DTC);
// Serial.println(Frequency);
// Serial.println(convertion);
//}

//----------------------PROGRAM MENU-------------------------//
//Selektor Menu
void selector(){
menu1 = constrain(menu1, 1, 5);
menu2 = constrain(menu2, 1, 2);
CLK1state = digitalRead(CLK1);
if(CLK1state != CLK1Laststate)
{
if(!digitalRead(DT1) != CLK1state){
if(page == 1){
menu1++;
}
if(page == 2){
menu2++;
}
while(!digitalRead(CLK1));

} else {
if(page == 1){
menu1--;
}
if(page == 2){
menu2--;
}

while(!digitalRead(DT1));
}
}
CLK1Laststate = CLK1state;
}

//Tampilan Menu
void lcdPage1(){

if((page == 1) && (menu1 == 1)


if((page == 1) && (menu1 == 1)){
lcd.setCursor(1,0);
lcd.print(">NPN");
lcd.setCursor(12,0);
lcd.print(" PNP");
lcd.setCursor(1,1);
lcd.print(" N-MOS");
lcd.setCursor(12,1);
lcd.print(" P-MOS");
lcd.setCursor(1,2);
lcd.print(" IGBT");
lcd.setCursor(0,3);
lcd.print("OK");

if((page == 1) && (menu1 == 2)){


lcd.setCursor(1,0);
lcd.print(" NPN");
lcd.setCursor(12,0);
lcd.print(">PNP");
lcd.setCursor(1,1);
lcd.print(" N-MOS");
lcd.setCursor(12,1);
lcd.print(" P-MOS");
lcd.setCursor(1,2);
lcd.print(" IGBT");
lcd.setCursor(0,3);
lcd.print("OK");

}
if((page == 1) && (menu1 == 3)){
lcd.setCursor(1,0);
lcd.print(" NPN");
lcd.setCursor(12,0);
lcd.print(" PNP");
lcd.setCursor(1,1);
lcd.print(">N-MOS");
lcd.setCursor(12,1);
lcd.print(" P-MOS");
lcd.setCursor(1,2);
lcd.print(" IGBT");
lcd.setCursor(0,3);
lcd.print("OK");

}
if((page == 1) && (menu1 == 4)){
lcd.setCursor(1,0);
lcd.print(" NPN");
lcd.setCursor(12,0);
lcd.print(" PNP");
lcd.setCursor(1,1);
lcd.print(" N-MOS");
lcd.setCursor(12,1);
lcd.print(">P-MOS");
lcd.setCursor(1,2);
lcd.print(" IGBT");
lcd.setCursor(0,3);
lcd.print("OK");

}
if((page == 1) && (menu1 == 5)){
lcd.setCursor(1,0);
lcd.print(" NPN");
lcd.setCursor(12,0);
lcd.print(" PNP");
lcd.setCursor(1,1);
lcd.print(" N-MOS");
lcd.setCursor(12,1);
lcd.print(" P-MOS");
lcd.setCursor(1,2);
lcd.print(">IGBT");
lcd.setCursor(0,3);
lcd.print("OK");
}

void lcdPage2(){
if((page == 2) && (menu2 == 1)){
lcd.setCursor(0,0);
lcd.print("Skala");
lcd.setCursor(0,1);
lcd.print(">kHz");
lcd.setCursor(0,2);
lcd.print(" Hz");
lcd.setCursor(0,3);
lcd.print("OK");
lcd.setCursor(16,3);
lcd.print("BACK");

if((page == 2) && (menu2 == 2)){


lcd.setCursor(0,0);
lcd.print("Skala");
lcd.setCursor(0,1);
lcd.print(" kHz");
lcd.setCursor(0,2);
lcd.print(">Hz");
lcd.setCursor(0,3);
lcd.print("OK");
lcd.setCursor(16,3);
lcd.print("BACK");
}

}
void lcdPage3(){
if((page == 3) && (menu1 == 1)){
lcd.setCursor(0,0);
lcd.print(" NPN");
lcd.setCursor(0,1);
lcd.print("DTC :");
lcd.setCursor(17,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Freq:");
if(menu2 == 1){
lcd.setCursor(17,2);
lcd.print("kHz");

}
if(menu2 == 2){
lcd.setCursor(17,2);
lcd.print("Hz");

}
lcd.setCursor(0,3);
lcd.print("OK");
}
if((page == 3) && (menu1 == 2)){
lcd.setCursor(0,0);
lcd.print(" PNP");
lcd.setCursor(0,1);
lcd.print("DTC :");
lcd.setCursor(17,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Freq:");
if(menu2 == 1){
lcd.setCursor(17,2);
lcd.print("kHz");

}
if(menu2 == 2){
lcd.setCursor(17,2);
lcd.print("Hz");

}
lcd.setCursor(0,3);
lcd.print("OK");

if((page == 3) && (menu1 == 3)){


lcd.setCursor(0,0);
lcd.print("NMOS");
lcd.setCursor(0,1);
lcd.print("DTC :");
lcd.setCursor(17,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Freq:");
if(menu2 == 1){
lcd.setCursor(17,2);
lcd.print("kHz");

}
if(menu2 == 2){
lcd.setCursor(17,2);
lcd.print("Hz");

}
lcd.setCursor(0,3);
lcd.print("OK");

}
if((page == 3) && (menu1 == 4)){
lcd.setCursor(0,0);
lcd.print("PMOS");
lcd.setCursor(0,1);
lcd.print("DTC :");
lcd.setCursor(17,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Freq:");
if(menu2 == 1){
lcd.setCursor(17,2);
lcd.print("kHz");

}
if(menu2 == 2){
lcd.setCursor(17,2);
lcd.print("Hz");

}
lcd.setCursor(0,3);
lcd.print("OK");

if((page == 3) && (menu1 == 5)){


lcd.setCursor(0,0);
lcd.print("IGBT");
lcd.setCursor(0,1);
lcd.print("DTC :");
lcd.setCursor(17,1);
lcd.print("%");
lcd.setCursor(0,2);
lcd.print("Freq:");
if(menu2 == 1){
lcd.setCursor(17,2);
lcd.print("kHz");

}
if(menu2 == 2){
lcd.setCursor(17,2);
lcd.print("Hz");

}
lcd.setCursor(0,3);
lcd.print("OK");
}

void lcdPage4(){
if((page == 4) && (menu1 == 1)){
inputPWM();
npnBJT();

}
if((page == 4) && (menu1 == 2)){
inputPWM();
pnpBJT();

}
if((page == 4) && (menu1 == 3)){
inputPWM();
nMOSFET();

}
if((page == 4) && (menu1 == 4)){
inputPWM();
pMOSFET();
}
if((page == 4) && (menu1 == 5)){
inputPWM();
IGBT();

//Menghilangkan Bug pada tampilan LCD


void bugFix(){
if(page == 1){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(6,2);
lcd.print(" ");
lcd.setCursor(14,2);
lcd.print(" ");
lcd.setCursor(16,3);
lcd.print(" ");

if((page == 2) && (menu1 <= 5)){


lcd.setCursor(12,0);
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" ");
lcd.setCursor(12,1);
lcd.print(" ");
lcd.setCursor(3,2);
lcd.print(" ");
lcd.setCursor(6,2);
lcd.print(" ");
lcd.setCursor(14,2);
lcd.print(" ");
count1 = 0;
count2 = 0;

if((page == 3) && (menu1 <= 5)){


lcd.setCursor(4,0);
lcd.print(" ");
lcd.setCursor(7,1);
lcd.print(" ");

}
if((page == 4) && (menu1 <= 5)){
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(14,2);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");

void npnBJT(){
//multiplexer ch11
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, LOW);
digitalWrite(s3, HIGH);

//kondisi led1
digitalWrite(led1, HIGH);

void pnpBJT(){
//multiplexer ch12
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);

//kondisi led2
digitalWrite(led2, HIGH);

void nMOSFET(){
//multiplexer ch13
digitalWrite(s0, HIGH);
digitalWrite(s1, LOW);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);

//kondisi led3
digitalWrite(led3, HIGH);

void pMOSFET(){
//multiplexer ch14
digitalWrite(s0, LOW);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);

//kondisi led4
digitalWrite(led4, HIGH);
}

void IGBT(){
//multiplexer ch15
digitalWrite(s0, HIGH);
digitalWrite(s1, HIGH);
digitalWrite(s2, HIGH);
digitalWrite(s3, HIGH);

//kondisi led5
digitalWrite(led5, HIGH);
}

//-------------------PENGATURAN ROTARY KHUSUS-----------------//


//Pengaturan SW pada Rotary1 dan Rotary2
void swState(){
page = constrain(page, 1, 4);
if(!digitalRead(SW1)){
page++;
while(!digitalRead(SW1));
}

if(!digitalRead(SW2)){
page--;
convertion = 0;
DTC = 0;
Frequency = 0;
//kondisi output PWM
digitalWrite(pwm, LOW);
//kondisi led
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);

while(!digitalRead(SW2));
}
}

void menuPage(){
if(page == 1){
selector();

}
if(page == 2){
selector();
}

if(page == 3){
setPWM();
setDTC();
setFrequency();
}
if(page == 4){
lcd.setCursor(7,1);
lcd.print("RUN");
}
}

//-------------------------PROGRAM PENGATURAN------------------//
//Pengaturan Channel pada Multiplexer
void setMultiplexer(){
muxCh = menu1 + 10;
if((page == 4) && (menu1 == 1)){
readMux(muxCh);
}
if((page == 4) && (menu1 == 2)){
readMux(muxCh);
}
if((page == 4) && (menu1 == 3)){
readMux(muxCh);
}
if((page == 4) && (menu1 == 4)){
readMux(muxCh);
}
if((page == 4) && (menu1 == 5)){
readMux(muxCh);
}
}

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(pwm);

//return the value


return val;
}
int val = readMux(muxCh);

void inputPWM(){
SetPinFrequency(pwm, Frequency);
pwmWrite(pwm, convertion);

void setPWM(){
//Tampilan Nilai Dutycycle dan Frekuensi
//Duty Cycle
lcd.setCursor(14,1);
if (DTC < 100) {
lcd.print(" ");

}
if (DTC < 10){
lcd.print(" ");

}
lcd.print(DTC);
//Frequency
lcd.setCursor(14,2);
if (freq < 100) {
lcd.print(" ");

}
if (freq < 10){
lcd.print(" ");

}
lcd.print(freq);

void setDTC(){
if(menu1 >= 1){
count1 = constrain(count1, 0, 100);
DTC = count1;
convertion = ((DTC*255)/100);

}
statusCLK1 = digitalRead(CLK1);
if(statusCLK1 !=laststatusCLK1)
{
if(digitalRead(DT1) != statusCLK1){
count1--;

}
else
{
count1++;
}
}
laststatusCLK1 = statusCLK1;
}

void setFrequency(){
if(menu2 == 1){
Frequency = (count2*scale);
Frequency = constrain(Frequency, 0, 100000);
freq = Frequency / 1000;
}

if(menu2 == 2){
Frequency = count2;
Frequency = constrain(Frequency, 0, 100);
freq = Frequency;
}

statusCLK2 = digitalRead(CLK2);
if(statusCLK2 !=laststatusCLK2)
{
if(digitalRead(DT2) != statusCLK2){
count2--;
}
else
{
count2++;
}
}
laststatusCLK2 = statusCLK2;
}

You might also like