// Define LED pins
const int rawMaterialsPin = 13;
const int manufacturedProductsPin = 12;
const int warehouseStockPin = 14;
// Define variables
int rawMaterials = 0;
int products = 0;
int warehouseStock = 0;
int productsSold = 0; // Added to keep track of products sold
// Simulation parameters
const int SUPPLY_RATE = 10; // Amount of raw materials added per cycle
const int MANUFACTURE_RATE = 5; // Amount of products manufactured per cycle
// Blink parameters
const unsigned long RAW_MATERIALS_BLINK_INTERVAL = 1000; // 1 second
const unsigned long MANUFACTURED_PRODUCTS_BLINK_INTERVAL = 1500; // 1.5 seconds
const unsigned long WAREHOUSE_STOCK_BLINK_INTERVAL = 2000; // 2 seconds
// Delay for printing output
const unsigned long PRINT_DELAY = 1000; // 1 second
unsigned long previousMillisRawMaterials = 0;
unsigned long previousMillisManufacturedProducts = 0;
unsigned long previousMillisWarehouseStock = 0;
unsigned long previousPrintMillis = 0;
bool rawMaterialsState = LOW;
bool manufacturedProductsState = LOW;
bool warehouseStockState = LOW;
void setup() {
// Initialize serial communication
Serial.begin(115200);
// Initialize LED pins as outputs
pinMode(rawMaterialsPin, OUTPUT);
pinMode(manufacturedProductsPin, OUTPUT);
pinMode(warehouseStockPin, OUTPUT);
}
void loop() {
// Get current time
unsigned long currentMillis = millis();
// Simulate suppliers adding raw materials
rawMaterials += SUPPLY_RATE;
// Simulate manufacturing process
if (rawMaterials >= MANUFACTURE_RATE) {
products += MANUFACTURE_RATE;
rawMaterials -= MANUFACTURE_RATE;
}
// Simulate storing products in the warehouse
warehouseStock = products;
// Simulate selling products at the retailer
if (warehouseStock > 0) {
warehouseStock--;
products--; // Decrement products as they are sold
productsSold++; // Increment products sold
}
// Print status periodically
if (currentMillis - previousPrintMillis >= PRINT_DELAY) {
previousPrintMillis = currentMillis;
Serial.print("Raw Materials: ");
Serial.println(rawMaterials);
Serial.print("Products Manufactured: ");
Serial.println(products + productsSold); // Total manufactured products
Serial.print("Warehouse Stock: ");
Serial.println(warehouseStock);
Serial.print("Products Sold: ");
Serial.println(productsSold); // Updated to show sold products
}
// Blink raw materials LED
if (currentMillis - previousMillisRawMaterials >= RAW_MATERIALS_BLINK_INTERVAL) {
previousMillisRawMaterials = currentMillis;
rawMaterialsState = !rawMaterialsState;
digitalWrite(rawMaterialsPin, rawMaterialsState);
}
// Blink manufactured products LED
if (currentMillis - previousMillisManufacturedProducts >= MANUFACTURED_PRODUCTS_BLINK_INTERVAL) {
previousMillisManufacturedProducts = currentMillis;
manufacturedProductsState = !manufacturedProductsState;
digitalWrite(manufacturedProductsPin, manufacturedProductsState);
}
// Blink warehouse stock LED
if (currentMillis - previousMillisWarehouseStock >= WAREHOUSE_STOCK_BLINK_INTERVAL) {
previousMillisWarehouseStock = currentMillis;
warehouseStockState = !warehouseStockState;
digitalWrite(warehouseStockPin, warehouseStockState);
}
}