Arduino Nano ve TM1638 ile step motor için ayarlı sürücü clock sürücü yapma

jes

Üye
Katılım
9 Tem 2022
Mesajlar
337
Puanları
31
Yaş
29
Merhabalar,

Nano ve tm 1638 shield ile step motor sürücülerin hızını kalibre edebileceğim bi menü tasarımı yapmam gerekiyor yardımlarınızı bekliyorum,

şimdilik nano ve tm1638 bağlantılarını yaptım ve bi test atışı yaptım, kütüphane olarak TM1638lite kullanıyorum.

V1: Şimdilik sadece basılan butonun ledini yakıyor ve seri porttan 1.5 sn de bir starttan beri geçen zamanı milisaniye cinsinden ekrana basıyor.
V1: Code
C++:
#include <TM1638lite.h>

// I/O pins on the Arduino connected to strobe, clock, data
// (power should go to 3.3v and GND)
TM1638lite tm(A0, A1, A2);
unsigned long myTime;
void setup() {

  Serial.begin(9600);

  tm.reset();

  tm.displayText("Eh");
  tm.setLED(0, 1);
 
  delay(2000);

  tm.displayASCII(6, 'u');
  tm.displayASCII(7, 'p');
  tm.setLED(7, 1);

  delay(2000);

  tm.displayHex(0, 8);
  tm.displayHex(1, 9);
  tm.displayHex(2, 10);
  tm.displayHex(3, 11);
  tm.displayHex(4, 12);
  tm.displayHex(5, 13);
  tm.displayHex(6, 14);
  tm.displayHex(7, 15);

  delay(2000);

  tm.displayText("buttons");
  myTime = millis();
}

void loop() {
  uint8_t buttons = tm.readButtons();
  doLEDs(buttons);
 
  if( (millis() - myTime) >1500)
    {
     // prints time since program started
    Serial.print("Time: ");
    Serial.println(myTime);
    myTime = millis();
    }
  
}

// scans the individual bits of value
void doLEDs(uint8_t value) {
  for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, value & 1);
    value = value >> 1;
  }
}

Şimdi totelde 2 step motor için asenkron clock sinyali almam gerekiyor butonlar aracığılıyla clock hz setlerini değiştirmem gerekiyor biraz multithread bi yapı var o yüzden kafam karışıyor. Seri porta zaman basarken kullandığım yöntemle mi yapmalıyım(orda hafif modifiye yaptım yoksa ledlerin realtime davranışları kesintiye uğruyordu) yoksa başka bi tecrübesi olan var mı acaba?
 

Ekli dosyalar

  • photo_2023-05-02_10-11-15.jpg
    photo_2023-05-02_10-11-15.jpg
    224.3 KB · Görüntüleme: 11
TM1638 'e değer yollamadığınız zamanlarda
ekranda değer sabit kalır. Bu durumu
kullanabilirsiniz. Boşluk zamanlarda ekran
tazelemesi yapılır.
Bir de yapacağınız işte gerçekten step motora
ihtiyaç var mı?
 
TM1638 'e değer yollamadığınız zamanlarda
ekranda değer sabit kalır. Bu durumu
kullanabilirsiniz. Boşluk zamanlarda ekran
tazelemesi yapılır.
Bir de yapacağınız işte gerçekten step motora
ihtiyaç var mı?
evet 2 step motor aynı proseste senkron çalışmalı
 
V2: step1speed ve step1speed isimli byte değişkenlerinin değerini 0 ile 255 değerlerinde ayar yapıyor(default 25),
1.2.3.4. butonlar aktif, değişiklik olduğunda ekranda gösteriyor ayrıca seri porttan pc dede okunuyor.
v2code:
Kod:
#include <TM1638lite.h>

TM1638lite tm(A0, A1, A2);
unsigned long myTime;
void setup() {

  Serial.begin(9600);

  myTime = millis();
  tm.displayText("ON");
}

byte step1speed=25;
byte step2speed=25;

void loop() {


    uint8_t buttons = tm.readButtons();

    if(buttons==1)
      {
       delay(200);
       if(step1speed<=254)
       step1speed++;
       if(tm.readButtons()==1)
       if(step1speed<=245)
       step1speed=step1speed+10;
       tm.displayText(String(step1speed));
      }
    if(buttons==2)
      {
       delay(201);
       if(step1speed>=1)
       step1speed--;
       if(tm.readButtons()==2)
       if(step1speed>=10)
       step1speed=step1speed-10;
       tm.displayText(String(step1speed));
      }
    if(buttons==4)
    {
      delay(200);
      if(step2speed<=254)
      step2speed++;
      if(tm.readButtons()==4)
      if(step2speed<=245)
      step2speed=step2speed+10;
      tm.displayText(String(step2speed));
    }
    if(buttons==8)
    {
      delay(201);
      if(step2speed>=1)
      step2speed--;
      if(tm.readButtons()==8)
      if(step2speed>=10)
      step2speed=step2speed-10;
      tm.displayText(String(step2speed));
    }
      
  doLEDs(buttons);
 
  if( (millis() - myTime) >300)
    {
      
     // prints time since program started
    Serial.print("Step: ");
    Serial.println(step1speed);
    Serial.print("  Step2: ");
    Serial.println(step2speed);
    myTime = millis();
    }
}

void doLEDs(uint8_t value) {
  for (uint8_t position = 0; position < 8; position++) {
    tm.setLED(position, value & 1);
    value = value >> 1;
  }
}

sırada step sürücü kütüphanelerini kurcalamak var
 

Forum istatistikleri

Konular
128,196
Mesajlar
915,751
Kullanıcılar
449,973
Son üye
sfc16

Yeni konular

Geri
Üst