seri haberleşme son durum konrolü
  • Merhaba arkadaşlar.
    Yapmak istediğim proje C# üzerinden oluşturduğum 10 adet buton ile arduino çıkışlarını açıp kapama ve buna ek olarak zaman ayarı koyma (saat13:00'da aç 16:40'ta kapan gibi).
    Vede enerji kesilip tekrar geldiğinde kaldığı yerden devam etmesidir.
    Bunları başarırsam sonraki adım seriport mesafe sorunu olduğundan Ethernet Shield W5100 sd üzerinden iletişim kurmayı düşünüyorum(sanırım çok şey istedim).

    çalışmalarımı adım adım gidiyordum takıldım kaldım.
    Şimdilik Takıldığım kısım.
    Arduinoya seriden gelen 1. bilgi örneğin: 1 olsun
    2. bilgide : buton1ac olsun
    2. bilgiyi gönderdiğimde 1. bilgiyide işliyor içerisinde 1 olduğu için

    C# kısmında butonları yaptım arduinoya göderecekleri bilgileri yaptım.
    seri porttan r(rest) harfini göndererek arduinonun durum kontrol (çıkışların)yapıyorum.

    Sorunlarla ilgili Hangi komudu kullanacam nasıl yapacam bilmiyorum,Uzun zamandır izlemediğim videolar ve gezmediğim site kalmadı.
    Bu konuda ve saat veya Ethernet konusunda bana yol gösterirseniz sevinirim.

    arduino mega 2560 r3 kullanıyorum
    Ethernet Shield W5100 sd
  • Merhaba Mehmet, her butona tıkladığında Arduino'a bir tane karakter göndermeyi dene, Arduino tarafında da bu karakter oku ve sorgula, atıyorum. C#'ta 1.butona bastığında a gönder, . butona bastığında b gönder sonrada arduino da bunu sorgula.

    Char x;
    if(x==a)//Buton-1'e basıldı ise
    {

    }
    if(x==b)//Buton-2'e basıldı ise
    {

    }
    Daha önce blogumda şöyle bişey paylaşmıştım, ona bi bak istersen, seninde yapmak istediğin aynı şey sayılır.

    http://www.depositericrobotic.com/2014/10/arduino-uno-r3-c-arayuzu-ve-araba.html
  • teşekkür ederim cevabın için.
    Çalışmamı case ve if komuduylada yaptım
    int LED1 = 11;
    int LED2 = 12;
    void setup()
    {
    Serial.begin(9600);
    pinMode(LED1,OUTPUT);
    pinMode(LED2,OUTPUT);
    }
    void loop()
    {
    char data = Serial.read();
    switch (data) {
    case 'A' : digitalWrite(LED1,HIGH);
    Serial.print("LED1 ON:");break;
    case 'K' : digitalWrite(LED1,LOW);

    case 'ACIK' : digitalWrite(LED3,HIGH);
    Serial.print("LED3 ON:");break; /////seriden bu kısım gelince A'yıda algılayıp Led1'i yakıyor bunu ayırmam lazım nasıl olacak bilmiyorum.

    buda if'li
    if (c== 'A')
    {
    digitalWrite(12,HIGH);
    Serial.println("A ACILDI");
    }
    else if (c =='B')
    {
    digitalWrite(12,LOW);
    Serial.println("B KAPANDI:");
    }
  • arduino çıkışlarını sorgulama
    int i = 12;
    pinMode(i, OUTPUT);
    int c = Serial.read();

    if (c == 'r')
    {
    int iState = digitalRead(i);//
    Serial.println(iState);
    }
    Buda farklı çıkış kontrolü yapıp seri porta göderiyor isteyen arkadaşlar kullansın

    if (data == 'r') ////seriden gelen
    {
    Serial.print("a"); ///a harfi
    int LED1State = digitalRead(LED1);
    Serial.println(LED1State); //// ve LED1'in durumu (a0 veya a1)
    delay(100);
  • Ayirma isleminide soyle yapacan mehmet, c# ta butona basip a karakterini gonderfikten hemen sonra bir tane de #, &,%,$ gibi herhangi bir karakter gonder, arduino tarafinda string.ReadUntil komutunu kullan.
    Blogumda c#tan arduinoya veri gonderimi isimli bir yazi paylasmisyim, bu dedigimi burada kullandim onun kod yapisina bakabilirsin.
    Iyi calismalar
  • Cevap için geciktim kusura bakma.
    Teşekkürler şimdiden
    dediklerine bi bakayım...
  • Hamza hocam teşekkürler dediğin gibi sembollerle ve senin yazdığın kodlarla yaptım oluyor,yanlız biraz yavaş çalışıyor komudu gönderdikten 4-5sn sonra ledi yakıyor.sebeb ne olabilir.(sadece bilgi amaçlı).
    Birde zamanla ilgili örneğinide yaptım, buna tarihte ekliyebilirmiyiz ve
    c#'ta data time işlemi yapıyorum, ayarlanan tarih ve saat'te on/off komudu gönderdiğimde Arduino bu komudu alıp uygulayıp ve hafızasında tuttura bilirmiyim.
    Neden hafıza istiyorum arayüz proğramı kapansa ve elektrik kesintisi olsa bile Arduino istenilen işlemi gercekleştirmeye devam etsin .
    Bilgi paylaşımı için çok teşekkür ederim...
  • normalde gecikme olmaması lazım, daha önce çok kez yaptığım şey çünkü, muhtemelen gözünden bişey kaçırıyor olabilir, sorunu gideremezsen timer kullan, arduino tarafında void loop kısmında en sona atıyorum 100 ms'lik bir gecikme koy, c#'ta timer interval değerini 100 ms olarak ayarla artık gecikmeyi kaldırmış olursun. Tarih saatte tabiki eklenebilir ve saat dakika değerleri arduino'ya gönderilip eepromda saklanabilir.
  • http://engineeringvolkan.wordpress.com/2014/11/14/arduino-ile-ayarlanabilir-alarmli-saat-ve-takvim-uygulamasi/

    hocam ben de blogumda daha temel halini yapmıştım. kodlar orada var. gecikme olabiliyor ancak.
  • Arkadaşlar Arduino kapanıp açıldığında kaldığı yerden devam ettirme işlemini gerçekleştirdim ilgilenlere kodlar aşağıdaki gibidir.
    Seri porttan gelen değer ile çıkış aktifleşiyor ve eeproma yazıyor.
    cihazı kapatıp actığınızda eepromu birdefa okuyor ve ilgili yerlere yüklüyor.

    void setup()
    {
    pinMode (51,OUTPUT);
    Serial.begin (9600);
    digitalWrite(51,EEPROM.read(1));
    }
    void loop()
    {
    if(Serial.available())
    {
    char c = Serial.read();
    delay(1);

    if (c== 'A')
    {
    digitalWrite(51,HIGH); //
    EEPROM.write(1,HIGH); //


    }
    kapanması içinde Hıgh yrine Low
    A yerine B yazarsınız
  • Mehmet hocam bende serial monitorden epproma değer gönderip gönderdiğim değeri epproma yazdırıp o değere göre işlem yaptırmak istiyorum
    örneğin 300 gönderdim o değer epproma yazıldı ve arduino içerisinde 300 değerini okuyacak ve ilgili yere yazacak bunu nasıl yaparım acaba
  • EEPROM.write(1,200); önce eepromun 1.adresine 200 değeriniyzıyorsun
    EEPROM_Read(1, 200); sonrada 1.adresteki degeri yani 200'ü okuyorsun.

    Serial.pirint(EEPROM.read(1)); seri portan takip edebilirsin çalışıp çalışmadığını.
  • Mehmet hocam C# üzerinden 12 adet led yakıp söndüren ve yanıp yanmadığının bilgisini veren bir proğram bir proğram hazırladım. sıkıntı yok çalışıyor fakat led ler yanık durumda iken arayüz proğramını kapatıp açtığımda son durumu yani ledlerin yandığını arayüz proğramında göremiyorum. çözüm için şöyle bir fikrim var. led sayısını 6 ya düşürüp dijital pinlerin 6 adedini giriş 6 adetini çıkış yapacağım. Led lerin yandığı pinlerden giriş pinlerine bağlantı yapıp bu giriş pinlerini okuyup c# arayüzüne göndereceğim. form açıldığında görüp açık yada kapalı mesajını yazdıracağım. bu noktada benim sorunum ardunio nun giriş olarak tanımladığım pinlerini okuyup c# arayüzüne nasıl göndereceğim. Uğraşıyorum fakat beceremedim. Sizden ricam 1 led ve bir giriş pin i için hem ardunioda hemde c# ta kodları yazabilirmisiniz. benim yazdığım kodları aşağıda gönderiyorum.


    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;
    using System.IO.Ports;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {

    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {


    }

    private void Form1_Load(object sender, EventArgs e)
    {
    ayarlar.Default.tema = System.Drawing.Color.LawnGreen;



    serialPort1.PortName = "COM3";
    serialPort1.Open();
    string[] Portlar = SerialPort.GetPortNames();
    foreach (string port in Portlar)



    {


    }

    }





    private void button14_Click(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
    label2.BackColor = Color.LawnGreen;


    serialPort1.Write("3");
    label2.Text = " AÇIK ";
    }

    private void button15_Click(object sender, EventArgs e)
    {
    label2.BackColor = Color.Red;
    serialPort1.Write("4");
    label2.Text = " KAPALI ";
    }

    private void button3_Click(object sender, EventArgs e)
    {
    label3.BackColor = Color.LawnGreen;
    serialPort1.Write("5");
    label3.Text = " AÇIK ";
    }

    private void button16_Click(object sender, EventArgs e)
    {
    label3.BackColor = Color.Red;
    serialPort1.Write("6");
    label3.Text = " KAPALI ";
    }

    private void button4_Click(object sender, EventArgs e)
    {
    label4.BackColor = Color.LawnGreen;
    serialPort1.Write("7");
    label4.Text = " AÇIK ";
    }

    private void button5_Click(object sender, EventArgs e)
    {
    label5.BackColor = Color.LawnGreen;
    serialPort1.Write("9");
    label5.Text = " AÇIK ";
    }

    private void button6_Click(object sender, EventArgs e)
    {
    label6.BackColor = Color.LawnGreen;
    serialPort1.Write("b");
    label6.Text = " AÇIK ";
    }

    private void button7_Click(object sender, EventArgs e)
    {
    label7.BackColor = Color.LawnGreen;
    serialPort1.Write("d");
    label7.Text = " AÇIK ";
    }

    private void button8_Click(object sender, EventArgs e)
    {
    label8.BackColor = Color.LawnGreen;
    serialPort1.Write("f");
    label8.Text = " AÇIK ";
    }

    private void button9_Click(object sender, EventArgs e)
    {
    label9.BackColor = Color.LawnGreen;
    serialPort1.Write("h");
    label9.Text = " AÇIK ";
    }

    private void button10_Click(object sender, EventArgs e)
    {
    label10.BackColor = Color.LawnGreen;
    serialPort1.Write("j");
    label10.Text = " AÇIK ";
    }

    private void button11_Click(object sender, EventArgs e)
    {
    label11.BackColor = Color.LawnGreen;
    serialPort1.Write("l");
    label11.Text = " AÇIK ";
    }

    private void button12_Click(object sender, EventArgs e)
    {
    label12.BackColor = Color.LawnGreen;
    serialPort1.Write("n");
    label12.Text = " AÇIK ";
    }

    private void button13_Click(object sender, EventArgs e)
    {
    label13.BackColor = Color.LawnGreen;
    serialPort1.Write("p");
    label13.Text = " AÇIK ";
    }

    private void button17_Click(object sender, EventArgs e)
    {
    label4.BackColor = Color.Red;
    serialPort1.Write("8");
    label4.Text = " KAPALI ";
    }

    private void button18_Click(object sender, EventArgs e)
    {
    label5.BackColor = Color.Red;
    serialPort1.Write("a");
    label5.Text = " KAPALI ";
    }

    private void button19_Click(object sender, EventArgs e)
    {
    label6.BackColor = Color.Red;
    serialPort1.Write("c");
    label6.Text = " KAPALI ";
    }

    private void button20_Click(object sender, EventArgs e)
    {
    label7.BackColor = Color.Red;
    serialPort1.Write("e");
    label7.Text = " KAPALI ";
    }

    private void button21_Click(object sender, EventArgs e)
    {
    label8.BackColor = Color.Red;
    serialPort1.Write("g");
    label8.Text = " KAPALI ";
    }

    private void button22_Click(object sender, EventArgs e)
    {
    label9.BackColor = Color.Red;
    serialPort1.Write("i");
    label9.Text = " KAPALI ";
    }

    private void button23_Click(object sender, EventArgs e)
    {
    label10.BackColor = Color.Red;
    serialPort1.Write("k");
    label10.Text = " KAPALI ";
    }

    private void button24_Click(object sender, EventArgs e)
    {
    label11.BackColor = Color.Red;
    serialPort1.Write("m");
    label11.Text = " KAPALI ";
    }

    private void button25_Click(object sender, EventArgs e)
    {
    label12.BackColor = Color.Red;
    serialPort1.Write("o");
    label12.Text = " KAPALI ";
    }

    private void button26_Click(object sender, EventArgs e)
    {
    label13.BackColor = Color.Red;
    serialPort1.Write("q");
    label13.Text = " KAPALI ";
    }



    }
    }




  • YUKARIDAKİ SORUNA AİT ARDUNİO KODLARI



    int led1=1;
    int led2=2;
    int led3=3;
    int led4=4;
    int led5=5;
    int led6=6;
    int led7=7;
    int led8=8;
    int led9=9;
    int led10=10;
    int led11=11;
    int led12=12;
    int led13=13;



    void setup() {
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
    pinMode(led5,OUTPUT);
    pinMode(led6,OUTPUT);
    pinMode(led7,OUTPUT);
    pinMode(led8,OUTPUT);
    pinMode(led9,OUTPUT);
    pinMode(led10,OUTPUT);
    pinMode(led11,OUTPUT);
    pinMode(led12,OUTPUT);
    pinMode(led13,OUTPUT);





    Serial.begin(9600);

    }
    char msj;
    void loop() {

    msj=Serial.read();

    if(msj=='1'){
    digitalWrite(led1,HIGH);
    }
    if(msj=='2'){
    digitalWrite(led1,LOW);
    }
    if(msj=='3'){
    digitalWrite(led2,HIGH);
    }
    if(msj=='4'){
    digitalWrite(led2,LOW);
    }
    if(msj=='5'){
    digitalWrite(led3,HIGH);
    }
    if(msj=='6'){
    digitalWrite(led3,LOW);
    }
    if(msj=='7'){
    digitalWrite(led4,HIGH);
    }
    if(msj=='8'){
    digitalWrite(led4,LOW);
    }
    if(msj=='9'){
    digitalWrite(led5,HIGH);
    }
    if(msj=='a'){
    digitalWrite(led5,LOW);
    }
    if(msj=='b'){
    digitalWrite(led6,HIGH);
    }
    if(msj=='c'){
    digitalWrite(led6,LOW);
    }
    if(msj=='d'){
    digitalWrite(led7,HIGH);
    }
    if(msj=='e'){
    digitalWrite(led7,LOW);
    }
    if(msj=='f'){
    digitalWrite(led8,HIGH);
    }
    if(msj=='g'){
    digitalWrite(led8,LOW);
    }
    if(msj=='h'){
    digitalWrite(led9,HIGH);
    }
    if(msj=='i'){
    digitalWrite(led9,LOW);
    }
    if(msj=='j'){
    digitalWrite(led10,HIGH);
    }
    if(msj=='k'){
    digitalWrite(led10,LOW);
    }
    if(msj=='l'){
    digitalWrite(led11,HIGH);
    }
    if(msj=='m'){
    digitalWrite(led11,LOW);
    }
    if(msj=='n'){
    digitalWrite(led12,HIGH);
    }
    if(msj=='o'){
    digitalWrite(led12,LOW);
    }
    if(msj=='p'){
    digitalWrite(led13,HIGH);
    }
    if(msj=='q'){
    digitalWrite(led13,LOW);
    }

    }
  • arduıno her komut aldıgında eeproma kaydet arduıno her açıldıgında bu epromdan son durumları guncellersen her zaman hazır olursun.
  • teşekkür ederim.
  • Sedat kardeş aylardır forma giriş yapmıyorum işlerden dolayı.
    mesajına gecde olsa cevap veremek istedim.
    okoman beyin dediği olur, Sana farklı fikirlerde vereyim belki işine yarar yada sorunu çoktan çözmüştürsün.
    1-Arduino ilk çalıştığında setup kısmına digitalRead(inPin1);digitalRead(inPin2); okutup
    C#'a gönderirisin.
    2-Eğer çalışır durumda kontrol etmek istersen C# bir button koyarsın a harfini gönder dersin, Arduino'ya eger gelen "a" ise digitalRead(inPin1); ve Serial.print"1"gönder dersin.
    Umarım işine yarar

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.