TCweng生活大小事,生活尬小事
愛體驗認證
2019年8月7日 星期三
for - arduino程式語法參考_TCweng
for
for 迴圈通常用來執行一連串的重複動作,且配合一個計數器來判斷何時停止這個迴圈的動作,因齊因其擁有重複執行動作的特性,也常被用來處理陣列的資料
for ( 定義計數器,結束條件,計數器計算 ){
}
for ( int a = 1 , a<500 , a++){
Serial.println(a);
}
以上程式會在序列埠中依序顯示出1~500的數字,也就是說a小於500時,for迴圈裡的程式就會一直被執行,而且執行一次a就會加一
回總攬
https://tcweng.blogspot.com/2019/08/arduinotcweng.html
if...else - arduino程式語法參考_TCweng
if...else
if...else 程式在執行時更細微的區分相對應數值的執行動作,例如當x值大於50時要讓燈泡保持明亮,而低於50時則關閉燈泡,程式可以這樣寫
if (x > 50){
digitalWrite(13,HIGH);
}
else{
digitalWrite(13,LOW);
}
甚至近一步區分x值是在25~50的區間要使燈泡閃爍,可以添加else if 程式,來進一步判斷x值的大小
if (x > 50){
digitalWrite(13,HIGH); //高於50時,保持燈泡明亮
}
else if (x>25){
digitalWrite(13,HIGH); //25~50區間時,讓燈泡閃爍
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}
else{
digitalWrite(13,LOW); //低於25,讓燈泡保持關閉
}
回總攬
https://tcweng.blogspot.com/2019/08/arduinotcweng.html
if - arduino程式語法參考_TCweng
if (條件)
if 配合條件,可以用來判斷某一段程式執行的時機,例如要在x值大於100的時候讓13腳位保持高電位,讓燈泡亮起,那程式可以這樣寫
if(x>100){
digitalWrite(13,HIGH);
}
而 if 條件式存在新手非常容易犯的錯誤!!!!在 if (條件) 裡,不能出現
if (x=60)
這樣的語法,因為這樣會導致x直接變成60,而不是判斷x是否為60,所以要這樣寫才對
if (x==60)
回總攬
https://tcweng.blogspot.com/2019/08/arduinotcweng.html
loop() - arduino程式語法參考_TCweng
loop()
在Arduino通電並執行完setup()迴圈裡的程式後,便會換成執行loop()迴圈裡的程式,而且這個迴圈裡的程式便會一直重複執行
範例:
int Pin = 3;
void setup(){
Serial.begin(9600);
pinMode(Pin, INPUT);
}
void loop(){
digitalWrite(Pin,HIGH);
delay(1000);
digitalWrite(Pin,LOW);
delay(1000);
}
以上執行時,3號腳位會間隔一秒執行高電壓和低電壓的交替輸出,如果在3號腳位插上一顆燈泡,也就會是間隔一秒的亮跟暗
回總攬
https://tcweng.blogspot.com/2019/08/arduinotcweng.html
setup() - arduino程式語法參考_TCweng
setup()
在"setup"迴圈裡,程式只會在Arduino通電時執行一次,因此腳位的定義(輸入,輸出),感應器的初始化設定通常在這裡執行
閱讀更多 »
360度連續旋轉伺服馬達_TCweng
360度連續旋轉伺服馬達(MG 996R)教學
之前在這篇 伺服馬達(Tower Pro SG90) 教學
https://tcweng.blogspot.com/2019/08/tower-pro-sg90-tcweng.html
中,就有提到如何四步驟記清楚控制伺服馬達控制的技巧,不論是哪一種伺服馬達基本上都是一樣,這次可360度旋轉的伺服馬達也不例外
那為何還要寫這篇文章呢??
因為要進一步地跟大家說明"
連續旋轉的伺服機
"和"
一般限制180度的伺服機
"
控制
上有和些微的不同,如果有自己先用上一篇文章的程式實驗過的讀者就知道,連續旋轉的伺服機會一直旋轉停不下來的問題,甚至某些時候還會反過來轉,那為何會這樣呢?
在同一個程式裡,面對兩種的伺服機,myservo.write(i); 這句話代表著兩種不同的含意,在180度限制的伺服機裡,這句話直接告訴伺服機要轉到哪裡,也就是說你叫他轉到90度,他就轉到90度,而連續旋轉的伺服機就不一樣了,myservo.write(i); 這句話是命令他的
速度
,所以你在程式裡面要讓他轉到某一個位置時,就不能直接命令他要到哪個角度,而是要給他一個速度和時間,讓他轉到你要的位置
舉個例子:
#include <Servo.h>
Servo myservo; // 建立Servo物件
void setup()
{
myservo.
attach
(9); // 伺服馬達的訊號線
}
void loop()
{
myservo.
write
(60);
delay(600);
myservo.
write
(90);
}
前面的語法跟普通伺服馬達一模一樣,不一樣的是在loop迴圈裡面,命令他以"60"的速度旋轉0.6秒後停下來的意思
在速度的部分
正轉是0~89之間
反轉是91~180之間
而要讓馬達停下來就是90
當然每個馬達都可以能有誤差
可能要寫到92,93他才會處於暫停的狀態
接線一樣是棕色(黑)接到arduino的GND,紅色接到5V,橘色接到arduino的9號
下圖兩種馬達長的一模一樣,但有一顆是360度旋轉的,有一顆是180度限制旋轉的,所以在購買的時候要看清楚,才不會買到自己不需要的形式
伺服馬達(Tower Pro SG90) 教學_TCweng
伺服馬達 (Tower Pro SG90) 教學
伺服馬達也可以叫做伺服機,常常用來製作舵機....等等
而關於轉速,扭矩,角度範圍,就得依據不同廠商的商品而定,並不是每一家廠商的伺服機都一模一樣,但大部分的伺服機都似在0~180度的範圍,甚至還有360度旋轉的伺服機
至於怎麼控制伺服機這件事情,就比選擇伺服機還要來的簡單,因為不管是一般180度限制範圍旋轉的伺服機或是可以360度不同旋轉的伺服機,用的語法幾乎一模一樣只有用的時間點的不同
360度旋轉的伺服機可以到這個網址參考:
https://tcweng.blogspot.com/2019/08/360tcweng.html
底下直接給一個程式當作例子:
#include <Servo.h>
Servo myservo; // 建立Servo物件
void setup()
{
myservo.attach(9); // 伺服馬達的訊號線接腳
}
void loop()
{
for(int i = 0; i <= 180; i+=1){
myservo.write(i); // 使用write,告訴伺服機角度,從0度轉到180度
delay(20);
}
for(int i = 180; i >= 0; i-=1){
myservo.write(i);// 使用write,告訴伺服機角度,從180度轉到0度
delay(20);
}
}
上面這個程式是較伺服機從0轉到180度,再從180度反轉回來,如此反覆,而從這個程式裡面我們可以分解出四大部分,每次只要記住這四個步驟,操控伺服機就沒什麼問題了
第一步就是呼叫我們的 函示庫
#include <Servo.h>
第二步是建立一個伺服機物件
Servo myservo;
以上這兩句都必須要在void setup() 之前
第三步定義伺服機接腳,表示伺服機訊號線接到9號的意思
myservo.attach(9);
最後一步就是告訴伺服機要轉到哪裡啦~~
所以這句話放在哪裡都可以,只要在myservo.attach(9);這句話之後就沒問題了
接線的部分
棕色(黑色)接到arduino的GND
紅色就是arduino的5V(大部分)
而橘色或是其他顏色的線就是我們的訊號線
範例裡面我們接到9號的位置
最後再舉個例子複習一下:
#include <Servo.h>
Servo myservo; // 建立Servo物件
void setup()
{
myservo.attach(9); // 伺服馬達的訊號線接腳
myservo.write(180);// 使用write,告訴伺服機轉到180度
}
void loop() {
delay(2000);//延遲兩秒
myservo.write(0); // 使用write,告訴伺服機轉到0度
}
補充伺服機控制的小知識:
一般伺服機透過訊號線傳送PWM脈波來控制旋轉角度,而這個訊號必須每秒重複50次(50Hz),而訊號持續的長短便代表了伺服機該轉動到什麼位置,假設範圍從1.0ms到2.0ms(millisecond,毫秒,千分之一秒),則中間值是1.5ms;那1.0ms就是角度0度,1.5ms就是90度,2.0ms則是轉到底180度。
使用前也必須先了解伺服機電壓,以及最大旋轉角度...等等,如果超出了範圍,可能導致伺服機的損壞
較新的文章
較舊的文章
首頁
訂閱:
意見 (Atom)