Describe the software modules and architecture required to build an automated vending machine from an embedded developer's perspective.