<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # **串口雙向調用 (握手連接)** > 本例向你展示使用握手連接在Arduino和Genuino板和電腦之間建立多字節的通信(multi-byte communication)。? > 代碼最開始在**setup()**中不斷輸出字母A到串口監視器(用ASCII方式,對應byte值65),直到收到電腦的“回復”(收到一個byte)才進入loop。第一次進入**loop()**后代碼將發送三個傳感器的值到電腦一次。而后在loop循環中,程序一直等待電腦的信息(不會再發送字母A的等待信息),直到下次再收到一個byte再返回三個傳感器值一次,不斷重復。 > > 譯者注:為了幫助大家理解,我在**譯者解析程序邏輯**板塊繪制了流程圖,不懂的可以看看。 你可以使用Arduino IDE 串口監視器來查看數據,或者也可用Processing(下附代碼),Flash, PD, Max/MSP(下附補丁)等代替。 ### **所需硬件** * Arduino板或Genuino板 * 2個模擬信號傳感器 (電位器, 光電管, 壓力傳感器等等均可) * 按鍵 * 3 個10kΩ電阻 * 跳線 * 面包板 * 連接線 ### **所需軟件** Processing 或 Max/MSP version 5.x ### **電路連接** ![圖片來自官網](http://img.blog.csdn.net/20160518172332529)? 將模擬信號傳感器連接到A0口、A1口(還要用10kΩ電阻進行分壓)。然后用一個10kΩ電阻連接按鍵或者開關到A2口。 ### **原理圖** ![圖片來自官網](http://img.blog.csdn.net/20160518172351138) ### **程序邏輯** #### **Arduino程序流程圖** (此處為流程圖,如果看不見可能是瀏覽器問題) 進入setup()函數establishContact() {Arduino不斷發送握手連接請求信號}是否收到電腦請求字節?進入loop()函數yesno 進入loop()函數串口是否有數據?返回三個傳感器值yes 大家可以這樣理解 1. Arduino第一次收到輸入之前處于“**空閑狀態**”,因此不斷廣播信息:“**我已經準備好,如果要傳感器信息就來吧**”。【**Arduino嘗試找電腦握手**】 2. 電腦說:“**Arduino,我日后要串口數據,我和你握手**”,這時Arduino就知道電腦要數據了。因此就不再發送“**我已經準備好……**”的信息。默默等待電腦需要數據的時刻。Arduino目前出于“**等待狀態**”,等待給電腦發送傳感器信息。【**電腦和Arduino握手成功**】 3. 電腦說:”**現在給我數據**“。Arduino返回三個傳感器值,然后繼續等待電腦的下一個請求。【**握手成功后的通信**】 這就是握手連接,大家也可以網上搜搜握手連接的含義和作用。 ### **例程代碼** ~~~ /* 串口雙向調用 語言: Arduino 代碼不斷輸出字母A到串口監視器(用ASCII方式,對應byte值65),直到收到電腦的“回復”才 停止。收到電腦的“回復”后(收到一個byte),代碼將發送三個傳感器的值到電腦。 感謝Greg Shakar和Scott Fitzgerald 改善代碼 電路搭建: * 兩個電位器分別連接到A0、A1 * 按鍵連接到2號引腳 代碼是公開的。 */ int firstSensor = 0; // 第一個模擬信號傳感器 int secondSensor = 0; // 第二個模擬信號傳感器 int thirdSensor = 0; // 數字信號傳感器 int inByte = 0; // 收到的串口數據 void setup() { // 用9600波特率打開串口: Serial.begin(9600); while (!Serial) { // 等待串口建立完成,只有當使用本地USB口時有用 } pinMode(2, INPUT); // 2號引腳為數字傳感器 establishContact(); // 發送A字符到電腦,直到電腦發送回來數據才返回 } void loop() { // 如果串口有一個byte的數據,就讀取傳感器值: if (Serial.available() > 0) { // 獲取發送來的byte: inByte = Serial.read(); // 讀取第一個模擬信號傳感器,然后除以4,以保證值域在0-255: firstSensor = analogRead(A0) / 4; // 等待10ms,讓ADC數模轉換電路完成處理工作: delay(10); //讀取第一個模擬信號傳感器,然后除以4,以保證值域在0-255: secondSensor = analogRead(1) / 4; //讀取開關,將值映射到0-255 thirdSensor = map(digitalRead(2), 0, 1, 0, 255); // 發送傳感器值: Serial.write(firstSensor); Serial.write(secondSensor); Serial.write(thirdSensor); } } void establishContact() { while (Serial.available() <= 0) { Serial.print('A'); // 發送A字符 delay(300); } } ~~~ #### **Processing代碼** 將下列代碼拷貝到Processing工程,當你改變模擬信號傳感器時,你會看到屏幕上有一個小球跳動。只有當你按下按鈕時才會看到小球? ![圖片來自官網](http://img.blog.csdn.net/20160518172147698) ~~~ // 代碼公開. import processing.serial.*; int bgcolor; // 背景色 int fgcolor; // 填充色 Serial myPort; // 串口 int[] serialInArray = new int[3]; // 串口接收數據存儲 int serialCount = 0; // 串口數據數量 int xpos, ypos; // 小球初始位置 boolean firstContact = false; // 是否從板子收到了數據 void setup() { size(256, 256); // 設置舞臺(窗口)大小 noStroke(); // 設置下一個繪制的東西無邊框 // 設置小球初始位置在舞臺(窗口)中間 xpos = width/2; ypos = height/2; // 為了調試方便,將串口枚舉并且輸出 // 如果使用Processing 2.1或更早版本,使用Serial.printArray() println(Serial.list()); // 在我的mac上第一個總歸是Arduino的FTDI串口適配器,因此我直接打開了Serial.list()[0]。 // Windows系統上一般都是COM1。 // 下列代碼根據你使用的串口進行調整。 String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); } void draw() { background(bgcolor); fill(fgcolor); // 畫球 ellipse(xpos, ypos, 20, 20); } void serialEvent(Serial myPort) { // 從串口讀取一個值: int inByte = myPort.read(); // 如果是第一次獲取到數據,說明Arduino上的程序第一次運行,將串口數據清空。如果不是第一次,則說明是傳感器數據收到了。: if (firstContact == false) { if (inByte == 'A') { myPort.clear(); // 清除數組存儲 firstContact = true; // 這是第一次連接,收到了Arduino的握手請求 myPort.write('A'); // 電腦發送一個字節到Arduino,以此獲取更多組傳感器數據。 } } else { // 將最新數據放入數組: serialInArray[serialCount] = inByte; serialCount++; //如果有三個字節: if (serialCount > 2 ) { xpos = serialInArray[0]; ypos = serialInArray[1]; fgcolor = serialInArray[2]; // 打印值(調試用): println(xpos + "\t" + ypos + "\t" + fgcolor); // 發送大寫字母A,請求Arduino反饋更多的數據: myPort.write('A'); serialCount = 0; } } } ~~~ #### **Max補丁** ![圖片來自官網](http://img.blog.csdn.net/20160518172120088) ~~~ ----------begin_max5_patcher---------- 3908.3oc6ckziiaiE9b0+J3XjCIXpp.WzZNMURv.jCInQ5fYNjNngrDssRKK 4nkp6JA4+973hrkrsjncKu0SRiXasQ83G+dKj7QV+4qtaxzrOxKlf9Zzuft6 t+7U2cm7ThSbm936lrL3igIAExaaRJ+CYS+sI2qtTI+ikxSuBMKNojm+N3D4 Aua5KkPwpuoUAkgKhSm+tbdXo5cQXVOhuGwrohuHD4WT7iXzupen3HY4BuqG rH0kzrrzxzfkb4kdJONHo9JoUKiSS3kRgjt4jYUk0mkznPJh+CYgHewpSqty xWVwUh3jIqkEYEfmqQEMr.ETbB+YddQbVZix+tIAqV03z203QDX4ukIKHm6W ep3T0ovqOUN+435m2Rcx+5U0E+FTzVBh9xOsHXIh5YuADg1x4IYgumG0r3mj shmFmtJmWvSKCJ0um0WNhOKnJo7c6GmZe8YAg7Ne381Rc2j44wQYoBgn0SJN c8qCHH1RhQqJi7NRCVsmGt.pGUESCxE31zDdCV.PRyxRZeo0MU.WOHMdYPIu LVIrT75BMd4p73zxVuHdZ.TFKJByyRRZUTpq77dtRDzZFx+PbT4BYY0DJgaO dUcSvj0XTT7bdQY6yUFLun8YZo71jl0TIt042RYNLa4RfCTWfsznKWDWfJpl tJHrbgV6t.AZInfzWP.4INpJHA8za91u+6QN1nk7hh.PpQwonxEbTAWzpilV MimilkmsDtPbo3TPiUdY0pGa9ZShS4gYUJz1pwE1iwCpxbAgJI9DGGwWNzFT ksLf3z7M0MybG6Hj1WngsD7VEXS8j5q7Wu5U0+39ir8QJJS5GMHdtRimL4m1 0e1EVX0YsE2YssINriYRoFRyWVMoRRUGQvnkmms3pnXDYHbBKMPpIOL5i1s8 3rMPwFcRCsGRyPH780.8HBnpWz.vlEQBWJ+0CSunehJSmJxiIZRtNGhhDYrU jt3ZQyA2fHJhZDifXIQHUHH8oGYgOREI5nqHIzhFWUndPyBdB3VzHJGwUhkV rgvRl2UCVNMHcd234lf1DN16HFEIdHt99A5hrp7v5WWMSBQZgMP.Tkwoqig8 W1.Sn1f3h3nn1wLpBypPDzlJ7XinEGkLiMPloWOhrgR7dpZWJQV1faDy35Qj MThMFkWFGsJChQPqrQp8iorV6Q28HBVF4nMVDJj7f1xyYACFScisg.ruLHOW uMUS4Am4pI4PTnHi.6bi02HNzSYnDBe4cgAgKzRk1jc8PJLoH3Ydz6.Q.7K8 tfxx73oUkJq1MGuCy5TpAi.POWZ3AenidLOOIaZPhdjZVW3sdk6LXEGzHb7p Mfr7SEy3SXHyBSxJ3J2ncNNYVJsXG6Me10nj4cfCRFdTFjLo7q3SiCpjjEDM .nvra.GN39.E2CDTHWXPo8.xzfqrHCHKnf5QUYUVdoZPUjCSC7LU8.XtTUXl X8vr51GjwFGLC2AlMdLkU4RiaRrnmJuiudnDk0ZW+9p6TuKBe433JUCzp6fU iOF0SUk2UQYUPNTEkiZubvKa1tsmgL5SCTXGHnnG0CceLpkpR9Rs28IUESWl EwWNKfHlg.zj6Ee7S+nE8A+m9F7Cu40u9gMm+aRp3kYYkKd3GDOz5y+c7b96 K9gfvuIK68uNO6g2vUUL80WxihCVFD9vlB30e2SOrmxUb527RZ3nZNrljGrR 70vs1J9suWuZ3zaHVdG3RIJLgGj2Gfn6TcGcstEfvtH.hpFLlnBndjOLGQAI z98BXc6yQxghmOn6gZqj0ShPOXhynLOjzCESt+XwE8TxrCvrdXo16rqnLgvb HaFmbh29QD+K0DyNdjDwvzQL.NXpoMvoOBxkger0HwMRQbpbCh91fjjG9Idw prTH9SzaSea5a.GQEPnnh43WNefMlsOgx18n.vgUNO.tKl7tDyI3iHzafJHZ VVNedVEbGgYIY42i93prB0i7B7KT1LnnCiyAiinpBnsPV7OG.tYKfBsrJOkG UG5aq26iJw6GyJ4eM5mEgEKaNQPMEBUp.t8.krplOVTlZdJAW27bjvGK7p2p HQPgLOSJDYv4E9gQBYBjMUselRxDy+4WplIzm9JQAWOEmfb.E364B43CAwp5 uRRDEv8hWXprjADMUOYpOg9.bVQpEfhKgGCnAnk.rghBJCdTVICA3sDvAhE5 oU4hf67ea5zWPuILqrD8uiK+i477fjHIt9y.V88yy3uMsZUj7wnxGKNAdPx5 fAZMErDZOcJU4M01WFQokix.pKa+JE1WacmnKFeYd7b.0PeIzB8Kk+5WIZpB Ejt34KJeHgOCh4HK8Y3QiAkAfs8TRhhOkG7AAGQf0qxyfmQxa+PLb8Ex.2PS 4BdO5GB9Hvg+cfJCMofAIMu9Qz+UPCjckqVJlEmyA8Bf.rC6.3hAEuG8TdTU bZljQ0nr1ayIqmTwQYfyRGafZhur5vfuyMSqYNWmtAPwWHalDSuUgT0Bosh. JpAR89Y6Ez5QEfPTQO4J0DHLInIliz8BZV2JfV3Bd36qsQwAVVXbr1BGXp6s Sd5sSDruo74wofx.HxUgxQwTnMLqTXvRmiGh2PUZr5pBynKChjl6feNUjSRn hEUfRPT1GfG9Ik4TQBm.hEZZ.bc38HjAMKGzDRijEm1ifx1dbgzQyKh6FZc3 wOCkRJH+KUh0daWs6wzltWx1puXxlWW6NZWY2JiTBzzILRIANku02NourySM VI1VJTvQZff32AJr+dS9e34QAoA6EGXlGFH9yk7yyQAlVd3SR94g+TxOu1sU Flgd6ICI96LzazyPu1cgqsZ8r74SgF.65+efbMf4pGHT7lgHh30Sha3N5Ia. oqjMf7nsuMwycf7iYDybiAAVr3eC.oTMjpzEr8GDRc9bFRGHYXDrzg.Tlx+q NW8TY1IkzCfZ2IftkQstbB08HUezoDS+oFyI.cWIhWBaDiUo7qIrDO7f.L6n AXqCmyNT9act.z+Iv.GR0uES0ZXfjdz.IczAxQOUR+zvRsUTigRxmyPYeNlj yXv8Peef2ZFzuLzWPPeAE8ELzWXYlhe8WzAcUg+b1UkIoCLzIH60zwASGXau a1Dq2nUY.sox4vng+m0nACePngC9lEMLZMBPodOxf+yx5d4uMCTHm3kJvIIG jcLMedEQldkjpoBkQyjY1Hk.hmSY95Iwos8NDb9VSlIWOIntqgxryUjL6bCJ y1lli5tWWxrQ7YmqGYlc6shK1iY2dr0wtNjYxgHyzaq0OznY235awCr8zSz6 EGd1QNUKf.74dADTBbTbeotjpW95IolY0WpKYONY8M83Rx2MChx3fL+iG5Mm tXpdmvXj8uTvaAL1WjbbarQD4Z6kXBpnm6a69oKV2PY9WY174IbC3CaRQ9iK Q4sYGQpwdtZ5wFrc7n569.M83OOR5ydSB1ZcAWCxdbKuavz9LILxfD.wWO.W Nq+Zu4Es+AP6s5p9jDWH8ET+c85+XbW0.N1nDCTD7U4DGc6ohnU019fS7kQ0 o43luuOGjv5agHp0DT.CysOfgLR3xXlXTUKm16RivRsn3z0O6cl3YScAvtrb hwekGB7BZuqESUzBJWmCvK7t9HF8Ts6cUAPoFWso3aP8ApWyJ3wqOPo2pJDC BQ0NI0Pj8QCQ2r1L5vKaU5lDRYX7yRur1UYYZmJQ9iDHwN9dndB5n5ejflmm UsBwLHnDkKXWRuAkb3NeuzqRstiQGP.fCQFdHNzaE.8u58Nz9svFE9SGIE1X kv9Iwfl1BdNWjA7xcThsWCS847loyFD8pZq2E2F04lYULzBTDYhrFSDDJdjo fisN2NUN26e4xRu51zD5ZseJ4HC63WyIX6jRqsp0jangBnK.Qlo58PCpWevt ahzqK7fbKsdX6R64aao8LmWhBPh9jKVAPMzb5a2cV6opdWHneMmqMEmAGsPh ieigIjV+4gF1GgbMNXg+NH44YaRYyd..S1ThHzKhFwwGRaWVITqyj9FvPqMT d0pDuSqDrOGF.Uogf.juCFi9WAUkYR+rFPanDcPG8SbrtjyG03ZQ8m3AqC5H NcUUoXSwVrqXKVcZu.5ZnkwIfIVdXVZTwAuTTUiYuxwjZDK6ZgnRtYV8tJmP hEcuXgz2Goxyaiw35UkaWbpqtfzD02oUkkYqi.YQbZqIIWrIljFolsdmMKFR wCJ2+DTn.9QlkOld+d9Qy9IJdpLfy05Ik2b8GsG9h8rdm1ZFx1FrmmlA2snw qI9Mcdi2nr6q3Gc87nLawurbw1dda+tMyGJ9HaQmlkGwy6davisMgrkM65oz eulfYCzG46am8tSDK144xV4cEvVMTRXq9CIX8+ALNWb6sttKNkiZetnbz+lx cQnb1Nds2C0tvLNe14hwQtxYbxhqc17qHfamUcZZ3NYSWqjJuiDoizZ+ud2j naRK4k3346IIVdR1kKiQjM39adMamvc6n+Xp36Yf3SIGh3uKbquqs1JksTII kuJ7RrZSFb2Cn9j5a6DT8cMo0iczU+lsYaU8YNVh5k5uzJLU26ZcfuJE6XLY 0mcRp9NTCp+L+Ap+in7Xf3b9jFQBLtIY06PbrGhcrU6N00Qlaf9N0+QPo9nS P6qsI7aYNLSNOHpsAxis0ggnZLjYqyyFkdSqinVsPaqSDZaYBZ6c93uLCjGm iCroJVLzU45iNE.pIUfs3TWb.0FejHp9uANr0GcJPTroFDNOHpkIweLnI1QT dHl3P7LhOF3Ahd9rnvLwAMy5JSdNezGlsIsW9mW44r26js+alhxjlkdhN0YE YqiH5MTeWo6D4Qm.ieLS7OynmuVGSbmbFUlnWWhiQlhOeN+Yl35bq.tGo9JR cj8AVqdz7nSgVB9zNj.FTOU68o5d9KO5TUOGxVMw+jTO8T6wqD0hEiHsOJO5 TTOMoS.zlqN0SpZjz6GcH05ylVM0jwuidlkmAif374ih5M5QPfccr8Hqifff otN8pt3hUcaWu8nosBhwmD0Epw5KmoF.poxy4YHbnjqfPJqcM3Y2vun7nS.i f3eETiqcRX2LR.4QmhZrkoCSGwzZrqKHrVR8caari+55d2caPqmq5n.ywe8Q WrZL9fpwVXeaogMByE6y1SMdjk+gbavbN7fYvVtt1C2XwHJSzpk+tidUO25H UB9onw9mlFQ10fhpZBaDatcMTTEGcJpwzqg92qqiVtM6Cu0IRQ0ndEdfCAqV l0qYAUmPrctbxO4XCuPMa1asYzKDks1D52ZCne6Mednz9qW8+.vfqkDA -----------end_max5_patcher----------- ~~~ ### **相關資料** [serial.begin()](http://www.arduino.cc/en/Serial/Begin)? [serial.available()](http://www.arduino.cc/en/Serial/Available)? [serial.print()](http://www.arduino.cc/en/Serial/Print)? [analogRead()](http://www.arduino.cc/en/Reference/AnalogRead)?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看