Arduino için yapılan kod düzgün çalışmıyor

utkualper2

Centipat
Katılım
12 Ocak 2023
Mesajlar
256
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
C#:
#include <Servo.h>

Servo servoMotor; // Servo motor nesnesi oluşturuluyor.
int ledPin = A1; // LED'in bağlı olduğu dijital pin (13)
int servoPin = A2; // Servo motorun bağlı olduğu dijital pin (9)
int angle = 0; // Başlangıç açısı.

void setup() {
 servoMotor.attach(servoPin); // Servo motoru belirtilen pini kullanarak başlat.
 pinMode(ledPin, OUTPUT); // LED pinini çıkış olarak ayarla.
}

void loop() {
 for (angle = 0; angle <= 180; angle++) { // 0 ile 180 derece arasında döngü oluştur.
 servoMotor.write(angle); // Servo motoru belirli açıya döndür.
 delay(10); // Servo motorun daha akıcı hareket etmesi için delay süresi azaltıldı.
 if (angle >= 70 && angle <= 90) {
 digitalWrite(ledPin, LOW); // LED'i söndür.
 } else if (angle >= 90 && angle <= 110) {
 digitalWrite(ledPin, HIGH); // LED'i tam parlaklıkta yak.
 }
 }

 for (angle = 180; angle >= 0; angle--) { // 180 ile 0 derece arasında döngü oluştur.
 servoMotor.write(angle); // Servo motoru belirli açıya döndür.
 delay(10); // Servo motorun daha akıcı hareket etmesi için delay süresi azaltıldı.
 if (angle >= 70 && angle <= 90) {
 digitalWrite(ledPin, LOW); // LED'i söndür.
 } else if (angle >= 90 && angle <= 110) {
 digitalWrite(ledPin, HIGH); // LED'i tam parlaklıkta yak.
 }
 }
}

Kodum bu. Projemizi genel hatlarıyla anlatayım. Bir tane servo motor var LED servo motor 90° derecede maksimum seviyede yanacak. 75 ile 90°arasında ve 105 ile 90°arasında az yanacak 90 dereeye yaklaştıkça daha da ışık şiddeti artacak. LED PIN'i: A1 servo PIN'i: A2.
C# ile yazıldı. Kodda ata var çözemedim. Bu proje benim için önemli, yardımcı olanlara şimdiden teşekkürler.
 

Dosya Ekleri

  • IMG-20240406-WA0037.jpg
    IMG-20240406-WA0037.jpg
    35,1 KB · Görüntüleme: 7
Son düzenleyen: Moderatör:
C#'da Windows. Devices. Gpio kütüphanesi, Windows IoT Core gibi bir platformda çalışırken, Arduino IDE'deki kodunuz Arduino tabanlı mikrodenetleyicilerde çalışır. Bu iki platform arasında farklılık bulunmaktadır ve bu nedenle doğrudan bir çeviri yapmak mümkün değildir. Arduino kodunu C#'a dönüştürmek için Arduino ile uyumlu bir C# kütüphanesi kullanmanız gerekmektedir. Ne yazık ki, Arduino kodunu doğrudan C#'a dönüştürebilecek bir otomatik dönüştürücü mevcut değildir çünkü Arduino ve C# farklı dillerdir ve farklı platformlarda çalışırlar. Bu sebeple, Arduino kodunuzu C#'a dönüştürmek için, Arduino kodunun yaptığı işlevselliğin mantığını anlamalı ve sonrasında C#'da bu işlevselliği yeniden oluşturmalısınız. İki platformun da farklı yapıları olduğundan, tamamen aynı kodu elde etmek mümkün olmayabilir.

C#:
using System;
using System.Threading.Tasks;
using Windows.Devices.Gpio;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;


namespace ArduinoToCSharp
{
    public sealed partial class MainPage : Page
    {
        private const int ledPinNumber = 5; // LED'in bağlı olduğu pin (A1)
        private const int servoPinNumber = 6; // Servo motorun bağlı olduğu pin (A2)
        private const int servoMinAngle = 0; // Servo motorun minimum açısı
        private const int servoMaxAngle = 180; // Servo motorun maksimum açısı
        private const int minBrightnessAngle = 75; // Işık şiddetinin minimum olduğu açı
        private const int maxBrightnessAngle = 105; // Işık şiddetinin maksimum olduğu açı
        private const int maxBrightnessValue = 255; // Maksimum parlaklık değeri


        private GpioPin ledPin;
        private DispatcherTimer timer;
        private int currentAngle = servoMinAngle;
        private int angleDirection = 1; // Servo motorun dönüş yönü (1: artan, -1: azalan)


        public MainPage()
        {
            InitializeComponent();
            InitializeGPIO();
            InitializeTimer();
        }


        private void InitializeGPIO()
        {
            var gpio = GpioController.GetDefault();
            if (gpio == null)
            {
                throw new InvalidOperationException("GPIO pin is not available on this device.");
            }


            ledPin = gpio.OpenPin(ledPinNumber);
            ledPin.SetDriveMode(GpioPinDriveMode.Output);
        }


        private void InitializeTimer()
        {
            timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromMilliseconds(10);
            timer.Tick += Timer_Tick;
            timer.Start();
        }


        private void Timer_Tick(object sender, object e)
        {
            UpdateServoAngle();
            UpdateLedBrightness();
        }


