You are on page 1of 4

Nama : Muhammad Rozaq Mukhtiar

NIM : 03041381621066

Jurusan : Teknik Elektro Universitas Sriwijaya Kampus Palembang

UAS MIKROKONTROLER
Soal:

11. Buatlah rangkaian program dan perhitungannya menggunakan sensor flow dengan komunikasi I2C.

 Tampilkan data jumlah liter > 0 kg sampai dengan 50 liter menggunakan Hyperterminal/
komputer
 Indicator LED 1 menyala dan LED yang lain padam jika liter dari > 0 liter sampai dengan 20 liter
 Indicator LED 2 menyalada dan LED yang lain padam jika liter dari > 21 liter sampai dengan 40
liter
 Indicator LED 3 menyala dan LED yang lain padam jika liter dari > 40 liter sampai dengan 50
liter

byte led1 = 11;

byte led2 = 12;

byte led3 = 13;


byte sensorInterrupt = 2;

byte sensorPin = 3;

float calibrationFactor = 4.5;

volatile byte pulseCount;

float flowRate;

unsigned int flowMilliLitres;

unsigned long totalMilliLitres;

unsigned long oldTime;

void setup()

Serial.begin(38400);

pinMode(led1, OUTPUT);

digitalWrite(led1, LOW);

pinMode(led2, OUTPUT);

digitalWrite(led2, LOW);

pinMode(led3, OUTPUT);

digitalWrite(led3, LOW);

pinMode(sensorPin, INPUT);

digitalWrite(sensorPin, HIGH);

pulseCount = 0;

flowRate = 0.0;

flowMilliLitres = 0;

totalMilliLitres = 0;

oldTime = 0;

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);


}

void loop()

if((millis() - oldTime) > 1000)

detachInterrupt(sensorInterrupt);

flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;

oldTime = millis();

flowMilliLitres = (flowRate / 60) * 1000;

totalMilliLitres += flowMilliLitres;

unsigned int frac;

frac = (flowRate - int(flowRate)) * 10;

if (frac < 50000){

Serial.print(frac, DEC) ;

Serial.print("L/min");

pulseCount = 0;

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

digitalWrite(led3, HIGH);

digitalWrite(led2, LOW);

digitalWrite(led1, LOW);}

else if (frac < 40000){

Serial.print(frac, DEC) ;

Serial.print("L/min");
pulseCount = 0;

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

digitalWrite(led3, LOW);

digitalWrite(led2, HIGH);

digitalWrite(led1, LOW);}

else if (frac < 20000){

Serial.print(frac, DEC) ;

Serial.print("L/min");

pulseCount = 0;

attachInterrupt(sensorInterrupt, pulseCounter, FALLING);

digitalWrite(led3, LOW);

digitalWrite(led2, LOW);

digitalWrite(led1, HIGH);}

void pulseCounter()

pulseCount++;

You might also like