步驟1:RaspberryPi電路
您將需要一種將RaspberryPi線路連接到面包板的方法。您可以使用公/母跳線,但是本頁(yè)上列出的Adafruit的Pi補(bǔ)鞋匠將使其變得更容易:http://www.adafruit.com/search?q=cobbler
對(duì)于您還將需要的RaspberryP電路:
RaspberryPi
面包板
跳線
2-LED,我用了一個(gè)紅色和綠色。
2-330-560歐姆電阻,用于LED。
1-按鈕開(kāi)關(guān)
1-10K電阻,下拉電阻用于開(kāi)關(guān)。
使用這些部件復(fù)制上圖中的電路。
除了http://www.adafruit上Adafruit的電阻器外,您還可以獲取所需的一切。 .com/
或在Sparkfun上https://www.sparkfun.com/
Sparkfun還提供了一個(gè)不錯(cuò)的電阻器組合,其中包括您需要的每個(gè)電阻值中的25個(gè),您可以在這里https://www.sparkfun.com/products/10969。
第2步:Arduino電路
第一個(gè)Arduino使用了從RaspberryPi調(diào)用的pinMode(),digitalRead(),digitalWrite(),analogRead()和pwmWrite()函數(shù)。這是我知道將最簡(jiǎn)單的方法添加到RaspberryPi的模數(shù)轉(zhuǎn)換器。請(qǐng)注意,connectionPi使用pwmWrite而不是AnalogWrite,它更準(zhǔn)確。
第二個(gè)Arduino只是在RaspberryPi的控制下,閃爍了13針上的內(nèi)置LED。這只是表明它確實(shí)可以控制多個(gè)Arduino。它還顯示了connectionPi的多線程功能的很好但簡(jiǎn)單的使用。
如果只有一個(gè)Arduino,您仍然可以嘗試該程序,第5步是使用一個(gè)arduino的程序。
我在原型屏蔽板上構(gòu)建了Arduino電路,但我展示了
對(duì)于Arduino電路,您將需要:
2-Arduinos
2-連接到的USB電纜RaspberryPi
面包板
跳線
2-LED,我使用了一個(gè)紅色和一個(gè)綠色。
2-330-560歐姆電阻,用于LED。
1-按鈕開(kāi)關(guān)
1-電阻傳感器
2-10K電阻,開(kāi)關(guān)和傳感器的下拉電阻。
使用這些部件復(fù)制上圖中的電路。
我在電阻傳感器中使用了力敏電阻,但是光電管或彎曲傳感器也能正常工作。您也可以使用電位計(jì)。要為電位器接線,請(qǐng)忘掉10K電阻,將中間引線連接到該引腳,一端引線連接到正極軌,另一端接地。
步驟3:代碼
為您的RaspberryPi下載此程序。
使用以下命令對(duì)其進(jìn)行編譯:
gcc -o DRCtest DRCtest.c -lwiringPi -lpthread
并使用以下命令運(yùn)行它:
sudo 。/DRCtest
/************************************************************************
* DRCtest.c - Test program for Drogon Remote Control. (DRC)
*
* On the first Arduino:
* LEDs are connected to pins nine and eleven, with 560 Ohm current limiting resistors.
* A push button switch is connected to pin five, with a 10K pull-down resistor.
* A resistive sensor is connected to analog pin zero, with a 10K pull-down resistor.
* The only connection to the RaspberryPi is the USB cable.
* The program in the RaspberryPi is controling the Arduino.
* The DRC.ino program must be installed and running.
*
* Nothing is connected to the second Arduino.
*
* On the RaspberryPi:
* LEDs are connected to pins nine and eleven, with 560 Ohm current limiting resistors.
* A push button switch is connected to pin five, with a 10K pull-down resistor.
* The pin numbers for the RaspberryPi use the wiringPi pin numbering scheme.
*
* The loop() function does a digitalRead of the push button on the Arduino
* and digitalWrites the value to the both red LEDs
* Next it performs an analogRead of the force sensitive resistor, divides
* the value by four, and pwmWrites the value to both green LEDs.
* Then is does a digitalRead of the push button on the RaspberryPi
* and digitalWrites the value to the both red LEDs
*
************************************************************************/#include
#include
#include
#define BASE 100
#define BASE2 200/*****************************************************************************
* The second thread blinks the built in LED on pin 13 of the Second Arduino.
* The code here runs concurrently with the main program in an infinite loop.
*****************************************************************************/
PI_THREAD(arduino2)
{
for(;;)
{
digitalWrite(BASE2+13, HIGH); // Turn pin 13 on.
delay(500);
digitalWrite(BASE2+13, LOW); // Turn pin 13 off.
delay(500);
}
}/**************************************************************************
* setup() function
**************************************************************************/
void setup(void)
{
wiringPiSetup();
drcSetupSerial(BASE, 20, “/dev/ttyACM0”, 115200);
drcSetupSerial(BASE2, 20, “/dev/ttyACM1”, 115200);
int x = piThreadCreate(arduino2); // Start second thread.
if (x != 0) printf(“It didn‘t start. ”);
// Pins on Arduino:
pinMode (BASE+11, PWM_OUTPUT); // Reset pin to maximum value
pwmWrite(BASE+11, 255); // after PWM write.
pinMode (BASE+5, INPUT); // Pin 5 used for digitalRead.
pinMode (BASE+9, PWM_OUTPUT); // Pin 9 used for pwmWrite.
// Pin A0 is used for analogRead.
// Pins on second Arduino:
pinMode (BASE2+13, OUTPUT); // Pin 13 used for digitalWrite.
// Pins on RaspberryPi:
pinMode(0, OUTPUT); // Pin 0 used for digitalWrite.
pinMode(5, INPUT); // Pin 5 used for digitalRead.
pinMode(1, PWM_OUTPUT); // Pin 1 used for pwmWrite.
}/**************************************************************************
* loop() function
**************************************************************************/
void loop(void)
{
digitalWrite(BASE+11, digitalRead(BASE+5)); // If Arduino button is pressed
digitalWrite(0, digitalRead(BASE+5)); // turn on both red LEDs.
pwmWrite(BASE+9, (analogRead(BASE)/4)); // Varies the brightness of both green
pwmWrite(1, (analogRead(BASE)/4)); // LEDs according to pressure applied
// to the force sensitive resistor.
digitalWrite(BASE+11, digitalRead(5)); // If RaspberryPi button is pressed
digitalWrite(0, digitalRead(5)); // turn on both red LEDs.
}/**************************************************************************
* main() function
**************************************************************************/
int main (void)
{
setup();
for(;;)
{
loop();
}
return 0 ;
}
第4步:將它們放在一起
將第6步中的Arduino草圖上傳到您將要使用的Arduino。
關(guān)閉RaspberryPi并連接RaspberryPi電路。插入U(xiǎn)SB端口之前必須先關(guān)閉RaspberryPi,否則RaspberryPi不會(huì)將它們注冊(cè)為正確的設(shè)備。第一個(gè)Arduino是/dev/ttyACM0,第二個(gè)是/dev/ttyACM1。如果您沒(méi)有將Arduinos插入正確的USB端口,則會(huì)將命令發(fā)送到錯(cuò)誤的Arduino。在B +型上,第一個(gè)Arduino在與GPIO接頭相同的頂部USB端口中。第二個(gè)Arduino在下面的底部USB端口中。如果您使用的是USB集線器,則必須在各個(gè)端口之間切換以查看其工作原理。
打開(kāi)RaspberryPi并使用以下命令運(yùn)行該程序:
sudo 。/DRCtest
按下RaspberryPi電路上的按鈕應(yīng)點(diǎn)亮紅色LED。 RaspberryPi電路和第一個(gè)Arduino。
按下第一個(gè)Arduino上的按鈕也會(huì)點(diǎn)亮兩個(gè)紅色LED。
改變電阻傳感器會(huì)導(dǎo)致綠色LED的亮度發(fā)生變化。
在第二個(gè)Arduino上,板載引腳13指示器LED應(yīng)當(dāng)閃爍并熄滅。
如果第一次不起作用,請(qǐng)關(guān)閉所有設(shè)備并反轉(zhuǎn)USB端口。
步驟5:使用一個(gè)Arduino運(yùn)行程序
如果沒(méi)有第二個(gè)Arduino,您仍然可以嘗試演示。
下載此版本的程序并使用以下命令進(jìn)行編譯:
gcc- o DRCtest-1 DRCtest-1.c -lwiringPi
并使用以下命令運(yùn)行程序:
sudo 。/DRCtest-1
僅使用一個(gè)Arduino您可以在關(guān)閉電源的情況下將Arduino插入任何USB端口,然后它將正常工作。
責(zé)任編輯:wv
-
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187647 -
樹(shù)莓派
+關(guān)注
關(guān)注
117文章
1710瀏覽量
105822
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論