CCCPaste

**Payment Control** rev_01

/********* Pleasedontcode.com **********

	Pleasedontcode thanks you for automatic code generation! Enjoy your code!

	- Terms and Conditions:
	You have a non-exclusive, revocable, worldwide, royalty-free license
	for personal and commercial use. Attribution is optional; modifications
	are allowed, but you're responsible for code maintenance. We're not
	liable for any loss or damage. For full terms,
	please visit pleasedontcode.com/termsandconditions.

	- Project: **Payment Control**
	- Source Code NOT compiled for: ESP32 DevKit V1
	- Source Code created on: 2024-11-06 13:45:32

********* Pleasedontcode.com **********/

/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
	/* A Paygo mini solar energy kit.Kit aims at */
	/* providing solar energy from a battery to a */
	/* consumer if he pays via SMS or Card to receive a */
	/* token code that he then enters into the kit via */
	/* keypad. Once codes match, energy is provided for */
	/* certain time. */
/****** END SYSTEM REQUIREMENTS *****/

/* START CODE */

/****** DEFINITION OF LIBRARIES *****/
#include   // Include this for GSM communication

/****** FUNCTION PROTOTYPES *****/
void setup(void);
void loop(void);
void checkForPaymentCode();
void activateSystem();

/****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
SoftwareSerial gsmModule(16, 17); // RX, TX pins for GSM module (Compatible with ESP32)
const int LED_PIN = 2; // LED light connected to pin 2 (Compatible with ESP32)
bool isSystemActive = false;
long unlockTime = 0;

void setup(void)
{
    Serial.begin(9600);
    gsmModule.begin(9600); // Initialize GSM module
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, LOW); // System starts locked
}

void loop(void)
{
    checkForPaymentCode(); // Check for an SMS code
    if (isSystemActive) {
        // Turn on LED or enable charging if system is unlocked
        digitalWrite(LED_PIN, HIGH);
        
        // Check if time to deactivate
        if (millis() - unlockTime >= 86400000) { // 24 hours in milliseconds
            isSystemActive = false;
            digitalWrite(LED_PIN, LOW);
        }
    }
}

void checkForPaymentCode() {
    if (gsmModule.available()) {
        String message = gsmModule.readString();
        
        // Verify the code received
        if (message.indexOf("PAYGO_CODE") >= 0) {
            activateSystem();
        }
    }
}

void activateSystem() {
    isSystemActive = true;
    unlockTime = millis(); // Start the timer
    Serial.println("System activated for 24 hours.");
}

/* END CODE */