Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

LAPORAN SEMENTARA

PRAKTIKUM MICROCONTROLLER
UNIT 7
Analog Digital Converter

Oleh:
Nama : M Arifin Wardana

David Danendra R

Hilmi Pramono Adi


NIM : 22/493045/SV/20655

22/496884/SV/21041

22/503024/SV/21463
Kelas : RE3A1

Dosen Pengampu : Budi Bayu Murti, S.T., M.T

Asisten : 1. Faizal Azmi Nurwardani

2. Abi Azka Najasyi

Laboran : Sugeng Julianto, S.ST.

Hari, Tangal : Senin, 23 Oktober 2023

PROGRAMSTUDITEKNOLOGIREKAYASAELEKTRO
DEPARTEMENTEKNIKELEKTRODANINFORMATIKA
SEKOLAHVOKASI
UNIVERSITASGADJAHMADA
2023
UNIT 7
Analog Digital Converter

FlowChart
Program 1
Program 2
PROGRAM 3
PROGRAM 4
PROGRAM 1

#include "DHT22.h"
#define DHTPIN A4
#define DHTTYPE DHT22
DHT22 dht(DHTPIN);
float th = 0.0;

const int segment[] ={12,10,8,7,6,11,9,4};


const int digit[] = {5,13,3,};
unsigned long interval =0;
bool temp = false;
int laststate;
void setup() {
// put your setup code here, to run once:
for(int i = 0;i<=7;i++){
pinMode(segment[i], OUTPUT);
}
for(int i = 0;i<=3;i++){
pinMode(digit[i], OUTPUT);
}
}
void tampil(int nilai)
{
if (nilai == 0){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 0);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 1);
digitalWrite(segment[7], 1);
}
if (nilai == 1){
digitalWrite(segment[0], 1);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 1);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 1);
digitalWrite(segment[6], 1);

}
if (nilai == 2){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 1);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 0);
digitalWrite(segment[5], 1);
digitalWrite(segment[6], 0);
}
if (nilai == 3){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 1);
digitalWrite(segment[6], 0);
}
if (nilai == 4){
digitalWrite(segment[0], 1);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 1);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 0);
}
if (nilai == 5){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 1);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 0);
}
if (nilai == 6){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 1);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 0);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 0);
}
if (nilai == 7){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 1);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 1);
digitalWrite(segment[6], 1);
}
if (nilai == 8){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 0);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 0);
}
if (nilai == 9){
digitalWrite(segment[0], 0);
digitalWrite(segment[1], 0);
digitalWrite(segment[2], 0);
digitalWrite(segment[3], 0);
digitalWrite(segment[4], 1);
digitalWrite(segment[5], 0);
digitalWrite(segment[6], 0);
}

