0% found this document useful (0 votes)
54 views

Kelompok 5 Unit 7 MicroController

This document contains 4 summaries of programs written for an Arduino practical exam on analog to digital converters: 1) Program 1 displays temperature readings from a DHT22 sensor on a 7-segment display. 2) Program 2 displays temperature, humidity, and whether the reading is in Celsius or Fahrenheit on a 4-digit 7-segment display. 3) Program 3 calculates RPM from an RPM sensor and displays it on a TM1637 display. 4) Program 4 is similar to Program 3 but displays RPM on an LED dot matrix display instead of TM1637.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
54 views

Kelompok 5 Unit 7 MicroController

This document contains 4 summaries of programs written for an Arduino practical exam on analog to digital converters: 1) Program 1 displays temperature readings from a DHT22 sensor on a 7-segment display. 2) Program 2 displays temperature, humidity, and whether the reading is in Celsius or Fahrenheit on a 4-digit 7-segment display. 3) Program 3 calculates RPM from an RPM sensor and displays it on a TM1637 display. 4) Program 4 is similar to Program 3 but displays RPM on an LED dot matrix display instead of TM1637.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 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