Arduino ASCII-kodlanmış Çıkışlı Seri Çağrı ve Yanıt
ASCII-Kodlanmış Çıkışlı Seri Çağrı Yanıt. Bu örnek Arduino ya da Genuino kartından bilgisayara bir çağrı-cevap (el sıkışma) yöntemi kullanarak dize-temelli iletişimi göstermektedir.
Çizim, başlangıçta bir ASCII dizesi gönderir ve bilgisayardan seri bir yanıt alıncaya kadar tekrarlar. Ardından, ASCII kodlu sayılar olarak üç sensör değeri gönderir, virgülle ayrılmış ve satır besleme ve satırbaşı tarafından sonlandırılır ve bilgisayardan başka bir yanıt bekler.
Gönderilen verileri görüntülemek için Arduino Yazılımı (IDE) seri monitörünü kullanabilir veya İşleme (aşağıya bakınız), Flash, PD, Max / MSP (aşağıdaki örneğe bakınız), vb. Tarafından okunabilir. Aşağıdaki örnekler virgüllerde gelen dize ve dizeyi tekrar sayılara dönüştür.
Bunu Seri arama ve yanıt örneğiyle karşılaştırın . Benzerler, her ikisi de bir el sıkışma yöntemini kullanır, ancak bu, sensör okumalarını dizgiler olarak kodlar, diğeri ise bunları ikili değerler olarak gönderir. ASCII olarak kodlanmış dizeleri gönderirken daha fazla bayt alırken, her bir sensör okuması için 255’ten daha büyük değerleri kolayca gönderebileceğiniz anlamına gelir. Bir seri terminal programında okumak daha da kolaydır.
Donanım
- Arduino veya Genuino
- 2 adet analog sensör (potansiyometre, fotosel, FSR vb.)
- butona basınız
- 3 adet 10K ohm dirençler
- Bağlantı Kabloları
- breadboard
“Arduino UNO, elektronik ve kodlamaya başlamak için en iyi tahtadır. Bu, platformla birlikte çalıştığınız ilk deneyiminizse, Arduino UNO, denemelere başlayabileceğiniz en iyi seçimdir. UNO, tüm Arduino ailesinin en çok kullanılan ve içeriği bulunan kartıdır.”
Gerekli Yazılım
- Processing veya
- Max / MSP sürüm 5
Devre
Analog sensörleri, gerilim bölücüler olarak kullanılan 10K ohm dirençlerle 0 ve 1 analog giriş pinlerine bağlayın. Bir buton bağlayın veya şasiye referans olarak 10K ohm dirençli dijital I / O pin 2’ye geçin.
Kod
/* ASCII'de Seri Arama ve Yanıt Dil: Kablolama / Arduino Bu program, başlangıçta ASCII A (65 değeri bayt) gönderir ve bunu tekrarlar. Bazı veriler girinceye kadar. Sonra seri portunda bir bayt bekler ve üç ASCII-kodlanmış, virgülle ayrılmış sensör değerlerini gönderir. Satır içi ve satır başı, bayt aldığında. Devre: - 0 ve 1 analog girişlerine bağlı potansiyometreler - dijital I / O 2'ye bağlı buton oluşturuldu 26 Eyl 2005 Tom Igoe tarafından 24 Nis 2012 Tom Igoe ve Scott Fitzgerald tarafından İyileştirmeler için Greg Shakar ve Scott Fitzgerald'a teşekkürler Bu örnek kod kamu malıdır. http://www.arduino.cc/en/Tutorial/SerialCallResponseASCII */ int firstSensor = 0; // ilk analog sensor int secondSensor = 0; // ikinci analog sensor int thirdSensor = 0; // dijital sensor int inByte = 0; // gelen seri bayt void setup() { // 9600 bps'de seri bağlantı noktasını başlat ve bağlantı noktasının açılmasını bekleyin: Serial.begin(9600); while (!Serial) { ; // bağlanmak için seri portu bekleyin. Sadece yerel USB bağlantı noktası için gerekli } pinMode(2, INPUT); // dijital sensör 2 dijital pim üzerinde establishContact(); // alıcı yanıt verene kadar iletişim kurmak için bir bayt gönder } void loop() { // geçerli bir bayt alırsak,: if (Serial.available() > 0) { // gelen baytı al: inByte = Serial.read(); // ilk analog girişi oku: firstSensor = analogRead(A0); // ikinci analog girişi oku: secondSensor = analogRead(A1); // okuma anahtarı, 0 veya 255 ile eşleştirin thirdSensor = map(digitalRead(2), 0, 1, 0, 255); // sensör değerleri gönder: Serial.print(firstSensor); Serial.print(","); Serial.print(secondSensor); Serial.print(","); Serial.println(thirdSensor); } } void establishContact() { while (Serial.available() <= 0) { Serial.println("0,0,0"); // bir başlangıç dizesi gönder delay(300); } } /* Bu örnekle çalışacak Processing kod: // Bu örnek kod genel etki alanında. import processing.serial.*; // İşlem seri kütüphanesini içe aktar Serial myPort; //seri port float bgcolor; // Arka plan rengi float fgcolor; // Rengi doldur float xpos, ypos; // Topun başlangıç pozisyonu void setup() { size(640, 480); // Mevcut tüm seri portları listele // İşlem 2.1 veya daha yenisini kullanıyorsanız, Serial.printArray () öğesini kullanın. println(Serial.list()); // Mac'indeki seri listesindeki ilk portun her zaman benim olduğunu biliyorum // Arduino kartı, ben de Serial.list () [0] 'ı açtım. // 0'ı seri portun uygun numarasına değiştirin. // mikrodenetleyici bağlı. myPort = new Serial(this, Serial.list()[0], 9600); // bir satır beslemesi alıncaya kadar bir bayt olarak bayt okuyun (ASCII 10): myPort.bufferUntil('\n'); // pürüzsüz kenarlarla çizin: smooth(); } void draw() { background(bgcolor); fill(fgcolor); // Şekli çiz ellipse(xpos, ypos, 20, 20); } // serialEvent yöntemi, her işleme koyma işlemcisi tarafından otomatik olarak çalıştırılır // arabellek bufferUntil () 'de ayarlanan bayt değerine ulaşır // setup()'daki yöntem: void serialEvent(Serial myPort) { // seri arabelleği oku: String myString = myPort.readStringUntil('\n'); // satır besleme dışında herhangi bir baytınız varsa: myString = trim(myString); // dizeyi virgüllere ayırın ve bölümleri tam sayılara dönüştürün: int sensors[] = int(split(myString, ',')); // sahip olduğunuz değerleri yazdırın: for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) { print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t"); } // Tüm sensör değerleri yazdırıldıktan sonra bir satır besleme ekleyin: println(); if (sensors.length > 1) { xpos = map(sensors[0], 0, 1023, 0, width); ypos = map(sensors[1], 0, 1023, 0, height); fgcolor = sensors[2]; } // daha fazla veri istemek için bir byte gönderin: myPort.write("A"); } */ /* Max / MSP sürüm 5 düzeltme eki şu örnekle çalıştırılacak: ----------begin_max5_patcher---------- 3640.3oc6cs0jZajE94Y9UzKkeHoVloTeSHkm1II0VkeHIthSs6C1obIjZ.E KjHRhY7jT4+9d5KBj.jTCAXfoV6x.sj5VmyWet127ed6MCFm8EQw.z2f9.5l a9yau4F0kjW3FS4aFLO3KgIAEpGaPX174hzxAC02qT7kR80mkkUHPAnBQdbP BZQVdIZRd1bT4r3BDTmkU0YQPY3r3zoeJWDVpe2ttr6cFhvXt7KhyH8W26f9 USkhiTulrw+1czQUszjrzxzf4B0sdP9dqtS5x4woIhREQiWewrkkUW0oViTD +GpFASt2Qd0+51akeLzRPIU7DPXagIFnH.4653f9WAKKyxVHRQNcfDXlih2w puvbdWHAlcTPBRKHg4x5mr74EBMINHV1+iFL.8qG.VMWTTDLUrs.TBH+zAvP nTEhvvxun9pBd6FWH38DWH6DWv6ItbX.RKBOJ7XbP5ztvDesvhBLb6VTwcOg DmiBjnXfiIrjjED0CpP490PEmtPExwQA5EGUVjK.CKQJqtcYl0nCMRAJi76D Z7dQflCCVV1i+ENiTy3AwYaghEA4.KVJx+jHMXbhntJPceO3iBpPOPKtZqtU jUoXtw28fkEimmEIlOI.3Q4iMT9wO+iLxc9O7sN28928t6Ve8uMYo.7EUN6t ePVoUW+6E4hOW7CAgeaV1meWd1cuWnYLy8mKhhClGDd25F3ce+C2si1Ud42+ bZ3IQJOXg7q96t80e50YvDjqHw7VvkRTXhHHuKEerRwmqfBFsS.g9h.HZN3X hJf5Qd+xHZHgzc.mrqeYjbn4E84evfIDUjDtjNwD2iRHV6anmGdbmsfKxTTJ dd93rjtBJ2U42foCwZDqKfYzKkrh4VgYIY4FxVRmN2646f8ck+xw7KrjzOlZ ZYAVfdZgKlaWn29FzA8nfdR2quj.3ejflBJnKr.Dwpf13cZBm85P0rPj.rOB 6fvztPFGkVI0SAPi5NKHmih7E8Ph2e35uOtYN6x6JEQtJVWpV7gRtm2dZy9W +YMCxLHrEvAknQktDVdY7v82SFosgmSGHO56BRRt6mEEKxRKDnGd+2812h9X 5GSeODOcAJ.M9YHHAfjPkyD0GIugn.Ht6bQ.7TTS8DoPtCQCQxWobX+jYPUJ hPn3zgnx7kogphieFZ2j3TwDgH5dzaUscJ77kEnIY4hoYKglVYzcH5KKxJzu qmgegxl.0MLNGBNDsr.5IUz0iAPZFE.0TtLOEdClQYrAAeORwW+XVo3aP+hb DHUBCH.mfbEKfGOPyjQhGiCAdNUUBRcQjij4X.u5MZRDzHSyTDQFbcYdHHIM AzlF1lnoLjKG8UZH5guV1vEkA4kKWbOPGPC9YgjNdJHVy+ZJQ1.Cq.FUWQpA ke.8DbUwi.YEWBUCDhPyAXCEETFbuhICg9EIRiYnGVjKyt0+io.r+9vrxRz+ Nt7OlJxCRhT35u.X0amlI9X5xEQppQwneJrLarPVU7JkGYWVHz2njevz1UoX XkoEWOkxDWO9kXYocoTwuzF611zXJyimB3F5qf9nOT9qesryJTJ1EOcV4cIh IPVWYoOBUMFTl.4sGRRzRT4AOIkRjn8h7LnNJI2mhg6OSk5JZrPJ4i9gfu.R w+NHLCcpfAMij88n+qTPPMt4UTwj3bAnY.h.aIe.RiAEeF8Pdzx3zLkLUs1Z mcmczah0FH4ZmpLcp.rVbX3d0zalKhSiKAxBZ9BU2zTP3uPobgL1Q.U0.kl+ jcBZj1AMOpzsJYjdz0n53QXsfYrqELKblH7yUFoDfPVXbrwDGXqCjwjviT7a rXZbpxOvxzXvpOnPH0GlTJMZog8l2UZJcdPjxjG7ywIYgeFULaInFDk8jpxZ apvMA4cv9X.7.vaRRGFAcPYHMR0dF2BZC7wEJ2TOKeZnCRD+HzJo.OLWSW6r qk2wfI6pGf.pdjC4rpfL2YeK8JYloVf93.ocJEvocv9wAcEiMQgBtl.lb0y9 heKnvtGRs+iHOJHM3uaZbN1jDrhED4FfwfLPCEmH8jV.BB0Z+aF.Vkqc4apU EIb9a5zAcGt5Rf3WdsNJ3R4PXDU0mouHzIca0MWO.KpQjT8oq1SIyqV3mP24 ToxfHpdyOPNqgwoK.W.fxfRNtwsiDSBVlT9ociSMu+jfPQqUtk9paFLMONJK URFMpq7xUuvOXF1HBuN6ndhzfE6nxPXQkKKFGjKQNyHtSptYYVVRyaspyBD3 CRiA0YQYrlbgHdptY77E4wZk5UWSOf9yJByyRRZzT5673NtiNrvmhiJmoZq5 fI73wKp5DFrBihhmBNxadsxfoEMuRiIbutfVcM4FWuyr.2bvrlNF5.3U+q9C sKaa5jkMt70iSd8bC2ZbEFUuAa0DWqYF0tJ91p43649br2nZ2usLGuoxrnQq 6TArNx+1CjRLPpVWf62Kj59ZFRa38Y6D0kRo8AnT8b0g0e4p8+f6.P4sBnaX TqMmPsOdOcjG+dMtOmdzcgLdIGqjX0J+FAVrmSu.L8fAX19Ky1C.e1.z+IB2 qpeCIUV+.I4fARxQGH0i.9ECVZrhZMTheMCkc4XRMsoCgbef2ZFjaF5MXzaH n2PQugYmhe0WjdcU47Z1Ukhb6CwFISy2HNtcvtaNRWdshHNVgHcNMUlopRm4 tJByyLXfI0UN6GM7eUiFTm8BMbctZQC8atOegDu6oveXrgpeaGnfaETvsBJN 6AKuNsT4n+zRVXJtQd+ciEEYKyCq.8ptRTSdBRQrLNcUd5eXcjoa7fyhihZl UrNQxBYZo5g.vpdt8klkJi1QyPvdH7UFMStbvYu8Amu1nY7ECMKGXBqnY2KH Z18Jjl4aYNnEYiQWVzrUxytWNzL0VZ14xglI6isN5kAMi2GZlbYPyNma6FqC aJRs9qEogO+ovfvYFxxjGV07cLnH3QQzm.R.BG7SAkk4wiWVpC2p9jwX23ka 0zSz4M6e1QZY.8mljMNHwLURqZ9FuzslMk8ZJXtcMPeblVut1XYDhdMCpmjZ 8BAqsU9DezKxJAa8Hmbbfi+wccuVv7c0qELrEHB+UAhHWzCfCbKPEyBki24Z clythVwfkYSmlHrPdX8tC5v1iPb5ArPuOWc8NVrRZspq24UxhE0wBcAsMyt2 2LLuqvkKZRXjEq5CM6S3tq9Zm6HD+8Prm0F+jDWn1paUe+2ZuF259kxkiR5W Qf6vzKBtMm+gFrMeuWsKW.6B61VyWOFjz0Zsmwza+.ikxQcAL3iDtbLWMTKm OtyMEFcjWM9iu0rMa81D8kUl3v2ewcHWP5B2HX6kK7t7DL5fs6JVIrO0Z1l3 bEpOP3zih9.gbspPzKDYbRVAQ7CFhtZsYzhW1ko0WEJcG3oAC0aRIyxKsUEI +iDPwOLfp0uNA68MmtSUSmRuNb8d1ttWya7sVWf5Iwf.1LQtZUnqNvT1bS6z E5o2vfqNSH5bufQbuZV09M.E04Mj8XBUiBqNGl5FSt3NGlZaGRpV6wc4kiWi q0twaaORhul1jjsIi7cMjQlJJUaQuhR495nlfRQWRJXkrgmMGXWjKM4jdGJH yovkl4HUetutzWuY5tjFHneGn77rtG3iJ92whCVJxKhBwgGtRaFIzabfNrRn WThd9q24vsZjf9JvHwOKBhprFDmtXYIZ7xISjaO1GE4OK2V9yiS.qFhvrznh 8cKyMZs7EVepT01FlCe0rIC0lUk6NX4N9syCyAE660+ovE9hyGqjaGurrLak G0YwoMlFO4YMSZjd9DcWucsjUr1Yqgy8TluCY3N9Q8.+k0JCD3ZTS0CW8Qyb s19nOxrgjw7VFU+3ooYviK66pCfimt8AAxHOOBkK+EajC2yayWtciMzgdvpM NKORj29YyGcS4wFVlql0wcZTg1yw5wvMNiTpuUzpu.Y0miRlgO0w7wpZI2Em SUBGayVM5eqU4C+rV4ZSPkvXqLJbAHlR3mKwT5ISL8+Kv0k.GWEKwpP3ewk3 7omKIN7EtDmp4ZtHk0BfatXgLhgasHgZrVYaY8AIO7fq8Pas1fFzjd4ibwpd XO4GXOeOG+lcyasNh1R+wVx2yBxeTOT+wiZFYA0P48PNyiiVjAhJlNT4Qvpb uj3aN2qYqJcBfSWhMbf+YCPcsfbNeTC2l9WNc+5eIlkST0RJgupzIn+kysgC X6GGXnYpdYfP0GP6MKQXM3N1Ih6XVvcLuym7B0B5w8v.ahqBI49qJcJ.TaX. N+xBP4NGHhhqYfkRNM9q1f3ZweqyYCQYdGCSZGQ5wBx47o.Ssw+CkcgQOmud KZic4QKzCw+7ROm8nY2LfMsEDtdfeMKSn5Ev95IQhorcqJcBrzPsQUhRNe8M 1X6lhOezC4Bidv1nKcFs8YimJ9n8RWZXiO7aSCxDRLdjd91qU5TnmXCeRvmR 9jnm7b15RmJ9rO4Kr+IgO04BfczyOpqx9npzofOsIlaR8Mo0IUMR48i0mYly lVMwlw6gbloGRezy4yKEw6BHBBWik.eRi3DNM5KDahS.SOE1EjmXl7Uyqo9T AtQAO8fG3oLX3cZFxKh0FLNSRfDaoG74gdvW.ZDU9FMGSdFMBt+IQh.6eIvw FujTkJREGKKcJ3X2WtXf7Ub1HywEqxh2tJnE.FcZhMByrcXQw1x+bOWJYjpy lv8oq55aEHLcwD8hJjxbVU5EigcNtL7Ql76KVVp69Huhcb87vpoCkRYT+96v Hd5Ay1rofMqm+FkLYvv0+GL3FkL6bLp21kL6QFNV8BNM48foWBV4zt1wXm5V 4jkNEbL45dtNw13Iltmi9sAyY0S0l8BR+3yWjVXax7eOmKrp4m0QKIal6VYo SAf5XQxSrCa5l0qk45k5kAzqEgMNgzkz9FmL5abpnu4IhNzZ+0s+OKCSg0. -----------end_max5_patcher----------- */
Processing Kodu
İşleme çizimini yukarıdaki kod örneğinden kopyalayın. Analog sensörün değerini değiştirdiğinizde, ekranda böyle bir şey hareket eden bir top alırsınız. Top sadece düğmeye bastığınızda görünecektir:
Max Kodu
Maksimum yama böyle görünüyor. Yukarıdaki kod örneğinden metni kopyalayın ve yeni bir Maks penceresine yapıştırın.
Kaynak:arduino.cc