序列傳輸(串列傳輸)
序列埠通信一般是指通用異步接收器/發送器(UART),常用於電子電路通信之中,使用兩條通信線,一條負責發送數據(TX 線),另一條負責接收數據(RX 線)。 兩台設備的序列埠通訊連接如左圖。
在序列埠通信開始之前,兩方必先約定號通訊的速度就式的鮑率(Baud Rate)。
只有使用相同的鮑率,設備之間的通信才能進行。 常用的鮑率是 9600 和 115200。
以UNO板子上的序列通訊模式與腳位
圖片來源:https://www.electroschematics.com/
序列監控窗的操作 <網路硬碟>
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
Serial.println(Serial.read());
}
}
序列監控窗的字元 1 >> 點亮內建LED,0>>熄滅內建LED
#define LED 2
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
}
void loop() {
int x;
if (Serial.available()) {
x = Serial.read();
Serial.write(x);
Serial.print(" ascii= ");
Serial.println(x);
if (x == 49) { // 字元'1'=49 ,"字串"
digitalWrite(LED, HIGH);
Serial.println("LED ON ");
}
if (x =='0') { // 字元 '0'=48 ,"字串"
digitalWrite(LED, 0);
Serial.println("LED OFF ");
}
Serial.println("-----------------");
}
}
請設定沒有行結尾,不然會出現結尾訊息。
輸入 1 後按下傳送
等待 MCU接受回應 點亮LED >>LED ON
輸入 0 後按下傳送
等待 MCU接受回應 熄滅LED >>LED OFF
輸入其他字元 只顯示 ASCII的10進制編號,不會有LED的動作
序列監控窗 (控制七段顯示器輸出 0-9 ), 1 >> 點亮內建LED,0>>熄滅內建LED
// p, g, f, e, d, c, b, a 七段顯示函數
char segpin[]={27,32,33,17,16,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,1 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,1,0,0,0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
#define LED 2
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
for(int i=1;i<8;i++)
digitalWrite(segpin[i], 1);
}
void loop() {
int x;
if (Serial.available()) {
x = Serial.read();
Serial.write(x);
Serial.print(" ascii= ");
Serial.println(x);
if (x == '1') {
digitalWrite(LED, HIGH);
Serial.println("LED ON ");
sevenSegWrite(1);
}
if (x == '0') {
digitalWrite(LED, 0);
Serial.println("LED OFF ");
sevenSegWrite(0);
}
Serial.println("-----------------");
if (x == '2') {
sevenSegWrite(2);
}
Serial.println("-----------------");
if (x == '3') {
sevenSegWrite(3);
}
Serial.println("-----------------");
if (x == '4') {
sevenSegWrite(4);
}
Serial.println("-----------------");
if (x == '5') sevenSegWrite(5);
if (x == '6') sevenSegWrite(7);
}//if (Serial.available())
}//void loop() {
序列傳輸(串列傳輸給七段顯示器)
程式整合
// p, g, f, e, d, c, b, a 七段顯示函數
char segpin[]={27,32,33,13,12,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,1 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,1,0,0,0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
void setup() {
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
}
void loop() {
sevenSegWrite(要顯示的內容);
// p, g, f, e, d, c, b, a 七段顯示函數 (舊的)
char segpin[]={27,32,33,13,12,14,26,25};
// p,g,f,e,d,c,b,a 共陽極
byte seven_seg_digits[][8] = { { 1,1,0,0,0,0,0,0 }, // = 0
{ 1,1,1,1,1,0,0,1 }, // = 1
{ 1,0,1,0,0,1,0,0 }, // = 2
{ 1,0,1,1,0,0,0,0 }, // = 3
{ 1,0,0,1,1,0,0,1 }, // = 4
{ 1,0,0,1,0,0,1,0 }, // = 5
{ 1,0,0,0,0,0,1,1 }, // = 6
{ 1,1,1,1,1,0,0,0 }, // = 7
{ 1,0,0,0,0,0,0,0 }, // = 8
{ 1,0,0,1,1,0,0,0 } // = 9
};
// 在七段顯示器上顯示指定的一個數字
void sevenSegWrite(byte digit) {
for (byte seg = 0; seg <8; ++seg)
digitalWrite(segpin[seg], seven_seg_digits[digit][seg]);// 共陽極 // digitalWrite(segpin[seg], !seven_seg_digits[digit][seg]);// 共陰極
}
#define LED 2
void setup() {
Serial.begin(9600);
pinMode(LED, OUTPUT);
for(int i=0;i<8;i++){
pinMode(segpin[i], OUTPUT);
digitalWrite(segpin[i], 0);
}
delay(2000);
}
void loop() {
int x;
if (Serial.available()) {
x = Serial.read();
Serial.write(x);
Serial.print(" ascii= ");
Serial.println(x);
if (x == '1') {
digitalWrite(LED, HIGH);
Serial.println("LED ON ");
sevenSegWrite(1);
}
if (x == '0') {
digitalWrite(LED, 0);
Serial.println("LED OFF ");
sevenSegWrite(0);
}
Serial.println("-----------------");
if (x == '2') {
sevenSegWrite(2);
}
Serial.println("-----------------");
if (x == '3') {
sevenSegWrite(3);
}
Serial.println("-----------------");
}//if (Serial.available())
}//void loop() {
I2C掃描程式(偵測周邊的I2C裝置位置, // sda= GPIO_21 /scl= GPIO_22)
//ESP32
#include <Wire.h>
void setup()
{
Serial.begin (115200);
Wire.begin (21, 22); // sda= GPIO_21 /scl= GPIO_22
}
void Scanner ()
{
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i); // Begin I2C transmission Address (i)
if (Wire.endTransmission () == 0) //0=success(ACK response)
{
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX); // PCF8574 7 bit address
Serial.println (")");
count++;
}
}
Serial.print ("Found ");
Serial.print (count, DEC); // numbers of devices
Serial.println (" device(s).");
}
void loop()
{
Scanner ();
delay (5000);
}