Merhaba arkadaşlar internetten arduinoyu c#ile kontrol eden bir proje buldum fakat cok kucuk 2 hata veriyor bilenler için basit gibi yardımcı olursanız sevinirim
Kolay gelsin
Arduino Kodu
int Led1 = 7;
int Led2 = 8;
int Led3 = 9;
int Led4 = 10;
int Led5 = 11;
void setup()
{
Serial.begin(9600);
pinMode(Led1,OUTPUT);
pinMode(Led2,OUTPUT);
pinMode(Led3,OUTPUT);
pinMode(Led4,OUTPUT);
pinMode(Led5,OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
if(GelenKarakter == 'a')
{
digitalWrite(Led3, HIGH);
}
else if(GelenKarakter == 'b')
{
digitalWrite(Led1, HIGH);
digitalWrite(Led5, HIGH);
digitalWrite(Led4, HIGH);
}
else if(GelenKarakter == 'c')
{
digitalWrite(Led2, HIGH);
}
else if(GelenKarakter == 'd')
{
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
}
else if(GelenKarakter == 'e')
{
for(int i=0; i < 5; i++ )
{
digitalWrite(Led5, LOW);
digitalWrite(Led1, HIGH);
delay(500);
digitalWrite(Led1, LOW);
digitalWrite(Led2, HIGH);
delay(500);
digitalWrite(Led2, LOW);
digitalWrite(Led4, HIGH);
delay(500);
digitalWrite(Led4, LOW);
digitalWrite(Led3, HIGH);
delay(500);
digitalWrite(Led3, LOW);
digitalWrite(Led5, HIGH);
delay(500);
}
}
else if(GelenKarakter == 'f')
{
for(int k = 0; k < 7; k++)
{
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, HIGH);
digitalWrite(Led5, HIGH);
delay(300);
digitalWrite(Led1, LOW);
digitalWrite(Led2, LOW);
digitalWrite(Led3, LOW);
digitalWrite(Led4, LOW);
digitalWrite(Led5, LOW);
delay(300);
}
}
}
}
c#kodu
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Arduino
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SeriPort.PortName = "COM7";
SeriPort.BaudRate = 9600;
SeriPort.Open();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Opacity = 0;
timer1.Enabled = true;
timer1.Start();
}
private void KirmiziBtn_Click(object sender, EventArgs e)
{
SeriPort.Write('a');
}
private void MaviBtn_Click(object sender, EventArgs e)
{
SeriPort.Write('b');
}
private void BeyazBtn_Click(object sender, EventArgs e)
{
SeriPort.Write('c');
}
private void SondurBtn_Click(object sender, EventArgs e)
{
SeriPort.Write('d');
}
private void Animasyon1Btn_Click(object sender, EventArgs e)
{
SeriPort.Write('e');
}
private void Animasyon2Btn_Click(object sender, EventArgs e)
{
SeriPort.Write('f');
}
private void timer1_Tick(object sender, EventArgs e)
{
this.Opacity += 0.04;
label1.Text = label1.Text.Substring(1) + label1.Text[0].ToString();
}
}
}
Keşke hataları da yazsanız...
c# böyle bir hata veriyor
"Error 4 The name 'SeriPort' does not exist in the current context C:\Users\EKREM\Desktop\Arduino\Arduino\Form1.cs 32 13 Arduino"
arduino ise
"GelenKarakter was not declared in this scope"
mesaj birleştirme:: 19 Ocak 2014, 15:31:08
arduino da galiba sorunu buldum "int GelenKarakter;" olarak tanımladım sizce doğrumudur ?
c# sorunu ise hala devam ediyor
Bu kadar bilgiden ancak tahmin edebilirim. Runtime değil Compile Time hatası alıyorsunuz.
Kodları kopyalamışsınız ama Dizayn tarafında da toolbox'tan SerialPort nesnesi ekleyip ismini SeriPort yapmanız gerekiyor.
Veya kod tarafında Global olarak ;
SerialPort SeriPort = new SerialPort(); kodunu eklemeniz gerekiyor.
teşekkürler c# düzeldi 2 küçük sorum daha kaldı :)
private void Off_Click(object sender, EventArgs e)
{
serialPort1.Write("d");
}
bu kısım doğrumu yoksa ("d") yerine ('d') mi olmalı
diğeri ise
arduino kısmında if yerine else if yazınca hata alıyorum
int GelenKarakter;
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
if(GelenKarakter == 'a')
{
digitalWrite(9, HIGH);
}
else if(GelenKarakter == 'b')
{
digitalWrite(10, HIGH);
}
else if(GelenKarakter == 'c');
{
digitalWrite(11, HIGH);
}
else if(GelenKarakter == 'd')
{
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}
}
hata: "expected ')' before 'else'"
Debug yaparak anlamaya çalışalım. IF yapılarını unutalım ve Gelen karakteri direk ekrana yazdıralım.
Bakalım Arduino'ya ne geliyor. Sonra IF'leri ona göre düzenlersiniz.
int GelenKarakter;
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();//C# arayüzünden gelen karakteri okuduk
digitalWrite(GelenKarakter, HIGH);
}
}
2 tane else if koyabiliyorum ama 3. koyduğum zaman hata veriyor
"expected ')' before "else" " şeklinde
kodun son hali
int GelenKarakter;
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();
if(GelenKarakter == 'a')
{
digitalWrite(9, HIGH);
}
else if(GelenKarakter == 'b')
{
digitalWrite(10, HIGH);
}
else if(GelenKarakter == 'c');
{
digitalWrite(11, HIGH);
}
else if(GelenKarakter == 'd')
{
digitalWrite(12, HIGH);
}
}
}
Ama benim dediğimi yapmıyorsun :)
int GelenKarakter diye tanımlamışsın. if (GelenKarakter == 'a') gibi birşey diyemezsin.
if(GelenKarakter == 61) diyebilirsin. 61 küçük a harfinin hex karşılığı. O yüzden diyorum önce gelen karakteri direk ekrana yazdır. Ne geliyormuş bir anlayalım.
{
digitalWrite(9, HIGH);
}
Bir önceki mesajımda yazdığım kodu kullan.
bkz. http://www.cdrummond.qc.ca/cegep/informat/professeurs/alain/images/ASCII1.GIF (http://www.cdrummond.qc.ca/cegep/informat/professeurs/alain/images/ASCII1.GIF)
suan elimde arduino yok o yüzden deneyemiyorum
int GelenKarakter;
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
GelenKarakter = Serial.read();
if(GelenKarakter == 'a')
{
digitalWrite(9, HIGH);
}
else if(GelenKarakter == 'b')
{
digitalWrite(10, HIGH);
}
else if(GelenKarakter == 'c')
{
digitalWrite(11, HIGH);
}
else if(GelenKarakter == 'd')
{
digitalWrite(12, HIGH);
}
}
}
mesaj birleştirme:: 19 Ocak 2014, 19:58:26
Tek tırnak içerisinde olduğu için harf kullanılabilir. Ancak yazılamayan
karakterler için ASCII karşılığındaki rakam kullanılabilir.
switch yapısı kullanmanızı tavsiye ederim.