Serial Communications

Содержание

Слайд 2

Communicating with Others Arduino can use same USB cable for programming

Communicating with Others

Arduino can use same USB cable for programming and

to talk with computers
Talking to other devices uses the “Serial” commands
TX – sending to PC
RX – receiving from PC
Слайд 3

Serial Communications Sends “Hello world!” to your computer Click on “Serial Monitor” button to see output

Serial Communications

Sends “Hello world!” to your computer
Click on “Serial Monitor” button

to see output
Слайд 4

Arduino Communications Is just serial communications Arduino doesn’t really do USB

Arduino Communications

Is just serial communications
Arduino doesn’t really do USB
It really is

“serial”, like old RS-232 serial
All microcontrollers can do serial
Not many can do USB
Serial is easy, USB is hard

serial terminal from the old days

Слайд 5

Serial Communications “Serial” because data is broken down into bits, each

Serial Communications

“Serial” because data is broken down into bits, each sent

one after the other down a single wire.
The single ASCII character ‘B’ is sent as:

Toggle a pin to send data, just like blinking an LED
You could implement sending serial data with digitalWrite() and delay()
A single data wire needed to send data. One other to receive.

Слайд 6

Arduino & USB-to-serial A standard Arduino has a single hardware serial

Arduino & USB-to-serial

A standard Arduino has a single hardware serial port
But

serial communication is also possible using software libraries to emulate additional ports
Слайд 7

Arduino Mini Arduino Mini separates the two circuits Arduino Mini USB adapter Arduino Mini

Arduino Mini

Arduino Mini separates the two circuits

Arduino Mini USB adapter

Arduino Mini

Слайд 8

Arduino Mega The Arduino Mega has four hardware serial ports Only

Arduino Mega

The Arduino Mega has four hardware serial ports
Only one of

these has a USB adapter built in
Слайд 9

Arduino to Computer USB is totally optional for Arduino, but it

Arduino to Computer

USB is totally optional for Arduino, but it makes

things easier
Original Arduino boards were RS-232 serial, not USB
All programs that talk to Arduino (even the Arduino IDE) think that they’re talking via a serial port
Слайд 10

Arduino & USB Since Arduino is all about serial, and not

Arduino & USB

Since Arduino is all about serial, and not USB,

Interfacing to things like USB flash drives, USB hard disks, USB webcams, etc. is not possible
Also, USB is a host/peripheral protocol. Being a USB “host” means needing a lot of processing power and software, not something for a tiny 8kB microcontroller. It can be a peripheral. In fact, there is an open project called “AVR-USB” that allows AVR chips like used in Arduino to be proper USB peripherals
Слайд 11

Serial Message Protocol Where each message begins and ends? Sides must

Serial Message Protocol

Where each message begins and ends?
Sides must agree how

information is organized in the message (communications protocol)
Header - one or more special characters that identify the start of message
Footer - one or more special characters that identify the end of message
Слайд 12

Sending Debug Information from Arduino to Your Computer This sketch prints

Sending Debug Information from Arduino to Your Computer

This sketch prints sequential

numbers on the Serial Monitor:

void setup(){
Serial.begin(9600); // send and receive at 9600 baud
}
int number = 0;
void loop(){
Serial.print("The number is ");
Serial.println(number); // print the number
delay(500); // delay half second between numbers
number++; // to the next number
}

The number is 0
The number is 1
The number is 2

Output is:

Слайд 13

Baud rate First call the Serial.begin() The function takes a single

Baud rate

First call the
Serial.begin()
The function takes a single parameter: the desired

communication speed (baud).
You must use the same speed for the sending side and the receiving side.

baud is a measure of the number of bits transmitted per second

Слайд 14

Sending information You can display text using the Serial.print()or Serial.println() function

Sending information

You can display text using the Serial.print()or Serial.println() function

println() –

prints the data followed by a carriage return character and a newline character
These commands can take many forms
Numbers are printed using an ASCII character for each digit
Floats are similarly printed as ASCII digits, defaulting to two decimal places
Bytes are sent as a single character
Characters and strings are sent as is
Слайд 15

Strings String message = "This string"; //C++ type strings message.length() //provides

Strings

String message = "This string"; //C++ type strings
message.length() //provides thenumber of

