Herkese merhaba,
Bu konu üzerinde kaç gündür internetin altını üstüne getirmeme rağmen doğru düzgün bilgiye rastlayamadım.
Yapmaya çalıştığım şey temel olarak C# üzerinden servo sürmek.
Bunu C#'tan 0-180 arası byte göndererek zaten yapabiliyoruz.
Ama ben pulse süresini (650-2350 arasında bir değer) mikrosaniye cinsinden göndermek istiyorum. Yani,
output_high(PIN_C0);
delay_us(d);
output_low(PIN_C0);
delay_us(20000-d);
d değerini integer olarak göndermek istiyorum.
Bunu şu şekilde çözdüm aslında ama çok uzadı kod:
C# kısmının ilgili bölümü:
if (tBar_ServoHR.Value >= 650 && tBar_ServoHR.Value < 895)
{
send(248);
send(Byte.Parse((tBar_ServoHR.Value - 650).ToString()));
}
else if (tBar_ServoHR.Value >= 895 && tBar_ServoHR.Value < 1140)
{
send(249);
send(Byte.Parse((tBar_ServoHR.Value - 895).ToString()));
}
else if (tBar_ServoHR.Value >= 1140 && tBar_ServoHR.Value < 1385)
{
send(250);
send(Byte.Parse((tBar_ServoHR.Value - 1140).ToString()));
}
else if (tBar_ServoHR.Value >= 1385 && tBar_ServoHR.Value < 1630)
{
send(251);
send(Byte.Parse((tBar_ServoHR.Value - 1385).ToString()));
}
else if (tBar_ServoHR.Value >= 1630 && tBar_ServoHR.Value < 1875)
{
send(252);
send(Byte.Parse((tBar_ServoHR.Value - 1630).ToString()));
}
else if (tBar_ServoHR.Value >= 1875 && tBar_ServoHR.Value < 2120)
{
send(253);
send(Byte.Parse((tBar_ServoHR.Value - 1875).ToString()));
}
else if (tBar_ServoHR.Value >= 2120 && tBar_ServoHR.Value < 2350)
{
send(254);
send(Byte.Parse((tBar_ServoHR.Value - 2120).ToString()));
}
C#taki send de şöyle bir şey
public void send(byte outdata)
{
byte[] buffer = { 0 };
buffer[0] = outdata;
serialPort1.Write(buffer, 0, 1);
}
şimdi de PICC kodu:
#int_rda
void bgetc() {
c=getc();
if(c>=248) aralik=c-247;
if(c<248)
{
c=getc();
if (aralik==1) d=c+650;
if (aralik==2) d=c+895;
if (aralik==3) d=c+1140;
if (aralik==4) d=c+1385;
if (aralik==5) d=c+1630;
if (aralik==6) d=c+1875;
if (aralik==7) d=c+2120;
}
}
Daha kompakt ve pratik bir yol olabilir mi acaba? mesela gets() kullanılır?
ya da direk C#'tan int aktarma.
Teşekkürler.