一、硬體分類:
Mega2560:三角州列印機,特點:介面特別多;
UNO:介面少;
Nano:微型;
二、拓展板:
esp8266,GSM shield,Ethernet
三、IDE(VS,DEV):
Arduino官方的:沒有代碼補全,例程不完整,大專案組織復雜;
樂智:圖形化界面;
四、編程:
開發語言:c/c++,語法符號/關鍵字等都繼承于C/C++;
常量:HIGH/LOW–>1/0 INPUT/OUTPUT 表示I/O引腳的方向;
1、程式介面:
// 宣告LED為3引腳
int LED = 3;
/**
* 在程式開始的時候執行一次,作用:宣告變數和引腳還有其他的初始化操作
* 作者:xxx
* 時間:xxx
* 開發環境:xxx
* 描述:Arduino初始化方法
*/
void setup(){
pinMode(LED,OUTPUT);
}
// 回圈執行,Arduino程式的主體
void loop(){
digitalWrite(LED,HIGH);
}
2、關于引腳的操作:
2.1 配置引腳:
告訴Arduino你用了哪些引腳:
pinMode(pin,mode);//pin表示要配置的引腳,mode表示該引腳的模式INPUT/OUTPUT,放在setup里
2.2 數字量:
digitalWrite(pin,value); //pin表示要設定的引腳,value表示要輸出的電壓;
digitalRead(pin);//pin要讀的引腳;
2.3 模擬量:
analogRead(pin); //讀取引腳模擬量電壓值,每次讀取需要100us的時間,回傳int
analogWrite(pin,value); //輸出一個PWM方波;調整LED亮度,直流電機速度;舵機角度
3、時間函式:
- delay(1000) 延時1s ,以毫秒為單位;
void setup(){
初始化
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop(){
// 回圈控制變數
int i;
// 回圈控制四個燈
for(i = 6; i <= 9; i++){
digitalWrite(i,HIGH);
//延時1s
delay(1000);
digitalWrite(i,LOW);
delay(1000);
}
}
2.delayMicroseconds(),和delay()相同,但是以微秒為單位;
3.millis(),獲取單片機從通電到運行時的時間長度,以毫秒為單位;
int VOICE = 10;
int TIME_VOICE = 10000;
unsigned long i,j;
void setup(){
pinMode(VOICE,INPUT);
i = millis(); 初始時間值
}
void loop(){
//假設VOICE為高電平,代表語音識別有反饋
int flag = digitalRead(VOICE);
if (flag == LOW) {
j = millis(); //獲取當前時間
if (j > TIME_VOICE) {
// TODO 其他識別:機器視覺
} else {
// 不做處理,回圈讀語音
}
} else {
// TODO 垃圾分類操作
}
}
4.micros() 以微秒為單位;
五、中斷:
概念:計算機/單片機執行程序中出現了某些情況,需要主機/微處理器干預的情況下,機器能夠自動停止正在執行的程式并且轉入處理新程式,執行完畢又回傳到原來被暫停的程式繼續執行;
中斷源:引起中斷
中斷服務子程式:轉向去處理的突發狀況
主程式:現行程式
attchinterrupt(中斷源,中斷服務子程式,觸發模式);
//中斷源:0/1 ---> 2/3引腳
//中斷服務程式:其實就是一個函式,用函式來執行服務子程式
//觸發模式:
// LOW:低電平觸發
// CHANGE:變化觸發
// RISING:上升沿觸發
// FALLING:下降沿觸發
volatile int state1 = LOW, state2 = LOW;
int LED1 = 4;
int LED2 = 5;
int LED3 = 13;
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
attchinterrupt(0,LED1_Change,LOW);
attchinterrupt(1,LED2_Change,CHANGE);
}
//主程式
void loop(){
digitalWrite(LED3,HIGH);
delay(500);
digitalWrite(LED3,LOW);
delay(500);
}
//中斷服務子程式
void LED1_Change(){
state1 = !state1;
digitalWrite(LED1,state1);
delay(100);
}
//中斷服務子程式
void LED2_Change(){
state1 = !state1;
digitalWrite(LED2,state1);
delay(100);
}
六、串口:
概念:使資料一位一位地順序傳送,特點是通信線路簡單;
Serial.begin(波特率) //設定串口的波特率(資料傳輸地速度,記住雙向通信時波特率要一致,9600,19200,57600,115200)
Serial.available() //用來判斷串口是否收到資料,回傳值為int if(Serial.available > 0){}
Serial.read() // 將串口的資料讀進來 回傳值也是int
Serial.print(資料,資料型別(可選,DEC,HEX)) //串口發送資料,
Serial.println()
int x = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
//是否收到串口資料
if(Serial.available()){
x =Serial.read();
Serial.print("received");
Serial.println(x,DEC);
}
delay(200);
}
串口中斷
void setup(){
Serial.begin(9600);
//把I/O引腳4接到引腳2上,低電平觸發
attachinterrupt(0,SET_FIRST,LOW);
pinMode(4,OUTPUT);
}
void loop(){
//是否接受到串口資料
if(Serial.availble()){
x=Serial.read();
}
delay(200);
if(x==1){
//觸發中斷
digitalWrite(4,LOW);
}
}
void SET_FIRST(){
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/139843.html
標籤:其他
上一篇:我發覺他們論文更注重仿真
