Krika-Diplomen — Arduino Uno simulation

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

Components

Sketch code

// Включване на библиотеката за серво мотор
#include <Servo.h>

// Променени пинове според вашата хардуерна схема във Velxio
#define CLK 3
#define DT 2

Servo servo;
int counter = 0;
int currentStateCLK;
int lastStateCLK;

void setup() {
  // Настройка на пиновете като вградени Pull-up (задължително за Velxio)
  pinMode(CLK, INPUT_PULLUP);
  pinMode(DT, INPUT_PULLUP);

  // Стартиране на серийния монитор
  Serial.begin(9600);

  // Закачане на сервото към пин 9
  servo.attach(9);
  servo.write(counter);

  // Прочитане на първоначалното състояние на CLK
  lastStateCLK = digitalRead(CLK);
  
  Serial.println("Encoder & Servo Test Started...");
}

void loop() {
  // Прочитане на текущото състояние на CLK
  currentStateCLK = digitalRead(CLK);

  // Проверяваме дали има промяна и реагираме само на преход към HIGH (1)
  if (currentStateCLK != lastStateCLK && currentStateCLK == HIGH) {

    // СЪЩАТА ЛОГИКА С ОБЪРНАТИ ЗНАЦИ, ЗА ДА СЪВПАДАТ ПОСОКИТЕ:
    // Ако DT е различен от CLK -> енкодерът се върти НАДЯСНО (CW) -> събираме
    if (digitalRead(DT) != currentStateCLK) {
      counter++;
      if (counter > 179) {
        counter = 179; // Ограничение до 179 градуса за сервото
      }
    } 
    // В противен случай се върти НАЛЯВО (CCW) -> изваждаме
    else {
      counter--;
      if (counter < 0) {
        counter = 0;   // Ограничение до 0 градуса за сервото
      }
    }

    // Движение на серво мотора
    servo.write(counter);
    
    // Извеждане на резултата веднага в конзолата
    Serial.print("Position: ");
    Serial.println(counter);
  }

  // Запаметяване на състоянието за следващия такт на loop()
  lastStateCLK = currentStateCLK;
}

More projects by titanabg0