Lab1.2 — Arduino Mega simulation

An interactive Arduino Mega circuit simulation you can run free in your browser on Velxio, by luncag2.

Components

Sketch code

#include <Arduino.h>
#include <stdio.h>
#include <string.h>
#include "LedControl.h"
#include "DisplayControl.h"
#include "KeypadControl.h"

FILE LcdStream = {0};
FILE KeypadStream = {0};

const char ValidCode[] = "1234";

void SetupStdio() {
    // LcdStream: scriere = LcdPutChar, citire = NULL
    fdev_setup_stream(&LcdStream, LcdPutChar, NULL, _FDEV_SETUP_WRITE);
    
    // KeypadStream: scriere = NULL, citire = KeypadGetChar  <-- AICI ERA CORECTIA!
    fdev_setup_stream(&KeypadStream, NULL, KeypadGetChar, _FDEV_SETUP_READ);

    stdout = &LcdStream;
    stdin  = &KeypadStream;
}

void setup() {
    Serial.begin(9600);
    InitLeds();
    InitDisplay();
    InitKeypad();
    SetupStdio();

    Lcd.clear();
    Lcd.setCursor(0, 0);
    Lcd.print("Intro Codul:");
    Serial.println("Intro Codul:");
    Lcd.setCursor(0, 1);
}

void loop() {
    char inputBuffer[10] = {0};

    // Acum scanf nu va mai crăpa, deoarece are o funcție validă de citire
    scanf("%9s", inputBuffer);

    Lcd.setCursor(0, 1);
    if (strcmp(inputBuffer, ValidCode) == 0) {
        Lcd.print("Cod Acceptat!   ");
        Serial.println("\nCod Acceptat!");
        SetLedState(true);
    } else {
        Lcd.print("Cod Eroare!     ");
        Serial.println("\nCod Eroare!");
        SetLedState(false);
    }

    delay(3000);
    ClearLeds();

    Lcd.clear();
    Lcd.setCursor(0, 0);
    Lcd.print("Intro Codul:");
    Serial.println("Intro Codul:");
    Lcd.setCursor(0, 1);
}