Arduino Seri Haberleşme: Serial Port Ve Fonksiyonları
Arduino Turkiye // 29 Ağustos 2017 // 68 yorum // kategori: Arduino ProgramlamaTüm Arduio kartlarında en az bir adet Arduino kartı ile bilgisayar veya diğer cihazlar arasında bağlantı kuran Serial Port bulunuyor. Arduino UNO’dan bir tane Serial Port bulunurken Arduino MEGA ve Arduino DUE’de daha fazla port yer alıyor. Bu konuyla ilgili başka yazılarımıza buradan ve buradan ulaşabilirsiniz.
Arduino UNO, 0’dan 13’e kadar olmak üzere toplam 14 tane dijital pine sahiptir. Bu kartta da diğer kartlarda da görebileceğimiz gibi dijital 0 (RX) ve dijital 1 (TX) pinleri Serial Port için ayrılmıştır. Arduino kartımız üzerindeki Serial Port için ayrılmış pinleri tek seferde yalnızca Serial Port için kullanabiliriz. Bu sırada bu pinler başka giriş veya çıkış işlemlerini gerçekleştiremez. Arduino’nunuzun bilgisayarla haberleşmesini sağlamak için 0 ve 1 numaralı pinlerin başla bir yere bağlı olmadığından emin olmanız gerekir.
Her şeyden önce bilgisayarınız ve kartınız arasındaki bağlantıyı sağlamanız gerekir. Daha sonra Serial Port Ekranına ulaşabilir ve bu ekranı kullanarak kartınız ile haberleşme ekranına ulaşabilirsiniz. Serial Port Ekranı için Türkçede Seri Port Ekranı ya da Serial Monitor ifadeleri de kullanılıyor. Bu ifadelerden herhangi biriyle karşılaştığınızda hepsinin aynı anlama geldiğini hatırlamanızda fayda var.
Haberleşme ekranına tanımlanmış fonksiyonlar
Arduino programlama dilinde seri haberleşme portunu kullanımı için tanımlanmış bir Serial nesnesi bulunmaktadır. Serial nesnesi işimizi kolaylaştırıcı bir çok fonksiyona sahiptir. Bunları şöyle sıralayabiliriz.
- available ()
- availableForWrite ()
- begin ()
- end ()
- find ()
- findUntil ()
- flush ()
- if ( Serial )
- parseFloat ()
- parseInt ()
- peek ()
- print ()
- println ()
- read ()
- readBytes ()
- readBytesUntil ()
- readString ()
- readStringUntil ()
- serialEvent ()
- setTimeOut ()
- write ()
Bu fonksiyonların her biri farklı bir görev için tanımlanmıştır ve Arduino kartınızla işlem yapmanızı sağlarlar.
Seri haberleşmeyi kurmak için ilk kullanmamız gereken fonksiyon şudur:
Serial.begin()
Bu komut ile Seri ara birimi kullanmak için hazır hale getirmiş oluruz. Kullanım şekli Serial.begin(baud rate); şeklindedir. Burada gördüğünüz Baud Rate, haberleşme hızını belirtir ve birimi bps yani saniye başına bit’dir. Baud Rate; 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, yada 115200 değerlerini alabilir. Standart olarak basit bir iletişim kurup haberleşme yapmak için 9600 bps kullanılır.
Bundan sonraki adımlarda; serial.print(), serial.write(), serial.read(), serial.available() gibi komutlarla yolunuza devam etmeniz gerekir. Bu komutların temelde nasıl çalıştığını, parantez içlerine yazılan bilgilerin ya da diğer fonksiyonlarla birlikte verilen komutların nasıl bir anlama geldiğini kavradığınızda birkaç temel bilgiyle pek çok komutu çalıştırabilir hale gelirsiniz.
Kısaca bakacak olursak:
Serial.begin(baud_rate): Serial haberleşmenin başlatılması için “setup” kısmına yazılır.
Serial.print() / Serial.println(): Serial ASCII yazılarının göndermemizi sağlar. String ve Char değişkenlerini gönderir.
Serial.Write(): Serial üzerinden byte verileri gönderir.
Serial.read(): Serialden gelen verileri okumak için kullanılır.
Serial.available(): Serial bağlantının kullanılabilir olup olmadığını kontrol eder. “if” gibi foksiyonlarla kullanılır.
Etiketler: arduino seri haberleşme
Merhaba yangın paneli rs232 yazıcı çıkışından gelen alarm satırlarından istediğim yazıyı kullanarak P10 Led Ekran üzerine yazdırmak istiyorum.Bunun ile ilgili yardımcı olurmusunuz.
p10 panelle ılgılı calışma yapmış olanlar var foruma gelin sorun yardım alabılırsınız.
hocam merhabalar. ben parmak izi okuma sensörünü arduino uno yardımıyla kodladım. seri port ekranını açınca “parmak izi okuma sensörü bulundu”,”geçerli parmağı girin” vs. bilgiler çıkıyor şimdi bu yazanları I2C lcd ekrana nasıl gönderebilirim yani bu bilgilerin orada görünmesinin nasıl sağlayabilirim ?
i2c ekran aldıysan once ekranın orneklerını çalıştır cunku ekran adresının bulunması ayarlanması gerekır ılk seferde çalışmazsa. gerıye serıalden verıyı yollayacagına lcd ekrana yollayacaksın.
hocam lcd ekranın adresini buldum 0x27. şimdi örneğin Serial.print(“parmak izi kaydedildi”) yazan yazıda Serial.print kısmını silip lcd.print mi yazmam gerekiyor?
evet olabılır ama once koordınat da gır kı yazdıgın yere hakım ol… lcd orneklerını ıncele
Hocam mrb’lar iyi günler, bir projem var iki arduino kartından oluşan vericiden diğer arduino kartı olan alıcıya lazer ile LDR arasında bir bağlantı kurup bir resim aktarımı yapmak istiyorum fakat eksiklerim var hem devre kurulumu hemde yazılım olarak, yardımcı olabilirseniz çok memnun olur her aklıma geldiğinizde dua ederim.:)
foruma da gelin sorun. allah kabul etsin 3 kuluvalla bi elam okudum karnım doydu.
Hocam iyi günler önemli bir projem var da yardıma ihtiyacım var bir iletişim bilgisi alabilirmyim eğer mümkünse
özel proje desteğimiz yok sitenin forumlarını kullanıp açık yardım isteyebilirsiniz, konuyu çalışmış tecrubesi olan varsa yardım edebilir.
Bir sorum var önemli analog girişten giren
0 dan 3 volta ulaştığı zamanı olcebilrmi 0 100 arası sayıya dönüştürmek istiyoruz bu zamani
millis fonksiyonu geçen zamanı size bildirir.
mantıgını yazayım programı siz yazın
baslangiczaman=millis()
adc okuma:
adc yi oku
3v olmadıysa adc okuma ya dön
3v oldu ise
bitiszamani=millis()
ekrana yaz, bitiszamani-baslangizzamani
Şimdi doğru yeri buldum galiba.
Merhabalar
Arduino Uno ile PIC haberleşmesi yapmak istiyorum.Daha önce ki haberleşme iki pic arasındaydı burda kullandığım kodlar PBP da yazdığım kodlardı.
Verici trafı
hserout[“DCM”,dec2 calis,dec2 dur,Tuz.byte1,Tuz.byte0,dec2 Ybas,Abas.byte1,Abas.byte0,ONDA.byte1,ONDA.byte0,dec1 Yaz,13,10]
Alıcıda:
hserin[“DCM”,dec2 calis,dec2 dur,Tuz.byte1,Tuz.byte0,dec2 Ybas,Abas.byte1,Abas.byte0,ONDA.byte1,ONDA.byte0,dec1 Yaz,13,10]
Arduinoda hangi kodla göndereceğimi bulamadım yardımcı olursanız sevinirim.
arduinoda hserin hserout komutlarına benzer bir fonksiyonu sizin yazmanız lazım.
seriporttan veri yollama komutu Serial.write kullanılıyor.
şuradan inceleyebillirsiniz https://www.arduino.cc/en/Serial/Write
okuma için Serial.read kullanılıyor ama Serial.available()>0 olduğunda okumanız lazım.
her okunan karakteri bir stringte biriktirip sonnlandırma karakteri ne seçtiyseniz o geldiğinde toptan değerlendirirsiniz.
https://www.arduino.cc/en/Serial/Read
Göndereceğim dataları sitring1,,2,,,8 olarak tanımladım .Sitring1+sitring2+…vs olarak string8 e attim.serial.print(string8) le gönderiyorum ama karşı taraftan dogru bilgi alamıyorum
kablo ile mi bağlı cihazlar birbirine rx tx capraz olacak biliyorsun ve aynı hızda olacak seriportlar. en basitinden başlatın yarım sanıye arayla bir “A” karakteri yollayın karşı taraftan basitçe okumaya çalışın. arduıno çalışırken bilgisayara usb baglı olmasın dısarıdan besleyın usb ıle serial1 bırbırıne paralel baglı oldugu ıcın sorun yaşayabılırsınız.
Kablo ile bağlı heri ki tarafta da SN75176 var RS485 olarak kullanıyorum ilk komutu alıyor çalış komutu ikinci ekran açılıyor ekrana diğer dataları yanlış yazıyor hp değeri normalde 55 olması gerkirken 90 Tuz değeri 810 olması gerkirken 3545 gibi ilgisiz sayılar çıkıyor.Beslemeyi dişardan 12V veriyorum usb kablosu takılı değil.
kullandıgınız kutuphanenın ornek kodları vardır once onları yapmaya calısın basitinden baslayın demek ıstıyorum boyle yenı ortamlarda direk gercek koda yazmaya baslamak ıcın erken. hatta rs485 bıle baglamadan once ıkı farklı işlemciyi rx tx ler birbirine ters olarak baglayarak arada ıletişim varmı ona bakın. arduıno tarafında devamlı basit tx yazan bir mod yazın diğerineden bunu okumaya calısın.
Selam Ömer bey.
Yazılarınızı bir çoğunu keyifle okudum, fakat C++ literatürünün dışında ifadelerinizi fak ettim. Düzeltme gereği duydum kusura bakmayın.
“if() gibi fonksiyonlarla kullaniniz” ifadeniz yalnış. Yazılım dillerinde “if()” kontrol yapısıdır if, if-else ve switch olarak kontrol yapısı vardır. Dilin yapısı olan bu kontrol yapısı yeniden yazılamaz ve tanımlanamaz. Halbuki fonksiyonlar yeniden yazılır ve tanımlanır.
Saygilarla
teşekkürler. sorunlu yazıları belirtirseniz üstüne açıklama yazarız. yazıların çoğu 5 yıldan eski hepsini hatırlamıyorum.
Merhaba iyi günler bir sorum olucaktı seri haberleşme yapıyorum projemde ve bir sorun yaşıyorum bu sorun seri port ekranında diyelim 12 yazdık bunu 1 ayrı 2 ayrı okuyor benim istedigim 12 yazdım mı 12 okusun direk bu sorunun nasıl çözebilirim.
ilk geleni 10 la çarp ikinci geleni buna ekle.
Merhaba, yazınız çok faydalı oldu teşekkürler şunu sormak istiyorum ; Projemde MQ-4 gaz sensörü kullandım serial port ekranını açtığımda aldığım değerler ne cinsinden geliyor onu tam anlayamadım 100-850 aralığında değerler elde ediyorum bu gazın ppm cinsinden değerini mi veriyor acaba? eğer değilse nasıl ppm değerine dönüştürebilirim?
Teşekkürler
mq4 sensorunun çıkışı analogdur programınızda yada kutuphanesınde analog voltajdan ppm dönüşümü varsa sorun yoktur.
şuradaki kutuphanede dönüşüm yapıldığı görünüyor.
https://github.com/paveldhq/lib-sensor-analog-mq4/blob/master/src/GAS_MQ4.cpp
arduino üzerinde bme280 altimetre gibi sensörlerim var bu sensör verilerini c++ da yazdığım arayüz programında okumak istiyorum yardımcı olurmusunuz.
sitde c## ve serial iletişim örneği var biraz araştırın göreceksiniz.
iyi çalışmalar. Ben cizgi takip eden robota ultrasonik engel sensörü ekledim fakat kodlama bilgim yok sayılır. Yarddımcı olur musunuz?
biz olamayız ama forumadan sorun belki yardım eden olur.
void setup()
{
Serial.begin(9600);
}
void loop()
{
int deger=Serial.read();
Serial.println(deger);
delay(500);
}
bu kadar basit bir kodda seri port ekranında
örneğin 1 yazdığımda
49
10
değerini döndürüyor.
örneğin 100 yazdığımda
49
48
48
10
değerini döndürüyor.
bunun sebebi nedir? nasıl düzeltebilirim?
100 yazıyorsam neden 100 olarak almıyor veya sonradan neden 10 değerini döndürüyor?
sadece “gönder” butonuna bastıgımda da 10 değerini gönderiyor? çok saçma değil mi?
Merhaba;
Arduino ile modbus tester programı kullanarak RD320-OFR modülüne giden sinyali okuyabilirmiyim. Bu modüle bağlı rs485 var.
lojik analizer ile iletişimin hızını inceledikten sonra loglama yapabilmeniz lazım. nasıl yaparsın onu bilmem arduinoyu rs485 hattına bağlayıp arduinonun rx kısmından gelen sinyalleri hex olarak inceleyin. biraz karışık.
iyi akşamlar. tx ve rx pinlerini haberleşme değil de dijital çıkış pini olarak kullanabilir miyiz. oraya bir şey bağladığımda sürekli çalışıyor.
program yüklemek için o pinler lazım bize arduino bootloader o pinleri okuyor ilk başlatıldığında oraya bağlı her şey en azından bir kere tetiklenmiş olur, bunu istemeyiz. teorik olarak kullanırsınız tabiki de çok uğraşırsınız.
Merhabalar. C üzerinde ürettiğim random sayıyı ve kendim girdiğim sayıyı serialport_write ile arduinoya yollamak istiyorum. Fakat sorum şu ki arduinoda serial.read() fonksiyonu ile 2 farklı değeri nasıl alabilirim
orneğin 2 sayısı şu şekilde yolladınız 123,456:
arduino tarafında serial.available() olduğunda okduğunuz karakterleri bir string diziye ekleyin. “,” e denk geldiğinizde diğer stringe gelen karakterleri ekleyin ve en sonunda “:” karakteri geldiğinde sayıları stringten integere döndürüp ne yapamak istiyorsanız yapın.
başka yöntemler de bulabilirsiniz aklıma ilk gelen bu oldu… kolay gelsin
merhaba
arduino nano ile kullanarak robot kontrol etmek istiyorum. Kontrol için HC-05 kullanıyorum. Ayırca devremde mp3 modül kullanacağım. her ikisi için de tex rx uçalrın aihtiyacım var. bunlardan 1 tanesi donanımsal var. diğeri içinde yazılımsal yapılabiliyor. cep telefonunda veri gönderdiğim zaman mp3 modül çal dediğim zaman çalmıyor. aynı anda 2 adet tx rx kullanabilmem için ne yapabilirim.
foruma gelin yapan vardır mutlaka.
SELAM HOCAM BENİM ARDİUNOM KLON MEGA 2560;Ben serial begin(9600);ve baud hızlarını açamıyorum seri monotörde yazdıklarımı göremiyorum com 3, 4, 5 hepsini kulandım. com . aygıt yöneticisinde de sıkıntı yok. seri haberleşme yapamıyorum.Baud hızlarını hepsini denedim yinede olmadı. serial kısmında sıkıntı oluşuyor begin çalışiyor ,serial kırmızı renge dönmüyor.serial monotörü ” “işaretlerinide kullanıyorum ve ; koyuyorum yinede olmuyor. saygılar.
program yukleyebiliyorsanız sorun çıkmaması lazım yani comm portunuz çalışıyordur. arduinoya hiçbirşey takmadan sadece power ve usb kablosu bağlı iken deneyin.
Hocam foruma girilmiyor.
Kısa bir kod yazmaya çalıştım ama gerekli kütüphaneyi yükleyemedim icin çalışmadı.
Bu konuda nereden yardım alabilirim
serial haberleşme için kütüphane yüklemenize gerek yok siz standart serialı kullanın atmegada bir kaç tane daha serial olabilir şimdilik onları kullanmayın
anladığım kadarı ile program yükleyebiliyorsunuz bu durumda herhangi bir serial print orneği işinize yarar onları kullanın.
merhaba ben kablosuz haberleşme yapmaya çalışıyorum ve aldığım hatanın çözümü ile ilgili “Seri port baud hızı kaydını koda dönüştürün” denmiş bunu nasıl yapabilirim
hata aldığınınz satırın kodunu buraya yazarsanız bakalım
merhaba basit bir kod yazmak istiyorum ama yardımcı olur musunuz?
sürekli 1 şununa basıp çeksin belli sürelerde 2 ye bassın istiyorum ama ne kullanacağımı anlamadım.
arduino leonardo usb keyboard gibi simulasyon yapar pc ye. o modeli alıp denemeniz lazım.
Hocam selamlar.
Her soruya üşenmeden cevap vermişsiniz tebrik ederim.
konunuzun altında reklam yapmak saygısızlık olurmu bilemiyorum ama 8 yaşındaki oğlumun youtube kanalında seri haberleşmeyle ilgili videoları vardı. buradan yazsam linkini ve ilgilenenler hem girip izleseler, hem de bu minik arkadaşın kanalına abone olarak ona destek olmuş olsalar hoş olmazmı 🙂
Ayrıca sizin gibi bilgili büyüklerimizin de bu miniklere desteklerini bekleriz hocam.
Selamlar.
“Emre’nin Arduino dünyası” adlı kanalının ilgili bölümü aşağıdadır:
https://www.youtube.com/playlist?list=PL6LbTZvbt9nRgKXXTtcKNjvghYhNmMoQM
Hocam saygılar, selamlar.
Seri porttan gelen data paketleri arasından sadece istediğim karakterle başlayan data paketinin içindeki, belirlediğim aralıktaki verinin seri çıkşa bağlı ekranda yazdırmak istiyorum. Ancak gelen tüm data paketlerindeki belirlediğim aralıktaki veriler sıra ile sergileniyor. Nerede yanlış yaptığımı bir türlü bulamadım. Yardımcı olursanız sevinirim. Yazdığım kod aşağıda olduğu gibidir:
Teşekkür ederim.
String msg = “”; // gelen datayı burada tutuyoruz
bool stringComplete = false; // datanın tamamen geldiğini belirten flag
void setup() {
// seri bağlantıları açıyoruz.
Serial2.begin(115200); //NMAE simulator-arduino com3 seri haberleşme
Serial.begin(9600); //arduino -PC com4 seri haberleşme
Serial1.begin(9600); //Arduino- Nextion TTL seri haberleşme
msg.reserve(2000); // 2000 byte lik yer açıyoruz
}
void serialEvent()
{
while (Serial2.available())
{
char inChar = (char)Serial2.read(); //yeni bir byte geldi 1 byte 1 karakter demektir. yani “a” mesela tek seferde
msg += inChar; // add it to the msg:
if (inChar == ‘\n’) // new line karakteri gelince stringComplete flag’ı kaldırılıyor ve string işleme alınıyor.
{
stringComplete = true; // yapılcak işlemler burada yazılabilir.
}
}
}
void loop() {
//newLine karakteri ile birlikte yeni bir string geldiyse
if (stringComplete)
{
Serial.println(msg); // gelen veriyi Arduino Serial com penceresinde izlemek için
if (msg.substring(“”) == “$HCHDG”); // bu filtrenin gereğini yaptıramıyorum!!!!!!!!!!!
{
/* aşağıdaki iki print kod bloğu istenen verinin Nextion erandaki iki farklı compenent (text metin hücresi) sergilenmesi için
* sadece $HCHDG ile başlayan NMEA datasını değil gelen tüm NMEA datalarının 0-12 (txt0.txt kompenentinde) ve 7-12’inci (txt1.txt kompenentinde) karakterleri sergileniyor. Sorun bu
*/
Serial1.print(“txt0.txt=”);
Serial1.print(“\””);
Serial1.println(msg.substring(0, 12));
Serial1.print(“\””);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.print(“txt1.txt=”);
Serial1.print(“\””);
Serial1.println(msg.substring(7, 12));
Serial1.print(“\””);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
}
// String’i temizleyelim.
msg = “”;
stringComplete = false;
}
}
substring yerine şöyle yapsanız?
int posHeader = s.indexOf(“$HCHDG”);
if (posHeader == 0) { // Got “$HCDG”
geri kalan pars işlemlerini de posHeader e göre ayarlarsınız.
Hocam çok teşekkür ederim.
Sayenizde kaç gündür takıldığım bir sorunu geçtim.
Daha çözmem ve öğrenmem gereken başka sorunlarda var ama arduinoya yeni başlayan biri olarak büyük bir sorunu aşmış oldum.
Kullandığım kodları mümkün olduğunca anlayarak yazmaya çalışıyorum.Verdiğiniz ipucunu şu şekilde kullandım;
int posHeader1 = msg.indexOf(“$HCHDT”);
if (posHeader1 == 0) { // buradan sonra yazdırma işlemlerini başarı ile yaptım
Surum şu: indexOf fonksiyonunun sonucu 1 veya 0. Biz bunu posHeader intager’ına atadık. istediğimiz değer string içerisinde mevcutsa bu fonksiyon sonucu 1 olmuyor mu? Ama biz “if (posHeader1 == 0)” ile fonksiyonun sonucu 0 ise istediğimiz çıktıyı alabiliyoruz. buradaki ters mantığı anlamadım.
Diğer sorum seri veri okurken kullandiğim “while(!Serial2.available());” kodundaki Serial’in başındaki ünlem ne işe yarıyor. veri okumayı if ile yaptığımızda bunu yazmıyoruz. ünlemin operatörler ile kullanıldığında olumsuzluk oluşturduğunu biliyorum (örnek !== eşit değil demek) ama buradaki kullanımını açıklayabilir misiniz.
Değerli vaktinizi ayırıp cevap yazdığınız için tekrar teşekkürler.
Seri porttan alınan NMEA formatındaki data paketlerinin okunup içlerinden istenilen dataların nextion lcd paneldeki pencerelerde sergilenmesi ile ilgili çalışmamın kodları aşağıda olduğu gibidir.
Amatör bir çalışma. Hatalı var. Ancak şu an çalışıyor. Yaptığım araştırmalarda kütüphane kullanılmayan, anlaşılır benzer bir örnek bulamadım. örnek olması bakımından yazıyorum.
Seri Porttan gelen veri:
20:11:08.167 -> $HCHDT,90.0,T*10
20:11:08.167 -> $GPVTG,89.8,T,84.8,M,10.5,N,19.5,K*4A
20:11:09.167 -> $GPVTG,91.6,T,86.6,M,10.5,N,19.5,K*41
20:11:10.168 -> $HCHDT,93.4,T*17
20:11:10.168 -> $GPVTG,93.3,T,88.3,M,10.5,N,19.5,K*4D
20:11:11.167 -> $GPVTG,95.0,T,90.0,M,10.5,N,19.5,K*42
//////Kullandığım kodlama////
String msg = “”;
void setup() {
Serial2.begin(115200); //NMAE simulator-arduino com3 seri haberleşme
Serial.begin(9600); //arduino -PC com4 seri haberleşme
Serial1.begin(9600); //Arduino- Nextion TTL seri haberleşme
msg.reserve(2000); // 2000 byte lik yer açıyoruz
}
void loop() {
while(!Serial2.available()); // eri veriyi varsa
String msg = Serial2.readStringUntil(‘\n’); // bitirme işaretine kadar gelen veriyi okuyup msg stringine atıyoruz.
Serial.println(msg); // arduino seri ekranına gelen veriyi yazdırıyoruz
int posHeader1 = msg.indexOf(“$HCHDT”);
int posHeader2 = msg.indexOf(“$GPVTG”);
if (posHeader1 == 0) {
//Buradan sonrasında istenen verilerin Nextion ekrandaki “txtH.txt” ve “txtS.txt” kompenentlerinde sergiletiyoruz
String msgs = msg.substring(0, 13);
Serial1.print(“txtH.txt=”);
Serial1.print(“\””);
Serial1.println(msgs.substring(7, 12));
Serial1.print(“\””);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
}
else if (posHeader2 == 0) {
String msgg = msg.substring(0, 30);
Serial1.print(“txtS.txt=”);
Serial1.print(“\””);
Serial1.println(msgg.substring(23, 27));
Serial1.print(“\””);
Serial1.write(0xff);
Serial1.write(0xff);
Serial1.write(0xff);
}
msg = “”; //msg değişkeninde tutulan strigleri siliyoruz
}
while(!Serial2.available());
kodunuz bu noktada veri yoksa bekler durur yada orada döner demek daha doğru olur.
biraz c++ çalışmanız lazım. ! işareti olumsuzsa veya değilse demek yukarıdaki kod serial.available olmadığında while kodunu işle demek başka da şart olmadığı için tekrar başa döner durur. herhangi bir veri gelirse rutinden kurtulur alt satıra geçer.
Arduino sitesinden indexof komutunu inceleyin değeri 0 veya 1 olmaz 0 ise birşey bulamadığını 0 dan büyük bulduğu zaman aradığı string içindeki yerini gösterir yani 5 değeri geliyorsa string içinde 5. karakterden başladığını gösterir buna göre ayarlamanız lazım kodunuzu
Ömer bey merhaba;
iki eksende çalışan bir kartezyen kol programladım.Bu kolun amacı metal parçaları bir noktadan bir noktaya taşımak olacak.
3 farklı elektroıknatıs denememe rağmen bir sorun yaşıyorum.
Parçaları yakalamak konusunda sorunum yok ama bırakma noktasında sürekli aynı kararlılığı alamıyorum.Gerek röle gerekse de PWM ile yaptım ama elektromıknatıs bir şekilde manyetik üzerinde kalıyor. LOW yaptığımda elektomıknatıs üzerinde kalan akım parçanın tutunmaya devam etmesine neden oluyor.Bu sorunu nasıl çözebileceğim hakkında yardımcı olacağınızı umuyorum.
Saygılarımla
elektromıknatısın kutuplarını boş bıraktığınızda üstünde bir miktar ters akım oluşur onu topraklamanız lazım. biz bir projede büyük motorları durdurmakta zorlanıyorduk, frenleme yapmamız gerekti. motor kutuplarından birine diğer kutbun aynısını verince motor olduğu yerde çakılıp kalıyor o zaman. sizde hangi kutbu ayırıyorsanız kısa bir süre veya devamlı diğer kutbun aynı polaritede voltaj uygulayın o zaman olması lazım. dikkat etmeniz gereken voltaj akım kaynağını mıknatısın ürettiği ters voltaj ve akımlardan koruyacak şekilde diyotla veya uygun bir yarı iletkenle de korumanız lazım.
bu cevabı okuduysanız ve uygulayınca buraya yazarsanız memnun olurum.
değerli arkadaslar sualim modur ki. ardinio ile c# arasında seriport aracılığı ile puls sensör verisini bir türlü aktarmayı bulamadım. buna örnek olabilecek bir proje yada kod varmıdır.
Textbox yada labele nabız verisini çekebilirmiyiz?
şu örneği bir deneyin başlangıç olur.
https://maker.robotistan.com/arduino-c-sharp-led/
hocam lcd ekranına seri monitörden yazı yazma hangi kodla olur
lcd ye yazı yazan bir program örneğini al çalıştır. seri monitörden gelen metini anlayan başka bir program yaz ve bunları birleştir.
Hocam merhaba, tüm yorumlarınız ve ziyaretçilere olan ilginiz için teşekkürler.
Müsaadenizle ben de bir soru soracağım:
Elimde 1 adet nano ve 1 adet uno var.
Uno’da DHT11 ile hava ve nem ölçüyorum. Bu verileri nanoya SoftwareSerial ile göndererek I2C LCD’de yazdıracağım.
Sadece Uno kullanarak tek başına sensörü çalıştırıp LCD’ye yazdırdım onda problem yok. Sadece bir arduinodan diğerine veri gönderme konusunu kafamda oturtamadım.
hem sıcaklık hem de nem verisi mevcut bunları nasıl ayrı ayrı göndericem iki ağrı byte değişkeninde mi tutacağım? Alıcı kısımda bunu Lcdye yazdırmak için ne yapmam gerekecek? Şimdidencevabınız için teşekkür ederim. iyi günler dilerim.
unodan yollarken ttt.tt,hhh,hh \r\n şeklinde yolla, sıcaklık ve nem verisini arka arkaya arasına virgül koyarak yolladım.
diğer alıcıda \r\n değerleri gelen kadar string bufferda biriltir. bu arada virgül görene kadar gelenleri sıcaklık olduğunu düşün ve virgülden sonrası da nem verisi olduğunu düşün bunu da ona göre pars edersin bölüştür stringlere yani.
Merhabalar
Ömer Koman hocam bilgisayardan veya herhangi bir cihazdan yazıcıya gönderilen yazdırma datasını ardiuno mega üzerinden nasıl görüntülerim. Serial monitör ekranında aynı sekil görüntüleyebilirmiyiz? Yardımcı olabilir misiniz?
arada dinleme yapacaksan bir sürü yazıcı bağlantı şekli var.
rs232 için bilgisayardan veya cihazdan çıkış tx pinini dinlemen lazım. yazıcıdan çıkan tx pininide ayrıca dinlemen lazım yazıcı ne cevap veriyor diye. boudrate i de bir şekilde keşfetmen lazım.
bazı yazıcılar paraleldir paralel portta 8 tane data ve kontrol pinleri var ve yön bilgisi var yine bunların tek tek lojik olarak dinlemen yorumlaman lazım.
usb yazıcılar için bilgisayara usb protokol analiz programları alıp akışı inceleyebilirsin ama binary format olduğu için pek anlamlı gelmiyor. sonra bu usb yi arduinoya nasıl entegre edersin bilemiycem…
yani teorik olarak portları dinleyip ne olup bittiğini keşfedip sonra yorumlayıp istediğin yere basarsın.
wifi veya bluetooth yazıcılara hiç girmiyorum hepsi için ayrı teknik var çünkü.
Merhaba “Serial.parseFloat” olarak seri monitörden girdiğim değerleri okuyorum 10.20 15.23 gibi okuyabiliyorum sayım 10.20 ye eşit olsun dediğimde led yansın yapıyorum sorun yok
ama sayım 10.23 olsun veya herhangi bir sonu küsüratlı (11.23,15.25,20.29 gibi) sayılarda komutu çalıştırmıyor ne yapmam gerekli yani sadece küsüratsız sayılarda komutu işleme alıyor
10.23 ü 100 le çarp int bir değişkene ata 1023 diye kontrol et 😉
Ömer Hocam merhabalar, İnsansız Hava Aracı projemiz için uçuş kartı olarak arduino kullanmamızı önerir misiniz. Uçuş kartı İha’nın bir nevi beyni olacak. Otonom kontrolleri gerçekleştirmesi için ve diğer durumlar için yeterli olur mu sizce hocam. Olmazsa önerebileceğiniz başka milkrodenetleyici kartlar neler olabilir. Teşekkür ederim.
öneririm herkes arduino ile yapıyor. multiwii ve betaflight diye aratın. stm32 işlemciye dayalı tasarımlar daha performanslı çalışır hemde daha fazla hafıza olacağı için kendi kodlarınıza yer kalır.
merhaba; seri porttan iki adet arduino mega ya veri gonderebiliyorum.sorum şu.veriyi diğer arduino ya gönderdikten sonra verinin karşı tarafa gidip gitmediğini anlayabileceğim bir fonksiyon var mıdır.Teşekkurler.
veriyi yolladıktan sonra karşıdan “OK” cevabı bekleyebilirsin.
donanım bazlı el sıkışmayı arduinoda donanımda ayrılmış pin varsa olur ancak, yani rx tx dışında rts ve dtr pinlerini de uart modülü yönetmesi lazım. uzun iş.
veriyi yollarken de bir crc kontrolü yaparsan yanlış giden veri varsa OK yarine ERR döndürürsün son yolladığını tekrar yollarsın. sağlam bir iletişimin olur.
yanlışlıkla diğer sorunu silmişim bu arada neydi o.
merhaba; arduino nano yu guc tasarrufu yapmak için modifiye ettim 5v regule cipini çıkardım lowpower.h kutuphanesinı kullandım ve 3.3 v çalıştırıyorum güç tasarrufu elde ettim sistem sorunsuz çalışıyor .ancak internette araştırdıgım kadarıyla nano 3.3v çalışırsa 16 mhz kristalin stabil çalışmayacağını ve sorun çıkarabilecegini soyleyenler oldu.sizce bu dogru mu? 8 mhz kullanmam gerekiyormus. ama nano modulunde 16 mhz var. bu sorunu yazılımsal olarak veya donanımsal olarak nasıl çözebilirim.Teşekkurler.
8mhz kristal kullandığınızda bootloader ve arduino nano kütüphanesinde de clock 16mhz olan seçenekleri 8mhz olarak değiştirmeniz lazım. bence kurcalamayın. olduğu kadar.