Program Arduino Lab ELDA 2
Program Arduino Lab ELDA 2
#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;
void setup(){
//LCD
//Serial.begin(9600);
lcd.begin();
lcd.backlight();
//Multiplexer
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
//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 == 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");
}
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(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(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();
}
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);
}
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 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
};
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;
}