characters) in the string
message.concat(anotherMessage) //appends the contents of anotheMessage to message (also + operator)
message.substring(s, e); //returns a substring starting from s till e
You can use the indexOf and lastIndexOf functions to find an instance of a particular character in a string
char message[8] = "Arduino"; //C type string
int length = strlen(message); // return the number of characters in the string
strcpy(destination, source); // copy string source to destination
strcat(destination, source); // append source string to the end of the destination string
if(strcmp(str, "Arduino") == 0) // do something if the variable str is equal to "Arduino"
Слайд 16

Comparing C type Strings char str1[ ] = "left"; char str2[

Comparing C type Strings

char str1[ ] = "left";
char str2[ ] =

"right";
if(strcmp(str1, str2) == 0)
Serial.print("strings are equal)
strcmp("left", "leftcenter") == 0)
// this will evaluate to false
strncmp("left", "leftcenter", 4) == 0)
// this will evaluate to true
Слайд 17

String Object charAt(n) or [n] - Access a particular character of

String Object

charAt(n) or [n] - Access a particular character of the

String
concat(parameter) or + - Appends the parameter to a String
endsWith(string2) - Tests whether or not a String ends with string2
equals(string2) or == - Compares two strings for equality (case sensitive)
indexOf(val, [strt]) – locates val in a String by searching forward starting from strt index. To search backward use lastIndexOf(val,[strt])
length() - Returns the length of the String, in characters
remove(index,[count]) – remove all characters (or count caracters if given) from a String starting from index
replace(substring1, substring2) – Replace all instances of substring1 in a String to substring2
setCharAt(index, c) - Sets a character to c at index of the String
startsWith(string2) - Tests whether or not a String starts with the string2
substring(from, [to]) - Get a substring of a String, from - inclusive, to – exclusive
toInt() or toFloat() - Converts a valid String to an integer or float
toLowerCase() or toUpperCase() - Get a lower-case or upper-case version of a String
trim() - Get a version of the String with any leading and trailing whitespace removed
Слайд 18

Mathematical Operators

Mathematical Operators

Слайд 19

Comparing Character and Numeric Values

Comparing Character and Numeric Values

Слайд 20

Logical and Bitwise operators Logical operators Bitwise operators

Logical and Bitwise operators
Logical operators
Bitwise operators

Слайд 21

Combining Operations and Assignment

Combining Operations and Assignment

Слайд 22

Advanced Mathematical Operators

Advanced Mathematical Operators

Слайд 23

Other Useful Operators

Other Useful Operators

Слайд 24

Functions Functions are declared by first declaring the function type. This

Functions

Functions are declared by first declaring the function type. This is

the type of value to be returned by the function such as 'int' for an integer type function. If no value is to be returned the function type would be void. After type, declare the name given to the function and in parenthesis any parameters being passed to the function.

type functionName(parameters)
{
statements;
}

int delayVal()
{
int v; // create temporary variable 'v'
v = analogRead(pot); // read potentiometer value
v /= 4; // converts 0-1023 to 0-255
return v; // return final value
}

Слайд 25

Receiving Serial Data in Arduino Serial.available() - Get the number of

Receiving Serial Data in Arduino

Serial.available() - Get the number of bytes

(characters) available for reading from the serial port.
This is data that's already arrived and stored in the serial receive buffer (which holds 64 bytes)
Serial.read() - Reads incoming serial data
Serial.readBytes(buffer, length) - reads characters from the serial port into a buffer. The function terminates if the determined length has been read, or it times out
Слайд 26

Controlling Arduino int ledPin = 13; // choose a pin for

Controlling Arduino

int ledPin = 13; // choose a pin for LED
int

val = 0; // variable to store the data received via Serial port
void setup() {
pinMode(ledPin,OUTPUT); // make ledPin an output
Serial.begin(9600); // initialize the Serial port
}
void loop () {
// Serial.available() – is a method to see whether something is
// received or not via Serial port without pausing the main program
if( Serial.available() ) {
val = Serial.read(); // read the value received via Serial port
if( val == 'H' ) { // if ‘H’, then blink
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
}
}
Слайд 27

Tasks Part 1 Concatenate two strings (Name, Surname) with space between

Tasks Part 1

Concatenate two strings (Name, Surname) with space between them

and output to serial monitor
Find a number of spaces in a given text
Given a string “Name Surname Age”, divide it to 3 strings
Convert a String containing a number to a number
Write function that compares 2 numbers and returns -1 if ab
Write function that returns minimum number from an array of integers
Слайд 28

Tasks Part 2 Write function that sorts array of integers Read

Tasks Part 2

Write function that sorts array of integers
Read the number

N from Serial port and make LED blink N times
Read numbers N and M and return N to the power of M