Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // library PZEM
- #include <PZEM004T.h>
- #define relay (PB1)
- const int pinBuzzer = PB0;
- // Libary OLED
- #include "Arduino.h"
- #include "Wire.h"
- #include "Adafruit_GFX.h"
- #include "Adafruit_SSD1306.h"
- // library NFC
- #include <SPI.h>
- #include <Adafruit_PN532.h>
- #define PN532_SCK (PA5)
- #define PN532_MOSI (PA7)
- #define PN532_SS (PA4)
- #define PN532_MISO (PA6)
- #define PN532_IRQ (2)
- #define PN532_RESET (3)
- Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);
- #if defined(ARDUINO_ARCH_SAMD)
- #define Serial SerialUSB
- #endif
- // oled pin = B6 B7 / SCL SDA
- // pzem pin = A9 A10 / TX RX / Serial1
- // nfc pin = SPI
- // bt pin = serial uart 2
- #define OLED_RESET 4
- Adafruit_SSD1306 display(OLED_RESET);
- PZEM004T* pzem;
- IPAddress ip(192, 168, 1, 1);
- String str1, str3;
- String str2 = "0x49 0xB3 0x9E 0x2B";
- //float ee = 0;
- //float t; // variabel token
- float e;
- float t = t - e;
- // START PZEM
- void setup(void)
- {
- pinMode(relay, OUTPUT);
- pinMode(pinBuzzer, OUTPUT);
- Serial.begin(115200); //serial untuk membaca PZEM
- Serial2.begin(38400); //serial BT HC 05
- Serial2.println("\nBismillah");
- Serial2.println("Bluetooth Connected");
- pzem = new PZEM004T(&Serial1);
- pzem->setAddress(ip);
- display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
- display.clearDisplay();
- #ifndef ESP8266
- #endif
- Serial.begin(115200);
- Serial.println("Hello Arif!");
- nfc.begin();
- uint32_t versiondata = nfc.getFirmwareVersion();
- if (! versiondata) {
- Serial.print("Didn't find PN53x board");
- while (1); // halt
- }
- nfc.SAMConfig();
- Serial.println("Tempelkan kartu pelanggan");
- display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
- display.clearDisplay();
- }
- void loop(void)
- {
- uint8_t success;
- uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
- uint8_t uidLength;
- float v = pzem->voltage(ip);
- if (v < 0.0) v = 0.0;
- Serial.print(v);
- Serial.print("V; ");
- float i = pzem->current(ip);
- if (i < 0.0) i = 0.0;
- {
- Serial.print(i);
- Serial.print("A; ");
- }
- float p = pzem->power(ip);
- if (p <= 0.0) p = 0.0;
- {
- Serial.print(p);
- Serial.print("W; ");
- }
- float e = pzem->energy(ip);
- if (e < 0.0) e = 0.0;
- {
- Serial.print(e);
- Serial.print("Wh; ");
- }
- Serial.println(t);
- float cosphi;
- float c;
- if (v * i == 0)
- {
- c = 0;
- }
- else
- {
- c = p / (v * i);
- }
- float ts = t - e;
- if (ts <= 0.0) ts = 0.0;
- Serial.println();
- if (i >= 6)
- {
- digitalWrite(relay, LOW);
- }
- if (ts <= 500)
- {
- tone(pinBuzzer, 1000, 250);
- }
- if (ts <= 0)
- {
- digitalWrite(relay, LOW);
- }
- else
- {
- digitalWrite(relay, HIGH);
- }
- displayData(v, i, p, e, c, ts);
- success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 1000);
- if (success)
- {
- String str22 = hexify(uid, uidLength);
- results(str22);
- }
- }
- // STOP
- // START MONITOR PZEM BLUETOOTH & OLED
- void displayData(float tegangan, float arus, float daya, float energi, float cosphi, float token)
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("V:");
- display.setCursor(12, 0);
- display.print(tegangan);
- // display.println(" V");
- display.setCursor(0, 12);
- display.print("I:");
- display.setCursor(12, 12);
- display.print(arus);
- // display.println(" A");
- display.setCursor(0, 24);
- display.print("P:");
- display.setCursor(12, 24);
- display.print(daya);
- // display.println(" W");
- display.setCursor(65, 0);
- display.print("E:");
- display.setCursor(77, 0);
- display.print(energi);
- // display.println(" Wh");
- display.setCursor(65, 12);
- display.print("C:");
- display.setCursor(77, 12);
- display.print(cosphi);
- // display.println("");
- display.setCursor(65, 24);
- display.print("T:");
- display.setCursor(77, 24);
- display.print(token);
- // display.println(" Wh");
- display.display();
- char buffer[1000];
- sprintf(buffer, "Tegangan : %0.2f V\nArus : %0.2f A\nDaya : %0.2f W\nEnergi : %0.2f Wh\nCos Phi : %0.2f \nToken : %0.2f Wh\n", tegangan, arus, daya, energi, cosphi, token);
- Serial2.println(buffer);
- }
- // STOP MONITOR PZEM BLUETOOTH & OLED
- String hexify(uint8_t u[], byte len)
- {
- String out = "";
- for (byte i = 0; i < len; i++)
- {
- String a = String(u[i], HEX);
- a.toUpperCase();
- if (a.length() == 1) a = "0" + a;
- out += "0x" + a + " ";
- }
- out.trim();
- return out;
- }
- void results(String str)
- {
- if (str == str2)
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Pelanggan dikenali");
- display.setCursor(0, 8);
- display.print("sebagai :");
- display.setCursor(0, 16);
- display.print(" > 1303167045");
- display.display();
- Serial.println("Pelanggan dikenali sebagai:");
- Serial.println(" 1303167045");
- beli();
- }
- else
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Tag NFC tidak");
- display.setCursor(0, 8);
- display.print("dikenali");
- display.setCursor(0, 16);
- display.print(" > Bukan pelanggan");
- display.display();
- Serial.println("Tag NFC tidak dikenali");
- Serial.println(" Bukan pelanggan");
- }
- Serial.println("");
- }
- void beli()
- {
- delay(2000);
- byte pilihan = 1;
- byte jumlah_pilihan = 4;
- refresh_pilihan_token(pilihan);
- uint16_t interval = 3000;
- uint32_t previousMillis = millis();
- bool sudah_memilih_token = false;
- while (!sudah_memilih_token)
- {
- if (check_nfc())
- {
- pilihan++;
- if (pilihan > jumlah_pilihan)
- pilihan = 1;
- refresh_pilihan_token(pilihan);
- previousMillis = millis();
- }
- if (millis() - previousMillis >= interval)
- {
- sudah_memilih_token = true;
- }
- }
- printBeli(pilihan);
- }
- void refresh_pilihan_token(byte pilihan)
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- switch (pilihan)
- {
- case 1:
- display.setCursor(0, 0);
- display.print("> 10K");
- display.setCursor(0, 8);
- display.print(" 20K");
- display.setCursor(0, 16);
- display.print(" 50K");
- display.setCursor(0, 24);
- display.print(" Batal");
- Serial.println("> 10k");
- Serial.println(" 20k");
- Serial.println(" 50k");
- Serial.println(" Batal");
- Serial.println("");
- break;
- case 2:
- display.setCursor(0, 0);
- display.print(" 10K");
- display.setCursor(0, 8);
- display.print("> 20K");
- display.setCursor(0, 16);
- display.print(" 50K");
- display.setCursor(0, 24);
- display.print(" Batal");
- Serial.println(" 10k");
- Serial.println("> 20k");
- Serial.println(" 50k");
- Serial.println(" Batal");
- Serial.println("");
- break;
- case 3:
- display.setCursor(0, 0);
- display.print(" 10K");
- display.setCursor(0, 8);
- display.print(" 20K");
- display.setCursor(0, 16);
- display.print("> 50K");
- display.setCursor(0, 24);
- display.print(" Batal");
- Serial.println(" 10k");
- Serial.println(" 20k");
- Serial.println("> 50k");
- Serial.println(" Batal");
- Serial.println("");
- break;
- case 4:
- display.setCursor(0, 0);
- display.print(" 10K");
- display.setCursor(0, 8);
- display.print(" 20K");
- display.setCursor(0, 16);
- display.print(" 50K");
- display.setCursor(0, 24);
- display.print("> Batal");
- Serial.println(" 10k");
- Serial.println(" 20k");
- Serial.println(" 50k");
- Serial.println("> Batal");
- Serial.println("");
- break;
- }
- display.display();
- }
- void printBeli(byte pilih)
- {
- switch (pilih) {
- case 1:
- token10k();
- break;
- case 2:
- token20k();
- break;
- case 3:
- token50k();
- break;
- case 4:
- batal();
- break;
- }
- }
- void token10k()
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Token telah");
- display.setCursor(0, 8);
- display.print("ditambahkan sebesar ");
- display.setCursor(0, 16);
- display.print("5,0484 kWh");
- display.display();
- Serial.println("Token telah ditambahkan sebesar 5,048 kWh");
- Serial.println("");
- float sb = 5048.4; // sb = saldo baru / pembelian saat ini
- t = t + sb;
- }
- void token20k()
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Token telah");
- display.setCursor(0, 8);
- display.print("ditambahkan sebesar ");
- display.setCursor(0, 16);
- display.print("11,3588 kWh");
- display.display();
- Serial.println("Token telah ditambahkan sebesar 11,3588 kWh");
- Serial.println("");
- float sb = 11358.8; // sb = saldo baru / pembelian saat ini
- t = t + sb;
- }
- void token50k()
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Token telah");
- display.setCursor(0, 8);
- display.print("ditambahkan sebesar ");
- display.setCursor(0, 16);
- display.print("30,29 kWh");
- display.display();
- Serial.println("Token telah ditambahkan sebesar 30,29 kWh");
- Serial.println("");
- float sb = 30290; // sb = saldo baru / pembelian saat ini
- t = t + sb;
- }
- void batal()
- {
- display.clearDisplay();
- display.setTextSize(1);
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("Pembelian dibatalkan");
- display.display();
- Serial.println("Pembelian dibatalkan");
- Serial.println("");
- }
- bool check_nfc()
- {
- uint8_t success;
- uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };
- uint8_t uidLength;
- success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 1000);
- if (success)
- {
- String str22 = hexify(uid, uidLength);
- if (str22.equals(str2)) return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement