第1步:輸入命令
這里要看看輸入命令。 Arduino上有兩種主要類型的引腳,數(shù)字I/O(輸入/輸出)和模擬輸入,數(shù)字引腳可以是輸入和輸出,模擬引腳是可以檢測電流電壓的特殊輸入。
PinMode
在我們使用任何傳感器或執(zhí)行器之前,我們需要告訴Arduino它們所在的引腳。
int sensorPin = A1;
Void setup(){
pinMode(sensorPin, INPUT);
}
這告訴Arduino引腳sensorPin上有一個輸入,它是一個代表數(shù)字A1的整數(shù)。我們這樣做的原因是因為如果由于某種原因我們需要更改引腳數(shù),我們可以在頂部的一個位置更改它而不是通過整個代碼并且每次引用時都必須更改它。這個命令進入Void設(shè)置,大多數(shù)命令進入Void循環(huán),所以除非另有說明,否則將它們放在那里。
數(shù)字讀取
這是最基本的輸入方式成為Arduino。信號阱為On或Off,用于檢測燈開關(guān)或按鈕的狀態(tài)。以下是如何使用它。
int DsensorVal = digitalRead(DsensorPin);
這將int DsensorVal指定為與DsensorPin相同的值。在這種情況下,它將是1或0,開或關(guān)。
模擬讀取
模擬讀取命令用于檢測Arduino的其中一個模擬引腳上的電壓。這用于連接任何發(fā)出電壓作為數(shù)據(jù)的傳感器,例如光依賴電阻,微調(diào)電位器,溫度傳感器等。
Int AsensorVal = analogRead(AsensorPin);
這將int AsensorVal分配給AsensorPin上的電壓。根據(jù)0到5伏特之間的電壓,這將是介于0和1023之間的值。 1.25v = 256,2.5v = 512,3.25v = 768。
我們將在下一步中看到如何使用這些。
步驟2:如何使用輸入值
現(xiàn)在我們有來自傳感器的值,可以看看如何使用它們。
IF
是的我說IF,IF命令是最重要的命令。它是我們的執(zhí)行器和傳感器之間的主要橋梁。這是它的使用方式。
if (a == b){
action here(We‘ll discuss this in the next step)
}
括號是我們放置要運行的代碼的位置。 ==意味著等于,這必須是兩個等于因為只有一個會使a = b并使其始終為真。 ==可以替換以下任何一種,
!=不等于
》大于
》 =大于或等于
《=小于或等于
所以如果a == b那么我們運行括號。我們還可以有多個標(biāo)準(zhǔn)來實現(xiàn)
if ((a == b) && (a 《 c)){
}
現(xiàn)在我們添加了&&&這意味著AND,所以只要a == b AND a
這是最基本和最常用的控制命令。我們可以通過向它添加ELSE來進一步采用此命令。這使得當(dāng)IF不活動時,ELSE就是。
if (a == b){
{
else{
}
現(xiàn)在當(dāng)IF為負數(shù)時,ELSE括號中的任何內(nèi)容都會運行。
數(shù)字
所以我們使用數(shù)字輸入的方式是這樣的。
If (DsenserVal == 1){
}
1與寫入HIGH相同。因此,當(dāng)DsenserPin上有3-5個伏特時,您設(shè)置的動作將會發(fā)生。有時按鈕設(shè)置為反向,因此當(dāng)按下按鈕時它等于0,如果是這樣,只需將1更改為0就可以了。
模擬
這就是它變得有趣的地方。
我們有正常的if命令。
if (AsensorVal 《 500){
}
如果IF正在檢查AsensorVal的值并對其做出反應(yīng),模擬信號更多地用于編輯機器人的響應(yīng)而不是使其響應(yīng)。我們還有幾個命令來編輯信號,以便最終使用它。
Map
當(dāng)您需要更改時,map命令很有用某個范圍的數(shù)字。所以說我有一個300到500之間的int值,我想用它來控制180度的伺服,我可以使用這樣的命令
AsensorVal = map(AsensorVal, 300, 500, 0, 180);
現(xiàn)在該值是一個從0到180的數(shù)字,它介于300到500之間。所以想想一條200個單位長的線,這會改變它,所以線條長度相同,但現(xiàn)在只有180個單位長。這需要很多復(fù)雜的數(shù)學(xué),但是Arduino背后的好人已經(jīng)很容易了。
約束
這個數(shù)字必須留在某些界限。所以,如果我這樣設(shè)置它。
AsensorVal = map(AsensorVal, 0, 180);
它現(xiàn)在只允許AsensorVal在0到180之間,如果它低于0然后它變成0,如果它在上面180它將它改為180,這些數(shù)字是它的最小值和最大值。
讓我們看看如何在下一步中使用執(zhí)行器。
步驟3:執(zhí)行器
因此,您希望了解如何使用執(zhí)行器,以及正確的步驟。
PinMode
是再次使用PinMode的地方,但是這次使用它來注冊O(shè)UTPUT。
void setup(){
pinMode(actuatorPin, OUTPUT);
}
現(xiàn)在我們已經(jīng)宣布ActuatorPin為輸出,所以現(xiàn)在我們可以用它作為一個。這是在Void設(shè)置中。
myServo.attach
我不打算離開伺服系統(tǒng),不用擔(dān)心。伺服系統(tǒng)需要更多設(shè)置,但仍然很容易。
#include
Servo myServo; # Makes a servo object
Int servoPin = 9; # The number for this has to one of these pins, 11, 10, 9, 6, 5, 3.
Void setup(){
myServo.attach(servoPin); # Attaching the servo to servoPin, which is equal to 9;
}
首先我們導(dǎo)入伺服庫,然后我們將對象設(shè)為myServo。然后我們創(chuàng)建一個等于我們想要放置它的引腳的int。這必須是支持在Arduino板上標(biāo)記的PWM的特殊引腳。然后我們將myServo附加到我們設(shè)置的引腳上。將附加命令放在Void設(shè)置中。
現(xiàn)在我們進行了這些設(shè)置,讓我們看看實際的輸出信號。
DigitalWrite
這是用于控制LED,Reley以及任何其他開啟或關(guān)閉的基本開/關(guān)輸出。
digitalWrite(actuatorPin, HIGH);
現(xiàn)在actuatorPin設(shè)置為高,所以任何東西都會開始運行。要關(guān)閉它,我們使用。
digitalWrite(actuatorPin, LOW);
AnalogWrite
AnalogWrite命令用于控制電機速度,LED亮度等。大多數(shù)Arduinos沒有實際的模擬輸出,但他們能夠模仿它。它們具有特殊引腳,即PWN(脈沖寬度調(diào)制),可模擬模擬引腳。我們這樣控制它
analogWrite(actuatorPin, Amount);
actuatorPin是執(zhí)行器所在的銷釘。數(shù)量可以是0到255之間的數(shù)字。
myServo.write
讓我們使用一些伺服器。
myServo.write(Val);
首先我們告訴什么伺服,在這種情況下myServo。然后我們說寫一個介于0和180之間的值。就像你移動的伺服器一樣。
步驟4:調(diào)試
它的變化很重要能夠調(diào)試腳本。這樣做的方法是通過與Arduino建立一個串行連接,然后告訴它何時到達某些點。您可以通過進入IDE并按下右上角的按鈕并打開放大鏡來打開串行監(jiān)視器。
Serial.begin
第一步是像這樣開始我們的串行連接
Serial.begin(9600);
這就是Void設(shè)置。這個數(shù)字是波特率,暫時保留在9600。
Serial.print
以下是我們在輸入中的打印方式
Serial.print(“Hello world”);
Serial.print(AsensorVal);
第一個將Hello World打印到串行監(jiān)視器中。第二個打印模擬輸入的值。
Serial.println
Serial.println與Serial.print相同但它開始一個新行用它。所以,例如。如果我使用Serial.print命令繼續(xù)打印3,它將收到333333333333.現(xiàn)在,如果我們使用Serial.println打印它,它將收到它
3
3
3
明白了。
第5步:示例
在這里,我將向您展示一個腳本,顯示我們學(xué)到的一切。如果要構(gòu)建它,請按照頂部的原理圖進行操作。左邊的電位器是pot1,控制伺服,右邊的電位器是pot2,控制LED的亮度。按鈕控制LED是打開還是關(guān)閉。
#include
Servo myServo; // Registering our Servo
int servoPin = 9; // The Pin our Servo is on
int lightPin = 3; // The Pin our LED is on
int potPin1 = A1; // The Pin our Potentiometer that controls the Servo is on
int potPin2 = A0; // The Pin our Potentiometer that controls the LED is on
int buttPin = 6; // The Pin our Button is on
void setup(){
myServo.attach(servoPin); // Attaching our servo
pinMode(lightPin, OUTPUT); // Registering our LED Pin as a Output
pinMode(potPin1, INPUT); // Registering our Servo Potentiometer Pin as a Input
pinMode(potPin2, INPUT); // Registering our LED Potentiomerer Pin as a Input
pinMode(buttPin, INPUT); // Registering our Button Pin as a Input
Serial.begin(9600); // Starts the Serial communacation
}
void loop(){
int pot1Val = analogRead(potPin1); // Gets Pot1’s current value
pot1Val = map(pot1Val, 200, 823, 0, 180); // Mapping it so that it removes the beginning and the end of the Pots range
pot1Val = constrain(pot1Val, 0, 180); // Insures that the Servo Input stays between 0 and 180
myServo.write(pot1Val); // Makes the servo move to the current location
Serial.print(“Pot1 value is: ”); // Starts printing in Debug Info
Serial.println(pot1Val); // It‘s now set up so it will say “Pot1 value is: (Current Value)”
int pot2Val = analogRead(potPin2); // Gets Pot2’s current value
pot2Val = map(pot2Val, 0, 1023, 0, 255); // Maps it accordingly
Serial.print(“Pot2 value is: ”); // starts printing in Debug Info
Serial.println(pot2Val); // It will say “Pot2 value is: (Current Value)”
int button = digitalRead(buttPin); // Gets the state of the Button
if(button == 1){ // The way the buttons is set up, 1 means it is being pressed
analogWrite(lightPin, pot2Val); // If its true then turn on the led at this brightness
}
else{ // Else
digitalWrite(lightPin, LOW); // If ELSE is true, which means IF is false, then turn off led
}
delay(50); // Makes a small delay so it isn‘t running every millisecond.
}
步驟6:謝謝
沒有進一步的麻煩,我必須告別你再見并感謝您的閱讀。我希望這里的信息是有道理的。
-
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187641
發(fā)布評論請先 登錄
相關(guān)推薦
評論