Bu konudaki kullanıcılar: 2 misafir, 1 mobil kullanıcı
11
Cevap
0
Tıklama
0
Öne Çıkarma
Arduino python haberleşme

W
was deferans Konu Sahibi
2 ay (16 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.




E
EmuDev
2 ay (80 mesaj)
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ı.


Bu mesaja 1 cevap geldi.

W
was deferans Konu Sahibi
2 ay (16 mesaj)
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 mesajda bahsedilenler: @EmuDev

W
was deferans Konu Sahibi
2 ay (16 mesaj)
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);
}
}


< Resime gitmek için tıklayın >

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 >


E
EmuDev
2 ay (80 mesaj)
Ö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)


Bu mesaja 1 cevap geldi.

W
was deferans Konu Sahibi
2 ay (16 mesaj)
Sağol hocam program çalışmıyor ama artık haberleşme yapabiliyor programı düzeltince hatamı editlerim...




Bu mesajda bahsedilenler: @EmuDev

W
was deferans Konu Sahibi
2 ay (16 mesaj)
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.




E
EmuDev
2 ay (80 mesaj)
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);
}




B
bersgurs
2 ay (1438 mesaj)
string değerleri karşılaştırmak için strcmp fonksiyonunu kullan.




O
oshinankara
2 ay (587 mesaj)
arduino bordu uno r3 mu nasıl ledler baglı? bende denemek isterim.


Bu mesaja 1 cevap geldi.

W
was deferans Konu Sahibi
2 ay (16 mesaj)
Arduino uno r3 ile yaptım ben ledlerin nasıl bağlı olduğunu alttaki fotoğrafta gösterdim...
< Resime gitmek için tıklayın >




Bu mesajda bahsedilenler: @oshinankara

O
oshinankara
2 ay (587 mesaj)
Tesekkurler.



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.