گیاهی ترین گیاهی ترین AnzanDigital فروشگاه
خانه / آردوینو / ساخت چندین پورت سریال بر روی آردوینو

ساخت چندین پورت سریال بر روی آردوینو

اگر برد آردوینو شما فقط یک ارتباط سریال دارد، به سادگی میتوانید به صورت نرم افزاری سریال پورت اضافی ایجاد کنید. با این کار از هزینه کردن بر روی برد های آدوینوی گران قیمت تر خودداری کرده اید. با بیر رباتیک همراه باشید.

به صورت معمول، محتویات کنسول توسط پورت سریال پرینت می شود، منظور ما ارتباط USB-Serial 5v است نه رابط 9-pin یا 25-pin کانکتور DB !

آردوینو های ساده، یک پورت سریال سخت افزاری دارند، اگر سریال پورت را در کاربردی دیگر استفاده کنیم دیگر قادر به پرینت خروجی کنسول نخواهیم بود. آردوینو به اندازه ی کافی سریع است تا از پین های I/O به منظور “پورت سریال نرم افزاری” استفاده کند. بنابرین در بسته ی اصلی آردوینو کتابخانه ی SoftwareSerial گنجانده شده است. این کتابخانه می تواند ارتباط تا سرعت 115200bps را برای شما فراهم کند. نسخه ی SoftwareSerial قرار گرفته شده در آردوینو 1.0 به بعد بر پایه ی NewSoftSerial توسط Mikal Hart است.

محدودیت ها:

  • اگر چندین پورت سریال را استفاده می کنید، فقط یکی از آنها میتواند داده را آنی در یک زمان دریافت کند.
  • همه ی پین های Mega و Mega 2560 از اینتراپت پشتیبانی نمی کنند، تنها پین های زیر میتوانند استفاده شوند:

RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

  • همه ی پین های Leonardo و Micro از اینتراپت پشتیبانی نمی کنند، تنها پین های زیر میتوانند استفاده شوند:

RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

  • بر روی آردوینو و Genuino 101 بیشترین سرعت RX 5700bps است.
  • بر روی آردوینو و Genuino 101 امکان استفاده RX در پین 13 وجود ندارد.

اگر پروژه ی شما نیازمند همزمانی data flows دارد، مرجع Paul Stoffregen’s AltSoftSerial library را بررسی کنید. AltSoftSerial برخی ویژگی ها متفاوتی دارد البته محدودیت های خاص خودش را نیز دارد.

نمونه ی دریافت Two Port Receive (منبع):

/*
  Software serial multple serial test

 Receives from the two software serial ports,
 sends to the hardware serial port.

 In order to listen on a software port, you call port.listen().
 When using two software serial ports, you have to switch ports
 by listen()ing on each one in turn. Pick a logical time to switch
 ports, like the end of an expected transmission, or when the
 buffer is empty. This example switches ports when there is nothing
 more to read from a port

 The circuit:
 Two devices which communicate serially are needed.
 * First serial device's TX attached to digital pin 10(RX), RX to pin 11(TX)
 * Second serial device's TX attached to digital pin 8(RX), RX to pin 9(TX)

 Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 created 18 Apr. 2011
 modified 19 March 2016
 by Tom Igoe
 based on Mikal Hart's twoPortRXExample

 This example code is in the public domain.

 */

#include <SoftwareSerial.h>
// software serial #1: RX = digital pin 10, TX = digital pin 11
SoftwareSerial portOne(10, 11);

// software serial #2: RX = digital pin 8, TX = digital pin 9
// on the Mega, use other pins instead, since 8 and 9 don't work on the Mega
SoftwareSerial portTwo(8, 9);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  // Start each software serial port
  portOne.begin(9600);
  portTwo.begin(9600);
}

void loop() {
  // By default, the last intialized port is listening.
  // when you want to listen on a port, explicitly select it:
  portOne.listen();
  Serial.println("Data from port one:");
  // while there is data coming in, read it
  // and send to the hardware serial port:
  while (portOne.available() > 0) {
    char inByte = portOne.read();
    Serial.write(inByte);
  }

  // blank line to separate data from the two ports:
  Serial.println();

  // Now listen on the second port
  portTwo.listen();
  // while there is data coming in, read it
  // and send to the hardware serial port:
  Serial.println("Data from port two:");
  while (portTwo.available() > 0) {
    char inByte = portTwo.read();
    Serial.write(inByte);
  }

  // blank line to separate data from the two ports:
  Serial.println();
}

نمونه Software Serial (منبع):

/*
  Software serial multple serial test

 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.

 The circuit:
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)

 Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 created back in the mists of time
 modified 25 May 2012
 by Tom Igoe
 based on Mikal Hart's example

 This example code is in the public domain.

 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.println("Goodnight moon!");

  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

 

کانال تلگرام بیر رباتیک

درباره Ahrovani Hadi

مشاهده بیشتر

arducopter simulation

شبیه سازی اتوپایلوت و تشخیص کد های Aruco

ویدئوی پیوست شده شبیه سازی اتوپایلوت ardupilot با شبیه ساز gazebo را نشان میدهد. این …

دیدگاه بگذارید

اولین نفری باشید که دیدگاه میگذارد

با خبر سازی از
avatar

wpDiscuz