        private void UpdateServoAngle()
        {
            currentAngle += angleDirection;
            if (currentAngle < servoMinAngle || currentAngle > servoMaxAngle)
            {
                angleDirection *= -1; // Ters yönde dönmek için yönü değiştir
                currentAngle = Math.Clamp(currentAngle, servoMinAngle, servoMaxAngle);
            }
        }


        private void UpdateLedBrightness()
        {
            if (currentAngle >= minBrightnessAngle && currentAngle <= maxBrightnessAngle)
            {
                int brightness = Map(currentAngle, minBrightnessAngle, maxBrightnessAngle, 0, maxBrightnessValue);
                ledPin.Write(GpioPinValue.High);
                Task.Delay(brightness).Wait(); // Parlaklığı ayarlamak için bekleyin
                ledPin.Write(GpioPinValue.Low);
            }
            else
            {
                ledPin.Write(GpioPinValue.Low); // LED'i kapat
            }
        }


        private int Map(int value, int fromLow, int fromHigh, int toLow, int toHigh)
        {
            return (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
        }
    }
}

Umraım yardımcı olmuşumdur!
 
C#'da Windows. Devices. Gpio kütüphanesi, Windows IoT Core gibi bir platformda çalışırken, Arduino IDE'deki kodunuz Arduino tabanlı mikrodenetleyicilerde çalışır. Bu iki platform arasında farklılık bulunmaktadır ve bu nedenle doğrudan bir çeviri yapmak mümkün değildir. Arduino kodunu C#'a dönüştürmek için Arduino ile uyumlu bir C# kütüphanesi kullanmanız gerekmektedir. Ne yazık ki, Arduino kodunu doğrudan C#'a dönüştürebilecek bir otomatik dönüştürücü mevcut değildir çünkü Arduino ve C# farklı dillerdir ve farklı platformlarda çalışırlar. Bu sebeple, Arduino kodunuzu C#'a dönüştürmek için, Arduino kodunun yaptığı işlevselliğin mantığını anlamalı ve sonrasında C#'da bu işlevselliği yeniden oluşturmalısınız. İki platformun da farklı yapıları olduğundan, tamamen aynı kodu elde etmek mümkün olmayabilir.

C#:
using System;
using System.Threading.Tasks;
using Windows.Devices.Gpio;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace ArduinoToCSharp.
{
 public sealed partial class MainPage : Page.
 {
 private const int ledPinNumber = 5; // LED'in bağlı olduğu pin (A1)
 private const int servoPinNumber = 6; // Servo motorun bağlı olduğu pin (A2)
 private const int servoMinAngle = 0; // Servo motorun minimum açısı.
 private const int servoMaxAngle = 180; // Servo motorun maksimum açısı.
 private const int minBrightnessAngle = 75; // Işık şiddetinin minimum olduğu açı.
 private const int maxBrightnessAngle = 105; // Işık şiddetinin maksimum olduğu açı.
 private const int maxBrightnessValue = 255; // Maksimum parlaklık değeri.

 private GpioPin ledPin;
 private DispatcherTimer timer;
 private int currentAngle = servoMinAngle;
 private int angleDirection = 1; // Servo motorun dönüş yönü (1: artan, -1: azalan)

 public MainPage()
 {
 InitializeComponent();
 InitializeGPIO();
 InitializeTimer();
 }

 private void InitializeGPIO()
 {
 var gpio = GpioController.GetDefault();
 if (gpio == null)
 {
 throw new InvalidOperationException("GPIO pin is not available on this device.");
 }

 ledPin = gpio.OpenPin(ledPinNumber);
 ledPin.SetDriveMode(GpioPinDriveMode.Output);
 }

 private void InitializeTimer()
 {
 timer = new DispatcherTimer();
 timer.Interval = TimeSpan.FromMilliseconds(10);
 timer.Tick += Timer_Tick;
 timer.Start();
 }

 private void Timer_Tick(object sender, object e)
 {
 UpdateServoAngle();
 UpdateLedBrightness();
 }

 private void UpdateServoAngle()
 {
 currentAngle += angleDirection;
 if (currentAngle < servoMinAngle || currentAngle > servoMaxAngle)
 {
 angleDirection *= -1; // Ters yönde dönmek için yönü değiştir.
 currentAngle = Math.Clamp(currentAngle, servoMinAngle, servoMaxAngle);
 }
 }

 private void UpdateLedBrightness()
 {
 if (currentAngle >= minBrightnessAngle && currentAngle <= maxBrightnessAngle)
 {
 int brightness = Map(currentAngle, minBrightnessAngle, maxBrightnessAngle, 0, maxBrightnessValue);
 ledPin.Write(GpioPinValue.High);
 Task.Delay(brightness).Wait(); // Parlaklığı ayarlamak için bekleyin.
 ledPin.Write(GpioPinValue.Low);
 }
 else.
 {
 ledPin.Write(GpioPinValue.Low); // LED'i kapat.
 }
 }

 private int Map(int value, int fromLow, int fromHigh, int toLow, int toHigh)
 {
 return (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
 }
 }
}

Umraım yardımcı olmuşumdur!

Arduino IDE de olmuyor. Private komutlarını ve üstteki kütüphanede uyarı veriyor.
 

Geri
Yukarı