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;
}
}
}