lab2 — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by nataliia-tymchyshyn-25.

Components

Sketch code

#include <LiquidCrystal.h>

#define pinBtn 6
#define MAX_SAMPLES 100
#define MIN_SAMPLES 10
#define SAMPLE_STEP 10

unsigned long previousMillis = 0, interval = 2000;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
bool a;
int buttonState;
int lastButtonState = HIGH; 

float V0, V1;
float V0_avg, V1_avg;
float V0_values[MAX_SAMPLES];
float V1_values[MAX_SAMPLES];
int valueIndex = 0;
int sampleSize = MIN_SAMPLES;
int samplesCount = 0;

unsigned long intervalArray[] = {2000, 1000, 667, 500};
int intervalIndex = 0;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

float calculateAverage(float values[], int size) {
  float sum = 0;
  for (int i = 0; i < size; i++) {
    sum += values[i];
  }
  return sum / size;
}

void changeSampleSize() {
  sampleSize += SAMPLE_STEP;
  if (sampleSize > MAX_SAMPLES) {
    sampleSize = MIN_SAMPLES;  
  }
  samplesCount = 0;  
  valueIndex = 0; 
}

void setup()
{
  Serial.begin(9600);
  lcd.begin(16, 2);
  
  pinMode(pinBtn, INPUT_PULLUP);
}

void loop()
{
   unsigned long currentMillis = millis();
   int reading = digitalRead(pinBtn);
   if (reading != lastButtonState) {
    lastDebounceTime = currentMillis;
  }
    if ((currentMillis - lastDebounceTime) > debounceDelay) {
      if (reading != buttonState) {
        buttonState = reading;
        if (buttonState == LOW) {
          a = !a;

          intervalIndex++;
          if (intervalIndex >= 4) {
            intervalIndex = 0;
          }
          interval = intervalArray[intervalIndex];
        }
      }
    }
   lastButtonState = reading;

  if(currentMillis - previousMillis >= interval){
    previousMillis = currentMillis;
    V0 = 5.0 * analogRead(A0) / 1023;
    V1 = 5.0 * analogRead(A1) / 1023;

    V0_values[valueIndex] = V0;
    V1_values[valueIndex] = V1;
    valueIndex++;  
    samplesCount++;

    V0_avg = calculateAverage(V0_values, samplesCount);
    V1_avg = calculateAverage(V1_values, samplesCount);
    
    Serial.print("V0:");
    Serial.print(V0, 3);
    Serial.print("  ");
    Serial.println(sampleSize);
    Serial.print("V1:");
    Serial.print(V1, 3);
    Serial.print(" A:");
    Serial.println(V1_avg, 3);
    
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("V0:");
    lcd.print(V0, 3);
    lcd.print("  ");
    lcd.print(sampleSize);

    lcd.setCursor(0, 1);
    lcd.print("V1:");
    lcd.print(V1, 3);
    lcd.print(" A:");
    lcd.print(V1_avg, 3);

    if (samplesCount >= sampleSize){
      changeSampleSize();
    }
  }
}

More projects by nataliia-tymchyshyn-25