相關商品

Arduino LED發(fā)光模塊 食人魚燈 白光高亮 數(shù)字模塊 電子積木
本店售價:¥10.00

Arduino LED發(fā)光模塊 黃光高亮 食人魚燈 數(shù)字模塊 電子積木
本店售價:¥10.00

Arduino LED發(fā)光模塊 食人魚燈 藍色高亮 數(shù)字模塊 電子積木
本店售價:¥12.00

Arduino LED發(fā)光模塊 食人魚燈 綠色高亮 數(shù)字模塊 電子積木
本店售價:¥10.00

Arduino 魔法書 實現(xiàn)夢想的工具和技術
本店售價:¥59.00

Arduino LED發(fā)光模塊 食人魚燈 紅光高亮 數(shù)字模塊 電子積木
本店售價:¥10.00


Arduino 可拼接面包板 面包實驗板 可自貼面包板 洞洞實驗板
本店售價:¥20.00

Arduino Mini 面包板 優(yōu)質(zhì)迷你 可自貼面包板 電子積木
本店售價:¥10.00

Arduino Mini可拼接面包板 透明面包板 實驗板 實驗面包板
本店售價:¥12.00

Arduino Mini可拼接面包板 透明面包板 實驗面包板
本店售價:¥18.00

170孔優(yōu)質(zhì)面包板 電路板 洞洞板 實驗板 可自貼原型擴展板
本店售價:¥10.00


Arduino 7彩面包板實驗跳線套裝 智能電子 機器人配件
本店售價:¥20.00

Arduino 7彩面包板實驗跳線套裝 連接線 盒裝 電子積木
本店售價:¥25.00

Arduino Due ARM控制器 Arduino原裝進口 32bit CortexM3
本店售價:¥328.00

LED 發(fā)光二極管 5mm 高亮 紅色 (5只) Arduino互動電子元件
本店售價:¥1.50

Arduino Starter Kit Arduino入門套件 意大利中國代理
本店售價:¥799.00

Arduino Yun Arduino官方原裝 Arduino Yún WiFi Linux
本店售價:¥588.00

Arduino無線SD擴展板 Arduino原裝進口
本店售價:¥209.00



PicoBoard互動創(chuàng)新板(單板非套件) 傳感器互動板 Scratch教學傳感板
本店售價:¥198.00

PVCBOT零基礎機器人制作配書套件 小學生DIY模型科技小制作套裝
本店售價:¥93.60

PVCBOT零基礎機器人制作教材 DIY機器人配書套件 科技小制作小發(fā)明
本店售價:¥52.65

PVCBOT零基礎機器人制作工具包 五金焊接電子模型玩具工具箱套裝
本店售價:¥138.06

ArduPilot 固定翼 飛控 多旋翼 Arduino 控制器 Sparkfun原裝進口
本店售價:¥155.00

A-Star 32u4 Mini LV 可編程模塊 ATmega32U4開發(fā)板 pololu原裝
本店售價:¥129.00


Arduino 雙路大功率直流電機驅(qū)動擴展板 VNH5019 美國Pololu原裝
本店售價:¥328.00


Arduino 機器人權威指南 愛上Arduino制作指南
本店售價:¥79.20

Arduino 模擬傳感器 Slider Sensor 直滑電位計 位置 滑動傳感器
本店售價:¥19.00

Arduino Intel Galileo Gen 2 伽利略開發(fā)板 官方授權
本店售價:¥498.00

動手玩轉(zhuǎn)Arduino套件 愛上Arduino互動電子入門套件
本店售價:¥198.00


PVCBOT機器人設計與制作套件 DIY機器人套件升級版 第二冊套件 配套書籍
本店售價:¥269.10

【奧松新品】基于Arduino的觸摸式變色臺燈
編輯:Peter2013-09-26 130708050@qq.com 瀏覽次數(shù):1713
最近小編入手了一塊基于I2C通信方式的觸摸控制板,可以和手中的Arduino控制器配合應用,于是小編就想做個好玩的東西——基于Arduino的觸摸式變色臺燈。
Arduino
Arduino是一款便捷靈活、方便上手的開源電子原型平臺,包含硬件(各種型號的Arduino控制器)和軟件(Arduino IDE)。Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達和其他的裝置來反饋、影響環(huán)境。對Arduino的編程是利用Arduino編程語言(基于Wiring)和Arduino開發(fā)環(huán)境(based on Processing)來實現(xiàn)的?;?span style="color:#FF0000;">Arduino的項目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運行的軟件,它們之間進行通信來實現(xiàn)。
MPR121
MPR121是飛思卡爾公司設計研發(fā)的一種電容式觸摸感應控制器,具有內(nèi)部情報功能,可以感受手指對接收器的觸摸或者接近,從而發(fā)出相應的感應信號提供給控制器。MPR121較之前的版本增加了一個內(nèi)部情報和飛思卡爾的第二電容檢測引擎,其次還增強了電極計數(shù),硬件配置的I2C地址,一個擴大過濾系統(tǒng)和防反跳,完全獨立電極帶內(nèi)置自動配置等功能。該設備還包括一個13模擬電極,代表同時充電的電極連接在一起,允許更大的附近探測距離和增加傳感區(qū)域。
下面就看看我們需要的器材都有哪些:
Arduino控制器,各種類型的都可以,這里我們采用手中現(xiàn)有的Arduino UNO控制器,當然了,我們還得有和Arduino配套使用的傳感器擴展板。
然后就是我們的重要器件了——I2C Touch Sensor和照明用的各色LED了,小編手中正好有紅色、綠色、黃色和白色的,完全可以用于此次的制作了。
除了上述的器件,我們還需要一塊面包板和連接線
讓我們現(xià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;
}
}
相關聯(lián)接
Arduino UNO
Arduino 傳感器擴展板
紅色LED
面包板
面包板跳線
用戶評價
匿名用戶
- 咨詢內(nèi)容:
- 這個教程不完整啊,起完整版的