23-11-2020, Saat: 21:55
(23-11-2020, Saat: 08:53)pro_imaj Adlı Kullanıcıdan Alıntı:(22-11-2020, Saat: 15:19)Yasemin Adlı Kullanıcıdan Alıntı: Merhaba
Okulların tekrar kapanmasıyla Delphi ve Arduino üzerinde daha çok çalışmaya başladım. Aklımda şöyle bir IoT projesi tasarladım.
[img][/img]
1. Aşama
Tek bir Arduino'dan adc değerini Ethernet üzerinden Delphi'ye gönderip değerleri gösterip duruma göre Arduino geri komut göndermek.
Bu aşamayı başarılı bir şekilde geçtim. Case durumuna göre tek bir Arduino'ya geri komut gönderip Arduino'da işlem yapabiliyorum.
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var gelen:string; begin gelen:=AContext.Connection.IOHandler.ReadLn(); //gelen veriyi satı sonuna kadar oku Memo1.Lines.Add( DateTimeToStr( Now ) +' '+ gelen); ProgressBar1.Position:= StrToInt( gelen ); Label1.Caption:=gelen; case StrToInt(gelen) of 0..500:AContext.Connection.IOHandler.WriteLn('led_yak'); 501..1023:AContext.Connection.IOHandler.WriteLn('led_sondur'); end; end;
[img][/img]
2. Aşama
İki adet Arduino'dan adc değerini okuyup Delphi'ye göndermek ve ayrı ayrı göstermek. Bu aşamayı da tamamladım.
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var gelen: string; Parcala: TArray<String>; Arduino_nu:Integer; adc_deger:string; begin gelen:=AContext.Connection.IOHandler.ReadLn(); //gelen veriyi satı sonuna kadar oku Parcala := gelen.Split(['-']); Arduino_nu:= StrToInt(parcala[0]); adc_deger:= Parcala[1]; case Arduino_nu of 1:begin Memo1.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger ); ProgressBar1.Position:= StrToInt( adc_deger); Label3.Caption:=adc_deger; end; 2:begin Memo2.Lines.Add( DateTimeToStr(Now) +' '+ adc_deger ); ProgressBar2.Position:= StrToInt( adc_deger); Label4.Caption:=adc_deger; end; end; end;
![]()
3. Aşama Çözemediğim ve sormak istediğim kısım
1. Aşamada tek Arduino'ya komut gönderdiğim gibi burada da iki Arduino'dan istediğim Arduino'ya (client) komut göndermek istiyorum. Bunun için bir sonraki sayfada sorulan sorudaki aynı kodları kullanarak bir client listesi oluşturdum.
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext); var LHost: string; LItem: TListItem; List: TIdContextList; begin ListView1.Items.BeginUpdate; LItem:= ListView1.Items.Add; LItem.Caption := AContext.Connection.Socket.Binding.PeerPort.ToString; LItem.SubItems.Add(AContext.Connection.Socket.Binding.PeerIP); LItem.Data:= AContext; ListView1.Items.EndUpdate; ListBox1.Items.Add(AContext.Connection.Socket.Binding.PeerIP +' '+ AContext.Connection.Socket.Binding.PeerPort.ToString) ; end;
Sonuçta şöyle bir ekranım oldu:
Çözemediğim ve sormak istediğim kısım ise
-iki Arduino'dan istediğime Nasıl komut gönderirim?
-OnExecute dışında buton click altında istediğim Arduino'ya komut gönderebilir miyim?
Değerli tavsiyelerinizi okumayı çok isterim.
@Yasemin Soru örnek niteliğinde güzel bir sonuca ulaşmış.
Burada merak ettiğim Arduino tarafında nasıl bir kod çalışıyor, bu konuda bilgi verebilir misiniz.
Projeler;
1-Arduino tarafında çalışan kodlar. (Bu kısmında Delphi kodlama dışınca C kodları ile işlem yapıyor diye biliyorum.)
2-Delphi tarafında veri çalışan kodlar.
Teşekkürler.
Merhaba
Gün içinde online derslerim vardı anca fırsat bulabildim.
Arduino'yla Ethernet üzerinde iletişimi Arduino Ethermet Client örneği ile çalıştırdım. Tüm Arduino kodu bu örnek üzerine yazdım, koda ek olarak adc okuması ekledim.
İyi çalışmalar
KOTO Teknik 10. sınıf öğrencisiyim.
Nextion HMI, Arduino ve Delphi FMX ile ilgileniyorsanız Yotube Kanalım size katkı sağlayabilir.
Nextion HMI, Arduino ve Delphi FMX ile ilgileniyorsanız Yotube Kanalım size katkı sağlayabilir.