Şimdi Ara

Arduino python haberleşme

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
13
Cevap
0
Favori
928
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Elimde klon arduino uno var.Python ile porta yazı yazıyorum ama okuyamıyorum .Sorun ne olabilir acaba?

    >>> import serial
    >>> port = serial.Serial("COM4")
    >>> port.name
    'COM4'
    >>> port.isOpen()
    True
    >>> port.write(b"arduino")
    7
    >>> port.read()






    port.read() yazdıktan sonra bir şey görmediğinden dolayı dönmüyor sanırım.



  • Yazdığın şeyin arduinoya doğru şekilde ulaştığına emin misin? Arduino tarafında bunu test etmelisin. Baud rate ayarı da göremedim. İki tarafta da baud rate eşit olmalı.
  • EmuDev E kullanıcısına yanıt
    Hocam sanırım ulaşmıyor ayrıca baud rate ayarın yapıp denedim gene aynı



    < Bu mesaj bu kişi tarafından değiştirildi was deferans -- 25 Ocak 2020; 22:4:28 >
    < Bu ileti DH mobil uygulamasından atıldı >
  • PYTHON
    import tkinter
    import time
    import serial



    data = serial.Serial("COM4", 9600)

    class RENK:
    def __init__(self, isim):
    self.isim = isim
    def arka_plan(self):
    if(self.isim =="kırmızı"):
    pencere["background"]="red"
    yazi["bg"]="red"
    if (not data.isOpen()):
    data.open()
    data.write('1'.encode())

    if(self.isim =="yesil"):
    pencere["background"]="green"
    yazi["bg"]="green"
    if (not data.isOpen()):
    data.open()
    data.write('3'.encode())

    if(self.isim =="sari"):
    pencere["background"]="yellow"
    yazi["bg"]="yellow"
    if (not data.isOpen()):
    data.open()
    data.write('5'.encode())




    kirmizi = RENK("kırmızı")
    yesil = RENK("yesil")
    sari = RENK("sari")

    pencere= tkinter.Tk()
    pencere.geometry('700x700')
    pencere.title("ARDUİNO")
    pencere.configure(background ="white")




    yazi=tkinter.Label(text="ARDUİNO LED PROGRAMI", bg="white",fg="black",font=("Open Sans","30","normal"))
    yazi.pack()



    kirmizi_buton = tkinter.Button(text ="KIRMIZI",bg ="red",command = kirmizi.arka_plan,font=("Open Sans","15","normal"))
    kirmizi_buton.pack(side="left")

    yesil_buton = tkinter.Button(text ="YEŞİL ",bg ="green",command = yesil.arka_plan,font=("Open Sans","15","normal"))
    yesil_buton.pack(side ="right")

    sari_buton =tkinter.Button(text ="SARI",bg ="yellow",command = sari.arka_plan,font=("Open Sans","15","normal"))
    sari_buton.pack(side ="bottom")

    foto = tkinter.PhotoImage(file="RUN1.png")
    foto1= tkinter.Button(pencere,image=foto,command=pencere.destroy)
    foto1.pack()


    pencere.mainloop()


    ARDUİNO
    int durum;
    int kirmizi_led =8;
    int yesil_led = 10;
    int sari_led = 6;



    void setup() {

    pinMode(kirmizi_led , OUTPUT);
    pinMode(yesil_led , OUTPUT);
    pinMode(sari_led , OUTPUT);
    Serial.begin(9600);

    }

    void loop() {
    if(Serial.available() > 0){
    durum =Serial.read();
    delay(1);
    Serial.print(durum);

    if(durum == "1"){
    digitalWrite(kirmizi_led , HIGH);
    delay(150);
    }
    else if(durum == "2"){
    digitalWrite(kirmizi_led , LOW);
    }
    else if(durum == "3"){
    digitalWrite(yesil_led , HIGH);
    delay(150);
    }
    else if(durum == "4"){
    digitalWrite(yesil_led , LOW);
    }
    else if(durum == "5"){
    digitalWrite(sari_led , HIGH);
    delay(150);
    }
    else if(durum == "6"){
    digitalWrite(sari_led , LOW);
    }
    }
    else {
    digitalWrite(kirmizi_led , HIGH);
    }
    }


    Arduino python haberleşme

    Aslında yapmak istediğim fotoraftaki pencereyi kullanarak düğmelere basıldığında breadbord üzerindeki ledlerin yanması şu anda sadece kırmızı led yanıyor oda gösteriyorki porta hiçbir şey yazılmıyor(yanılıyor olabilirim).Kartta sorun olabilirmi yada nerede yanlış yapıyorum?



    < Bu mesaj bu kişi tarafından değiştirildi was deferans -- 25 Ocak 2020; 23:0:21 >




  • Öncelikle denemeleri sadece konsol penceresi üzerinde yap (şu siyah ekranda). String yerine byte ile alışveriş yapmayı dene. Stringler tamsayı verilerden çok daha karmaşıktır. Mesela arduino tarafında 2 led varsa 0 ve 1 göndererek ikisinden birini yakabilirsin.

    Arduino tarafındaki if(durum == "1") hatalı bir kod. durum değişkeninin türü int, "1" ise char*. Bu iki ayrı tür karşılaştırılamaz. durum değişkeni char* türünde olsa yine olmaz.

    Halbuki python tarafında byte gönderseydin arduinoda şu şekilde basitçe yapılabilirdi.

    byte durum;
    ...
    if(durum == 1)
  • EmuDev E kullanıcısına yanıt
    Sağol hocam program çalışmıyor ama artık haberleşme yapabiliyor programı düzeltince hatamı editlerim...
  • PYTHON
    import tkinter
    import time
    import serial



    data = serial.Serial("COM4", 9600)

    class RENK:
    def __init__(self, isim):
    self.isim = isim
    def arka_plan(self):
    if(self.isim =="kırmızı"):
    pencere["background"]="red"
    yazi["bg"]="red"
    if (not data.isOpen()):
    data.open()
    data.write(b'1')
    data.write(b'4')
    data.write(b'6')

    if(self.isim =="yesil"):
    pencere["background"]="green"
    yazi["bg"]="green"
    if (not data.isOpen()):
    data.open()
    data.write(b'3')
    data.write(b'2')
    data.write(b'6')

    if(self.isim =="sari"):
    pencere["background"]="yellow"
    yazi["bg"]="yellow"
    if (not data.isOpen()):
    data.open()
    data.write(b'5')
    data.write(b'2')
    data.write(b'4')




    kirmizi = RENK("kırmızı")
    yesil = RENK("yesil")
    sari = RENK("sari")

    pencere= tkinter.Tk()
    pencere.geometry('700x700')
    pencere.title("ARDUİNO")
    pencere.configure(background ="white")




    yazi=tkinter.Label(text="ARDUİNO LED PROGRAMI", bg="white",fg="black",font=("Open Sans","30","normal"))
    yazi.pack()



    kirmizi_buton = tkinter.Button(text ="KIRMIZI",bg ="red",command = kirmizi.arka_plan,font=("Open Sans","15","normal"))
    kirmizi_buton.pack(side="left")

    yesil_buton = tkinter.Button(text ="YEŞİL ",bg ="green",command = yesil.arka_plan,font=("Open Sans","15","normal"))
    yesil_buton.pack(side ="right")

    sari_buton =tkinter.Button(text ="SARI",bg ="yellow",command = sari.arka_plan,font=("Open Sans","15","normal"))
    sari_buton.pack(side ="bottom")

    foto = tkinter.PhotoImage(file="RUN1.png")
    foto1= tkinter.Button(pencere,image=foto,command=pencere.destroy)
    foto1.pack()


    pencere.mainloop()


    ARDUİNO
    char durum;
    int kirmizi_led =8;
    int yesil_led = 10;
    int sari_led = 6;



    void setup() {

    pinMode(kirmizi_led , OUTPUT);
    pinMode(yesil_led , OUTPUT);
    pinMode(sari_led , OUTPUT);
    Serial.begin(9600);

    }

    void loop() {
    if(Serial.available() > 0){
    durum =Serial.read();
    delay(1);
    Serial.print(durum);

    if(durum == '1'){
    digitalWrite(kirmizi_led , HIGH);
    delay(150);
    }
    else if(durum == '2'){
    digitalWrite(kirmizi_led , LOW);
    }
    else if(durum == '3'){
    digitalWrite(yesil_led , HIGH);
    delay(150);
    }
    else if(durum == '4'){
    digitalWrite(yesil_led , LOW);
    }
    else if(durum == '5'){
    digitalWrite(sari_led , HIGH);
    delay(150);
    }
    else if(durum == '6'){
    digitalWrite(sari_led , LOW);
    }
    }

    }


    Programın son hali bu artık çalışıyor arduino python haberleşmesiyle program yapmak isteyenlere örnek olması açısından paylaşıyorum.Yardımlarınız için teşekkür ederim.




  • Tebrikler. Ben de biraz modifiye edilmişini bırakayım. Tek byte ile birden fazla bilgiyi nasıl iletebiliriz onun cevabı olsun.


    import tkinter
    import time
    import serial

    data = serial.Serial("COM4", 9600)
    data.open()

    class RENK:
    def __init__(self, isim):
    self.isim = isim
    def arka_plan(self):
    if(self.isim =="kırmızı"):
    pencere["background"]="red"
    yazi["bg"]="red"
    data.write(b'\x01')

    if(self.isim =="yesil"):
    pencere["background"]="green"
    yazi["bg"]="green"
    data.write(b'\x02')

    if(self.isim =="sari"):
    pencere["background"]="yellow"
    yazi["bg"]="yellow"
    data.write(b'\x04')

    kirmizi = RENK("kırmızı")
    yesil = RENK("yesil")
    sari = RENK("sari")

    pencere= tkinter.Tk()
    pencere.geometry('700x700')
    pencere.title("ARDUİNO")
    pencere.configure(background ="white")


    yazi=tkinter.Label(text="ARDUİNO LED PROGRAMI", bg="white",fg="black",font=("Open Sans","30","normal"))
    yazi.pack()



    kirmizi_buton = tkinter.Button(text ="KIRMIZI",bg ="red",command = kirmizi.arka_plan,font=("Open Sans","15","normal"))
    kirmizi_buton.pack(side="left")

    yesil_buton = tkinter.Button(text ="YEŞİL ",bg ="green",command = yesil.arka_plan,font=("Open Sans","15","normal"))
    yesil_buton.pack(side ="right")

    sari_buton =tkinter.Button(text ="SARI",bg ="yellow",command = sari.arka_plan,font=("Open Sans","15","normal"))
    sari_buton.pack(side ="bottom")

    foto = tkinter.PhotoImage(file="RUN1.png")
    foto1= tkinter.Button(pencere,image=foto,command=pencere.destroy)
    foto1.pack()


    pencere.mainloop()
    data.close()



    const int kirmizi_led = 8;
    const int yesil_led = 10;
    const int sari_led = 6;
    byte durum;


    void setup()
    {
    pinMode(kirmizi_led , OUTPUT);
    pinMode(yesil_led , OUTPUT);
    pinMode(sari_led , OUTPUT);
    Serial.begin(9600);
    }

    void loop()
    {
    while(Serial.available() == 0);
    durum = Serial.read();

    digitalWrite(kirmizi_led , durum & 0x1);
    digitalWrite(yesil_led , durum & 0x2);
    digitalWrite(sari_led , durum & 0x4);
    }




  • string değerleri karşılaştırmak için strcmp fonksiyonunu kullan.
  • arduino bordu uno r3 mu nasıl ledler baglı? bende denemek isterim.
  • oshinankara kullanıcısına yanıt
    Arduino uno r3 ile yaptım ben ledlerin nasıl bağlı olduğunu alttaki fotoğrafta gösterdim...
    Arduino python haberleşme
  • Tesekkurler.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.