第1步:輸入命令
這里要看看輸入命令。 Arduino上有兩種主要類型的引腳,數(shù)字I/O(輸入/輸出)和模擬輸入,數(shù)字引腳可以是輸入和輸出,模擬引腳是可以檢測(cè)電流電壓的特殊輸入。
PinMode
在我們使用任何傳感器或執(zhí)行器之前,我們需要告訴Arduino它們所在的引腳。
int sensorPin = A1;
Void setup(){
pinMode(sensorPin, INPUT);
}
這告訴Arduino引腳sensorPin上有一個(gè)輸入,它是一個(gè)代表數(shù)字A1的整數(shù)。我們這樣做的原因是因?yàn)槿绻捎谀撤N原因我們需要更改引腳數(shù),我們可以在頂部的一個(gè)位置更改它而不是通過(guò)整個(gè)代碼并且每次引用時(shí)都必須更改它。這個(gè)命令進(jìn)入Void設(shè)置,大多數(shù)命令進(jìn)入Void循環(huán),所以除非另有說(shuō)明,否則將它們放在那里。
數(shù)字讀取
這是最基本的輸入方式成為Arduino。信號(hào)阱為On或Off,用于檢測(cè)燈開關(guān)或按鈕的狀態(tài)。以下是如何使用它。
int DsensorVal = digitalRead(DsensorPin);
這將int DsensorVal指定為與DsensorPin相同的值。在這種情況下,它將是1或0,開或關(guān)。
模擬讀取
模擬讀取命令用于檢測(cè)Arduino的其中一個(gè)模擬引腳上的電壓。這用于連接任何發(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)在我們有來(lái)自傳感器的值,可以看看如何使用它們。
IF
是的我說(shuō)IF,IF命令是最重要的命令。它是我們的執(zhí)行器和傳感器之間的主要橋梁。這是它的使用方式。
if (a == b){
action here(We‘ll discuss this in the next step)
}
括號(hào)是我們放置要運(yùn)行的代碼的位置。 ==意味著等于,這必須是兩個(gè)等于因?yàn)橹挥幸粋€(gè)會(huì)使a = b并使其始終為真。 ==可以替換以下任何一種,
!=不等于
》大于
》 =大于或等于
《=小于或等于
所以如果a == b那么我們運(yùn)行括號(hào)。我們還可以有多個(gè)標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)
if ((a == b) && (a 《 c)){
}
現(xiàn)在我們添加了&&&這意味著AND,所以只要a == b AND a
這是最基本和最常用的控制命令。我們可以通過(guò)向它添加ELSE來(lái)進(jìn)一步采用此命令。這使得當(dāng)IF不活動(dòng)時(shí),ELSE就是。
if (a == b){
{
else{
}
現(xiàn)在當(dāng)IF為負(fù)數(shù)時(shí),ELSE括號(hào)中的任何內(nèi)容都會(huì)運(yùn)行。
數(shù)字
所以我們使用數(shù)字輸入的方式是這樣的。
If (DsenserVal == 1){
}
1與寫入HIGH相同。因此,當(dāng)DsenserPin上有3-5個(gè)伏特時(shí),您設(shè)置的動(dòng)作將會(huì)發(fā)生。有時(shí)按鈕設(shè)置為反向,因此當(dāng)按下按鈕時(shí)它等于0,如果是這樣,只需將1更改為0就可以了。
模擬
這就是它變得有趣的地方。
我們有正常的if命令。
if (AsensorVal 《 500){
}
如果IF正在檢查AsensorVal的值并對(duì)其做出反應(yīng),模擬信號(hào)更多地用于編輯機(jī)器人的響應(yīng)而不是使其響應(yīng)。我們還有幾個(gè)命令來(lái)編輯信號(hào),以便最終使用它。
Map
當(dāng)您需要更改時(shí),map命令很有用某個(gè)范圍的數(shù)字。所以說(shuō)我有一個(gè)300到500之間的int值,我想用它來(lái)控制180度的伺服,我可以使用這樣的命令
AsensorVal = map(AsensorVal, 300, 500, 0, 180);
現(xiàn)在該值是一個(gè)從0到180的數(shù)字,它介于300到500之間。所以想想一條200個(gè)單位長(zhǎng)的線,這會(huì)改變它,所以線條長(zhǎng)度相同,但現(xiàn)在只有180個(gè)單位長(zhǎng)。這需要很多復(fù)雜的數(shù)學(xué),但是Arduino背后的好人已經(jīng)很容易了。
約束
這個(gè)數(shù)字必須留在某些界限。所以,如果我這樣設(shè)置它。
AsensorVal = map(AsensorVal, 0, 180);
它現(xiàn)在只允許AsensorVal在0到180之間,如果它低于0然后它變成0,如果它在上面180它將它改為180,這些數(shù)字是它的最小值和最大值。
讓我們看看如何在下一步中使用執(zhí)行器。
步驟3:執(zhí)行器
因此,您希望了解如何使用執(zhí)行器,以及正確的步驟。
PinMode
是再次使用PinMode的地方,但是這次使用它來(lái)注冊(cè)O(shè)UTPUT。
void setup(){
pinMode(actuatorPin, OUTPUT);
}
現(xiàn)在我們已經(jīng)宣布ActuatorPin為輸出,所以現(xiàn)在我們可以用它作為一個(gè)。這是在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)入伺服庫(kù),然后我們將對(duì)象設(shè)為myServo。然后我們創(chuàng)建一個(gè)等于我們想要放置它的引腳的int。這必須是支持在Arduino板上標(biāo)記的PWM的特殊引腳。然后我們將myServo附加到我們?cè)O(shè)置的引腳上。將附加命令放在Void設(shè)置中。
現(xiàn)在我們進(jìn)行了這些設(shè)置,讓我們看看實(shí)際的輸出信號(hào)。
DigitalWrite
這是用于控制LED,Reley以及任何其他開啟或關(guān)閉的基本開/關(guān)輸出。
digitalWrite(actuatorPin, HIGH);
現(xiàn)在actuatorPin設(shè)置為高,所以任何東西都會(huì)開始運(yùn)行。要關(guān)閉它,我們使用。
digitalWrite(actuatorPin, LOW);
AnalogWrite
AnalogWrite命令用于控制電機(jī)速度,LED亮度等。大多數(shù)Arduinos沒(méi)有實(shí)際的模擬輸出,但他們能夠模仿它。它們具有特殊引腳,即PWN(脈沖寬度調(diào)制),可模擬模擬引腳。我們這樣控制它
analogWrite(actuatorPin, Amount);
actuatorPin是執(zhí)行器所在的銷釘。數(shù)量可以是0到255之間的數(shù)字。
myServo.write
讓我們使用一些伺服器。
myServo.write(Val);
首先我們告訴什么伺服,在這種情況下myServo。然后我們說(shuō)寫一個(gè)介于0和180之間的值。就像你移動(dòng)的伺服器一樣。
步驟4:調(diào)試
它的變化很重要能夠調(diào)試腳本。這樣做的方法是通過(guò)與Arduino建立一個(gè)串行連接,然后告訴它何時(shí)到達(dá)某些點(diǎn)。您可以通過(guò)進(jìn)入IDE并按下右上角的按鈕并打開放大鏡來(lái)打開串行監(jiān)視器。
Serial.begin
第一步是像這樣開始我們的串行連接
Serial.begin(9600);
這就是Void設(shè)置。這個(gè)數(shù)字是波特率,暫時(shí)保留在9600。
Serial.print
以下是我們?cè)谳斎胫械拇蛴》绞?/p>
Serial.print(“Hello world”);
Serial.print(AsensorVal);
第一個(gè)將Hello World打印到串行監(jiān)視器中。第二個(gè)打印模擬輸入的值。
Serial.println
Serial.println與Serial.print相同但它開始一個(gè)新行用它。所以,例如。如果我使用Serial.print命令繼續(xù)打印3,它將收到333333333333.現(xiàn)在,如果我們使用Serial.println打印它,它將收到它
3
3
3
明白了。
第5步:示例
在這里,我將向您展示一個(gè)腳本,顯示我們學(xué)到的一切。如果要構(gòu)建它,請(qǐng)按照頂部的原理圖進(jìn)行操作。左邊的電位器是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:謝謝
沒(méi)有進(jìn)一步的麻煩,我必須告別你再見并感謝您的閱讀。我希望這里的信息是有道理的。
-
Arduino
+關(guān)注
關(guān)注
188文章
6490瀏覽量
190047
發(fā)布評(píng)論請(qǐng)先 登錄
SL4011芯片USB的5V升9V 5V升12V 內(nèi)置MOS管 性價(jià)比解決方案
ADS8558輸入負(fù)5V時(shí)轉(zhuǎn)換結(jié)果是多少?正5V時(shí)是多少?
EE-39:將5V閃存與ADSP-218x接口(字節(jié)編程算法)

EE-103:在5V和3.3V IC之間執(zhí)行電平轉(zhuǎn)換

使用帶時(shí)鐘輸出的TPS51103EVM集成3.3V/5V電源LDO

5V過(guò)壓保護(hù)電路的原理分析

隔離式40Mbps、3.3V至5V Profibus接口

5V TVS型號(hào),怎么選好?

具有3.3V/5V輸入和12V/15V輸出的信號(hào)和電源隔離

航天級(jí)100krad可編程負(fù)電壓源(–5V至0V)電路

將5V傳感器和信號(hào)連接到3.3V輸入SAR ADC

評(píng)論