digitalWrite(segment[7], 1);
}
void display(int a)
{
tampil(a / 100);
digitalWrite(digit[0], 1);
digitalWrite(digit[1], 0);
digitalWrite(digit[2], 0);
delay(10);
digitalWrite(digit[0], 0);
tampil(a % 100 /10);
digitalWrite(digit[0], 0);
digitalWrite(digit[1], 1);
digitalWrite(digit[2], 0);
digitalWrite(segment[7], 0);
delay(10);
digitalWrite(digit[1], 0);
tampil(a%10);
digitalWrite(digit[0], 0);
digitalWrite(digit[1], 0);
digitalWrite(digit[2], 1);
delay(10);
digitalWrite(digit[2], 0);

}
void loop() {
// put your main code here, to run repeatedly:
unsigned long times = millis();
if(times - interval >= 0){
interval = times;
if(temp == false){
temp = true;
} else{
temp = false;
}
}

if(temp == true){
th = dht.getTemperature();
display(th*10);
}

PROGRAM 2

// Header file includes


#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <DHT.h>
#include <SPI.h>
#include <Wire.h>
// #include "Font7Seg.h"

#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW


#define MAX_DEVICES 4 // Define the number of displays connected
#define CLK_PIN 13 // CLK or SCK
#define DATA_PIN 11 // DATA or MOSI
#define CS_PIN 10 // CS or SS
#define SPEED_TIME 75 // Speed of the transition
#define PAUSE_TIME 0
#define MAX_MESG 20

// These are for the temperature


#define DHTPIN 6
#define DHTTYPE DHT22
#define TIMEDHT 1000

char szTime[9]; // mm:ss\0


char szMesg[MAX_MESG + 1] = "";

float humidity, celsius, fahrenheit;

uint8_t degC[] = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C


uint8_t degF[] = { 6, 3, 3, 124, 20, 20, 4 }; // Deg F

uint8_t clear = 0x00;

uint32_t timerDHT = TIMEDHT;

DHT dht(DHTPIN, DHTTYPE);

// Hardware SPI connection


MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

uint8_t decToBcd(uint8_t value) {


return ((value / 10 * 16) + (value % 10));
}

uint8_t bcdToDec(uint8_t value) {


return ((value / 16 * 10) + (value % 16));
}

void getTemperature() {
// Wait for a time between measurements
if ((millis() - timerDHT) > TIMEDHT) {
// Update the timer
timerDHT = millis();

humidity = dht.readHumidity();
celsius = dht.readTemperature();
fahrenheit = dht.readTemperature(true);
if (isnan(humidity) || isnan(celsius) || isnan(fahrenheit)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}
}

void setup(void) {
Wire.begin();

P.begin(2);
P.setInvert(false);
P.setZone(0, MAX_DEVICES - 4, MAX_DEVICES - 1);
P.setZone(1, MAX_DEVICES - 4, MAX_DEVICES - 1);

P.displayZoneText(0, szMesg, PA_CENTER, SPEED_TIME, 0, PA_PRINT,


PA_NO_EFFECT);

P.addChar('$', degC);
P.addChar('&', degF);

dht.begin();
}

void loop(void) {
static uint32_t lastTime = 0; // Memory (ms)
static uint8_t display = 0; // Current display mode
static bool flasher = false; // Seconds passing flasher

getTemperature();

P.displayAnimate();

if (P.getZoneStatus(0)) {
switch (display) {
case 0: // Temperature deg Celsius
P.setPause(0, 1000);
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_UP);
display++;
dtostrf(celsius, 3, 1, szMesg);
strcat(szMesg, "$");

break;
case 1: // Temperature deg Fahrenheit
P.setTextEffect(0, PA_SCROLL_UP, PA_SCROLL_DOWN);
display++;
dtostrf(fahrenheit, 3, 1, szMesg);
strcat(szMesg, "&");

break;
case 2: // Humidity
P.setTextEffect(0, PA_SCROLL_DOWN, PA_SCROLL_LEFT);
display++;
dtostrf(humidity, 3, 0, szMesg);
strcat(szMesg, "%UR");

break;
}

P.displayReset(0); // Rest zone zero


}
}
PROGRAM 3

#include <TM1637Display.h>

// Define the TM1637 display pins


#define CLK_PIN 4
#define DIO_PIN 5

TM1637Display displayTM1637(CLK_PIN, DIO_PIN);

const int sensorPin = 2;

volatile int objects = 0;


unsigned long previousMillis = 0;
int rpm = 0;

void setup() {
// Initialize the TM1637 display
displayTM1637.setBrightness(0x0F); // Set the brightness to maximum
pinMode(sensorPin, INPUT_PULLUP); // Assuming your sensor is connected to pin
2
attachInterrupt(digitalPinToInterrupt(sensorPin), count, FALLING);
Serial.begin(9600);
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
rpm = (objects / 1.0) * 60;
objects = 0;
previousMillis = currentMillis;
}

// Display the RPM value on the TM1637 display


displayTM1637.showNumberDec(rpm);

// You can also print the RPM to the Serial monitor if needed
Serial.println("RPM: " + String(rpm));

delay(100);
}
void count() {
objects++;
}

PROGRAM 4

#include "LedControl.h"

LedControl lc = LedControl(12, 11, 10, 1); // Inisialisasi dengan pin CLK, CS,
dan DIN

const int sensorPin = 2;

volatile int objects = 0;


unsigned long previousMillis = 0;
int rpm = 0;

void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 8); // Atur tingkat kecerahan (0-15) sesuai kebutuhan
lc.clearDisplay(0);

pinMode(sensorPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(sensorPin), count, FALLING);
Serial.begin(9600);
}

void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 1000) {
rpm = (objects / 1.0) * 60;
objects = 0;
previousMillis = currentMillis;
}

// Tampilkan nilai RPM pada dot matrix


displayRPMOnMatrix(rpm);

// Jika perlu, Anda juga dapat mencetak RPM ke Serial Monitor


Serial.println("RPM: " + String(rpm));

delay(100);
}

void count() {
objects++;
}

void displayRPMOnMatrix(int value) {


lc.clearDisplay(0);
lc.setDigit(0, 3, value / 1000, false);
lc.setDigit(0, 2, (value % 1000) / 100, false);
lc.setDigit(0, 1, (value % 100) / 10, false);
lc.setDigit(0, 0, value % 10, false);
}

You might also like