相關(guān)商品
Arduino LED發(fā)光模塊 食人魚燈 白光高亮 數(shù)字模塊 電子積木
本店售價(jià):¥10.00
Arduino LED發(fā)光模塊 黃光高亮 食人魚燈 數(shù)字模塊 電子積木
本店售價(jià):¥10.00
Arduino LED發(fā)光模塊 食人魚燈 藍(lán)色高亮 數(shù)字模塊 電子積木
本店售價(jià):¥12.00
Arduino LED發(fā)光模塊 食人魚燈 綠色高亮 數(shù)字模塊 電子積木
本店售價(jià):¥10.00
Arduino 魔法書 實(shí)現(xiàn)夢(mèng)想的工具和技術(shù)
本店售價(jià):¥59.00
Arduino LED發(fā)光模塊 食人魚燈 紅光高亮 數(shù)字模塊 電子積木
本店售價(jià):¥10.00
Arduino UNO R3 控制器 ATmega328P-PU+ATmega16U2 arduino 原裝進(jìn)口
本店售價(jià):¥188.00
Arduino 可拼接面包板 面包實(shí)驗(yàn)板 可自貼面包板 洞洞實(shí)驗(yàn)板
本店售價(jià):¥20.00
Arduino Mini 面包板 優(yōu)質(zhì)迷你 可自貼面包板 電子積木
本店售價(jià):¥10.00
Arduino Mini可拼接面包板 透明面包板 實(shí)驗(yàn)板 實(shí)驗(yàn)面包板
本店售價(jià):¥12.00
Arduino Mini可拼接面包板 透明面包板 實(shí)驗(yàn)面包板
本店售價(jià):¥18.00
170孔優(yōu)質(zhì)面包板 電路板 洞洞板 實(shí)驗(yàn)板 可自貼原型擴(kuò)展板
本店售價(jià):¥10.00
Arduino 7彩面包板實(shí)驗(yàn)跳線套裝 智能電子 機(jī)器人配件
本店售價(jià):¥20.00
Arduino 7彩面包板實(shí)驗(yàn)跳線套裝 連接線 盒裝 電子積木
本店售價(jià):¥25.00
Arduino Due ARM控制器 Arduino原裝進(jìn)口 32bit CortexM3
本店售價(jià):¥328.00
LED 發(fā)光二極管 5mm 高亮 紅色 (5只) Arduino互動(dòng)電子元件
本店售價(jià):¥1.50
Arduino Starter Kit Arduino入門套件 意大利中國(guó)代理
本店售價(jià):¥799.00
Arduino Yun Arduino官方原裝 Arduino Yún WiFi Linux
本店售價(jià):¥588.00
Arduino無(wú)線SD擴(kuò)展板 Arduino原裝進(jìn)口
本店售價(jià):¥209.00
Arduino Ethernet w/o PoE Arduino原裝進(jìn)口 arduino網(wǎng)絡(luò)擴(kuò)展板
本店售價(jià):¥387.00
Arduino UNO R3 SMD 控制器 ATmega16U2 開發(fā)版 單片機(jī) sparkfun原裝進(jìn)口
本店售價(jià):¥218.00
PicoBoard互動(dòng)創(chuàng)新板(單板非套件) 傳感器互動(dòng)板 Scratch教學(xué)傳感板
本店售價(jià):¥198.00
PVCBOT零基礎(chǔ)機(jī)器人制作配書套件 小學(xué)生DIY模型科技小制作套裝
本店售價(jià):¥93.60
PVCBOT零基礎(chǔ)機(jī)器人制作教材 DIY機(jī)器人配書套件 科技小制作小發(fā)明
本店售價(jià):¥52.65
PVCBOT零基礎(chǔ)機(jī)器人制作工具包 五金焊接電子模型玩具工具箱套裝
本店售價(jià):¥138.06
ArduPilot 固定翼 飛控 多旋翼 Arduino 控制器 Sparkfun原裝進(jìn)口
本店售價(jià):¥155.00
A-Star 32u4 Mini LV 可編程模塊 ATmega32U4開發(fā)板 pololu原裝
本店售價(jià):¥129.00
A-Star 32U4 Mini ULV 可編程模塊 ATmega32U4開發(fā)板 Pololu原裝
本店售價(jià):¥129.00
Arduino 雙路大功率直流電機(jī)驅(qū)動(dòng)擴(kuò)展板 VNH5019 美國(guó)Pololu原裝
本店售價(jià):¥328.00
Arduino 直流電機(jī)驅(qū)動(dòng)板 MiniMoto DRV8830 IIC/I2C Sparkfun原裝
本店售價(jià):¥98.00
Arduino 機(jī)器人權(quán)威指南 愛上Arduino制作指南
本店售價(jià):¥79.20
Arduino 模擬傳感器 Slider Sensor 直滑電位計(jì) 位置 滑動(dòng)傳感器
本店售價(jià):¥19.00
Arduino Intel Galileo Gen 2 伽利略開發(fā)板 官方授權(quán)
本店售價(jià):¥498.00
動(dòng)手玩轉(zhuǎn)Arduino套件 愛上Arduino互動(dòng)電子入門套件
本店售價(jià):¥198.00
動(dòng)手玩轉(zhuǎn) Arduino 愛上 Arduino 互動(dòng)電子入門套件 Arduino必備教材
本店售價(jià):¥59.00
PVCBOT機(jī)器人設(shè)計(jì)與制作套件 DIY機(jī)器人套件升級(jí)版 第二冊(cè)套件 配套書籍
本店售價(jià):¥269.10
4WD機(jī)器人調(diào)試助手v2.0軟件 智能小車 Arduino 履帶 WiFi藍(lán)牙小車
本店售價(jià):¥1.00
【奧松新品】基于Arduino的觸摸式變色臺(tái)燈
編輯:Peter2013-09-26 130708050@qq.com 瀏覽次數(shù):1703
最近小編入手了一塊基于I2C通信方式的觸摸控制板,可以和手中的Arduino控制器配合應(yīng)用,于是小編就想做個(gè)好玩的東西——基于Arduino的觸摸式變色臺(tái)燈。
Arduino
Arduino是一款便捷靈活、方便上手的開源電子原型平臺(tái),包含硬件(各種型號(hào)的Arduino控制器)和軟件(Arduino IDE)。Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達(dá)和其他的裝置來反饋、影響環(huán)境。對(duì)Arduino的編程是利用Arduino編程語(yǔ)言(基于Wiring)和Arduino開發(fā)環(huán)境(based on Processing)來實(shí)現(xiàn)的?;?span style="color:#FF0000;">Arduino的項(xiàng)目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運(yùn)行的軟件,它們之間進(jìn)行通信來實(shí)現(xiàn)。
MPR121
MPR121是飛思卡爾公司設(shè)計(jì)研發(fā)的一種電容式觸摸感應(yīng)控制器,具有內(nèi)部情報(bào)功能,可以感受手指對(duì)接收器的觸摸或者接近,從而發(fā)出相應(yīng)的感應(yīng)信號(hào)提供給控制器。MPR121較之前的版本增加了一個(gè)內(nèi)部情報(bào)和飛思卡爾的第二電容檢測(cè)引擎,其次還增強(qiáng)了電極計(jì)數(shù),硬件配置的I2C地址,一個(gè)擴(kuò)大過濾系統(tǒng)和防反跳,完全獨(dú)立電極帶內(nèi)置自動(dòng)配置等功能。該設(shè)備還包括一個(gè)13模擬電極,代表同時(shí)充電的電極連接在一起,允許更大的附近探測(cè)距離和增加傳感區(qū)域。
下面就看看我們需要的器材都有哪些:
Arduino控制器,各種類型的都可以,這里我們采用手中現(xiàn)有的Arduino UNO控制器,當(dāng)然了,我們還得有和Arduino配套使用的傳感器擴(kuò)展板。
然后就是我們的重要器件了——I2C Touch Sensor和照明用的各色LED了,小編手中正好有紅色、綠色、黃色和白色的,完全可以用于此次的制作了。
除了上述的器件,我們還需要一塊面包板和連接線
讓我們現(xiàn)在簡(jiǎn)單的驗(yàn)證一下這個(gè)想法是否可行,首先將各種需要的器件都按照需要使用面包板連接在一起,驗(yàn)證一下代碼是否可行(庫(kù)文件點(diǎn)這里)。
#include
#include
#define MPR121_R 0xB5
#define MPR121_W 0xB4
#define MPR121addr 0x5a
int StateOfTouch1 = 0;
int StateOfTouch2 = 0;
int StateOfTouch3 = 0;
int StateOfTouch4 = 0;
int irqpin = 2;
uint16_t touchstatus;
volatile int GetTouchSignal = 0;
unsigned char reg = 0;
unsigned char status1 =0;
unsigned char status2 =0;
long previousMillis = 0;
long interval = 100;
void setup()
{
Serial.begin(9600);
DDRC |= 0b00010011;
PORTC = 0b00110000;
i2cInit();
Serial.println("setting device up..");
delay(100);
mpr121QuickConfig();
}
void loop()
{
unsigned char MPR_Query=0;
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;
Read_MPR121();
}
if (Serial.available()>0)
{
Serial.println("Get a command form PC..");
reg = Serial.read();
Serial.print("Quiry the Reg of ");
Serial.println(reg,BIN);
MPR_Query = mpr121Read(reg);
Serial.print("the reg is = 0x");
Serial.println(MPR_Query,HEX);
}
delayMicroseconds(1000);
}
void Read_MPR121()
{
status1=mpr121Read(0x00);
status2=mpr121Read(0x01);
CheckStatus();
}
void CheckStatus()
{
if ((status1&0x01)==0x01)
{
StateOfTouch1 =1;
}
else
{
if (StateOfTouch1 ==1)
{
Serial.println("channel 0 has pressed..");
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
StateOfTouch1 =0;
}
}
if ((status1&0x02)==0x02)
{
StateOfTouch2 =1;
}
else
{
if (StateOfTouch2 ==1)
{
Serial.println("channel 1 has pressed..");
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
StateOfTouch2 =0;
}
}
if ((status1&0x04)==0x04)
{
StateOfTouch3 =1;
}
else
{
if (StateOfTouch3 ==1)
{
Serial.println("channel 2 has pressed..");
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
StateOfTouch3 =0;
}
}
if ((status1&0x08)==0x08)
{
StateOfTouch4 =1;
}
else
{
if (StateOfTouch4 ==1)
{
Serial.println("channel 3 has pressed..");
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
StateOfTouch4 =0;
}
}
}
byte mpr121Read(uint8_t address)
{
byte data;
i2cSendStart();
i2cWaitForComplete();
i2cSendByte(MPR121_W);
i2cWaitForComplete();
i2cSendByte(address);
i2cWaitForComplete();
i2cSendStart();
i2cSendByte(MPR121_R);
i2cWaitForComplete();
i2cReceiveByte(TRUE);
i2cWaitForComplete();
data = i2cGetReceivedByte();
i2cWaitForComplete();
i2cSendStop();
cbi(TWCR, TWEN);
sbi(TWCR, TWEN);
return data;
}
void mpr121Write(unsigned char address, unsigned char data)
{
i2cSendStart();
i2cWaitForComplete();
i2cSendByte(MPR121_W);
i2cWaitForComplete();
i2cSendByte(address);
i2cWaitForComplete();
i2cSendByte(data);
i2cWaitForComplete();
i2cSendStop();
}
void mpr121QuickConfig(void)
{
Serial.println("config MPR121..");
mpr121Write(MHD_R, 0x01);
mpr121Write(NHD_R, 0x01);
mpr121Write(NCL_R, 0x00);
mpr121Write(FDL_R, 0x00);
mpr121Write(MHD_F, 0x01);
mpr121Write(NHD_F, 0x01);
mpr121Write(NCL_F, 0xFF);
mpr121Write(FDL_F, 0x02);
mpr121Write(ELE0_T, TOU_THRESH);
mpr121Write(ELE0_R, REL_THRESH);
mpr121Write(ELE1_T, TOU_THRESH);
mpr121Write(ELE1_R, REL_THRESH);
mpr121Write(ELE2_T, TOU_THRESH);
mpr121Write(ELE2_R, REL_THRESH);
mpr121Write(ELE3_T, TOU_THRESH);
mpr121Write(ELE3_R, REL_THRESH);
mpr121Write(ATO_CFGU, 0xC9);
mpr121Write(ATO_CFGL, 0x82);
mpr121Write(ATO_CFGT,0xb5);
mpr121Write(ATO_CFG0, 0x1B);
mpr121Write(ELE_CFG, 0x8c);
Serial.println("config MPR121 Done!");
}
void checkInterrupt(void)
{
int IRQ =0;
IRQ = digitalRead(irqpin);
if(IRQ == 0)
{
GetTouchSignal=1;
}
else
{
GetTouchSignal=0;
}
}
相關(guān)聯(lián)接
Arduino UNO
Arduino 傳感器擴(kuò)展板
紅色LED
面包板
面包板跳線
用戶評(píng)價(jià)
匿名用戶
- 咨詢內(nèi)容:
- 這個(gè)教程不完整啊,起完整版的