2013年5月31日 星期五
2013年5月30日 星期四
ToasterBotics: WiiChuck Library
WiiChuck轉接板能將Wii手柄的I2C埠引出,從而使Wii
Nunchuck手柄方便與Arduino連接而不需任何焊接和連線,WiiChuck適配器V2.0增加了一組I2C介面,方便添加其他I2C設備。
任天堂的Wii遊戲機的Wii
Nunchuck手柄集成了1個3軸加速度感測器,其提供的I2C介面能方便的獲取手柄上各個感測器的資料,包括2軸搖杆,2個按鈕按鈕,3軸加速度感測器等。使用Wii
Nunchuck手柄和Arduino能做出非常酷的互動作品。
ToasterBotics: WiiChuck Library: One of my favorite libraries for Arduino is the WiiChuck library. WiiChuck allows the Arduino to interface to a Wii Nunchuck. What is c...
標籤:
Arduino,
I2C,
wii,
Wii Nunchuck
2013年5月29日 星期三
2013年5月28日 星期二
Notepad2-mod
Arduino常用的程式碼編寫工具
檔案下載
我先說一下我選程式編寫器的要求:
1、有語法highlight功能,這是必須的。
2、軟體要輕量,介面要簡潔,可以一下子打開很多個視窗方便編輯。好像UltraEdit這樣的介面太複雜了,很多時候功能用不到,而vc++又打開極其緩慢,浪費時間。
3、相容中文注釋,其實這個要求不是重點,只是Arduino的IDE竟然不支持,所以才作為要求。
4、可以把語法highlight方案匯出為 HTML、UBB 代碼,便於論壇或者網站分享。
5、字體清晰可見,必須是等寬字體,中文必須方正,選擇時候不能像一些相容中文的外國軟體,因為字體沒選好,選擇文本時候會選到半個中文字這樣。
1、有語法highlight功能,這是必須的。
2、軟體要輕量,介面要簡潔,可以一下子打開很多個視窗方便編輯。好像UltraEdit這樣的介面太複雜了,很多時候功能用不到,而vc++又打開極其緩慢,浪費時間。
3、相容中文注釋,其實這個要求不是重點,只是Arduino的IDE竟然不支持,所以才作為要求。
4、可以把語法highlight方案匯出為 HTML、UBB 代碼,便於論壇或者網站分享。
5、字體清晰可見,必須是等寬字體,中文必須方正,選擇時候不能像一些相容中文的外國軟體,因為字體沒選好,選擇文本時候會選到半個中文字這樣。
最後選擇了Notepad2
MOD
檔案下載
Arduino开发文档
- 作者:
- 柴树杉[翻译整理] (chaishushan@gmail.com)
- 注解:
- 该文档根据 http://arduino.cc/ 翻译,依照 创作公用约定 发布。文档的doxygen源文件可以从 HCRobot 下载。该文档依托HCR开源机器人项目.
介绍Arduino是源自意大利的一个开放源代码的硬件项目,该平台包括 一片具备简单I/O功效的电路板以及一套程式开发环境软体。Arduino 可以用来开发可独立运作、并具互动性的电子用品,或者也可以开发出与PC相连的週边装置,同时能在 运作时与PC上的软体进行沟通。Arduino的硬体电路板可以自行 焊接组装成,也可以购买已经组装好的,而整合开发环境的软体则可以自网路上免费下载与使用。 目前Arduino的硬体部分支援Atmel 的ATmega8与ATmega168等微控器。 此外,Arduino专案获得2006年 Prix Art Electronica在电子通讯类方面的荣誉奖。Arduino的硬体 电路参考设计部分是以创用(Creative Commons) 形式提供授权。相应的原理图和电路图都可以从Arduino网站上获得。 相关图书
相关链接
Arduino使用向导
Arduino参考手册Arduino开发语言提供全部的C语言特性和C++语言的部分特性. 通过链接到 AVR的libc库online~, 可以使用库中提供的函数. 具体的应用细节请参考相关文档.
|
会走会打自己的 ANDROID 垃圾桶机械人自己做(视频)
上面这台Android 机械人是由一位 Android 手机的用家在心血来潮时制成呢!从外观说起,标题叫它做 Android 垃圾桶不是毫无根据的;顾名思义,这机械人的头部和身躯都是以垃圾桶作为基础,内藏 Anduino 机板。Android 绿是自行喷上去的,而双手就是由水管切割而成,会上下左右地举,还懂敲打自己的头部和身躯,真可爱。至于它的「腿」则变成了两个左右的主轮和前后的辅助轮,不然站不稳呢。
或许读者们也会留意到它的肚子有一个显示器和四个像炮口的东西,据制造者所说,这是为了做到手动和全自动操作而安装的 LCD 显示器和超音波距离传感器喔;只是我们未能在影片中确认哪些操作属自动。另外有趣的是,机械人在影片的后段因为突如其来的停步而跌到头部和身躯分离呢!(制造者用了一个更生动的动词,只是小编不方便放上来啦)其后我们会看到它的内部构造,血管和器官电线和零件比想象中多,幸好机械人在站起来后运作正常,没有疯狂起来。
制造者在论坛的帖子上极之详细地纪录了这机器的制作过程,还附有大量图片。对这部机械人感兴趣的读者绝对不能错过!另一张图片和影片在继续阅读里。
基礎程式、開關與flash動畫控制
int redLed=5;//定義紅色LED燈接在5號Pin腳
int switchPin=2;//定義開關接在2號Pin腳
int switchPin=2;//定義開關接在2號Pin腳
void setup(){
pinMode(redLed,OUTPUT);//定義紅色LED燈為輸出模式
pinMode(switchPin,INPUT);//定義開關為輸入模式
}
pinMode(switchPin,INPUT);//定義開關為輸入模式
}
void loop(){
int switchState=digitalRead(switchPin);//定義開關狀態為數位腳位(switchPin)的狀態
if(switchState==HIGH){//如果開關狀態為高電位
digitalWrite(redLed,HIGH);//則紅色LED燈接為高電位(發亮)
}
else{
digitalWrite(redLed,LOW);//要不然紅色LED燈接為低電位(不亮)
}
}
}
——————————–
Massimo’s Second tutorial
int redLed=5;
int yellowLed=4;
int greenLed=3;
int yellowLed=4;
int greenLed=3;
int switchPin=2;
void setup(){
pinMode(redLed,OUTPUT);
pinMode(yellowLed,OUTPUT);
pinMode(greenLed,OUTPUT);
pinMode(yellowLed,OUTPUT);
pinMode(greenLed,OUTPUT);
pinMode(switchPin,INPUT);
}
}
void loop(){
int switchState=digitalRead(switchPin);
if(switchState==LOW){
digitalWrite(redLed,LOW);
digitalWrite(yellowLed,HIGH);
digitalWrite(greenLed,LOW);
digitalWrite(yellowLed,HIGH);
digitalWrite(greenLed,LOW);
delay(250);
digitalWrite(yellowLed,LOW);
digitalWrite(greenLed,HIGH);
digitalWrite(greenLed,HIGH);
delay(250);
}
else{
digitalWrite(yellowLed,LOW);
digitalWrite(redLed,HIGH);
digitalWrite(redLed,HIGH);
digitalWrite(greenLed,LOW);
}
}
}
int in_pin=8;//定義訊號輸入腳位
int val_a=0;//定義訊號輸入顯示變數, 並且給初始值為0
void setup()
{
pinMode(in_pin,INPUT);
Serial.begin(9600);
}
void loop()
{
val_a=digitalRead(in_pin);
Serial.print (val_a);
Serial.println(0,BYTE);//這部分對Flash很重要,先歸零再將訊號送出
int val_a=0;//定義訊號輸入顯示變數, 並且給初始值為0
void setup()
{
pinMode(in_pin,INPUT);
Serial.begin(9600);
}
void loop()
{
val_a=digitalRead(in_pin);
Serial.print (val_a);
Serial.println(0,BYTE);//這部分對Flash很重要,先歸零再將訊號送出
delay(300);
}
}
Arduino 部分
int readPin=3;//類以比訊號讀取
int rangeIndex=0;
int container=0;
int level=0; //幫訊號分級別的變數
int readPin=3;//類以比訊號讀取
int rangeIndex=0;
int container=0;
int level=0; //幫訊號分級別的變數
void setup()
{
pinMode(readPin,INPUT);
Serial.begin(9600);
}
{
pinMode(readPin,INPUT);
Serial.begin(9600);
}
void loop()
{
container=analogRead(readPin);//
{
container=analogRead(readPin);//
rangeIndex=container;
delay(100);
delay(100);
if(rangeIndex < = 1023 && rangeIndex > 681 )
{
level=3;
}
else if(rangeIndex < = 680 && rangeIndex > 341 )
{
level=2;
}
else if(rangeIndex < = 340 && rangeIndex > 200 )
{
level=1;
}
else
{
level=0;
}
delay(300);
{
level=3;
}
else if(rangeIndex < = 680 && rangeIndex > 341 )
{
level=2;
}
else if(rangeIndex < = 340 && rangeIndex > 200 )
{
level=1;
}
else
{
level=0;
}
delay(300);
Serial.print(level);
Serial.println(0,BYTE);
delay(100);
Serial.println(0,BYTE);
delay(100);
}
Flash 部分
import Arduino;//載入Arduino設定檔
var port:Number = 5333;
//設定Serial Port連接位置 , com1~com4=5331~5334 , 記得對應serproxy的設定檔
var a:Arduino = new Arduino(port);//建立一個Arduino的監聽物件
aListener = new Object();
a.addEventListener(“onConnect",aListener);
a.addEventListener(“onConnectError",aListener);
a.addEventListener(“onDisconnect",aListener);
a.addEventListener(“onReceiveData",aListener);
import Arduino;//載入Arduino設定檔
var port:Number = 5333;
//設定Serial Port連接位置 , com1~com4=5331~5334 , 記得對應serproxy的設定檔
var a:Arduino = new Arduino(port);//建立一個Arduino的監聽物件
aListener = new Object();
a.addEventListener(“onConnect",aListener);
a.addEventListener(“onConnectError",aListener);
a.addEventListener(“onDisconnect",aListener);
a.addEventListener(“onReceiveData",aListener);
///////////////////////////////////////
aListener.onConnectError = function()
{
//連線失敗
trace(“Failed");
}
//////////////////////////////////////
aListener.onDisconnect = function()
{
//失去連線
trace(“disconnected");
}
//////////////////////////////////////
aListener.onConnect = function()
{}
//////////////////////////////////////
aListener.onReceiveData = function(evtObj:Object) //主要程式由以下開始
{
aListener.onConnectError = function()
{
//連線失敗
trace(“Failed");
}
//////////////////////////////////////
aListener.onDisconnect = function()
{
//失去連線
trace(“disconnected");
}
//////////////////////////////////////
aListener.onConnect = function()
{}
//////////////////////////////////////
aListener.onReceiveData = function(evtObj:Object) //主要程式由以下開始
{
var inputData = new int; //宣告一個用來接值的變數
inputData = evtObj.data; //接收Arduino傳過來的數值
trace(inputData);
inputData = evtObj.data; //接收Arduino傳過來的數值
trace(inputData);
if(inputData==1){
faceChange.gotoAndStop(“angry");
}
else if(inputData==2)
{
faceChange.gotoAndStop(“smile");
}
else if(inputData==3)
{
faceChange.gotoAndStop (“sad");
}
else
{
stop();
}
faceChange.gotoAndStop(“angry");
}
else if(inputData==2)
{
faceChange.gotoAndStop(“smile");
}
else if(inputData==3)
{
faceChange.gotoAndStop (“sad");
}
else
{
stop();
}
}
import Arduino;//載入Arduino設定檔
var port:Number = 5333;
//設定Serial Port連接位置 , com1~com4=5331~5334 , 記得對應serproxy的設定檔
var a:Arduino = new Arduino(port);//建立一個Arduino的監聽物件
aListener = new Object();
a.addEventListener(“onConnect",aListener);
a.addEventListener(“onConnectError",aListener);
a.addEventListener(“onDisconnect",aListener);
a.addEventListener(“onReceiveData",aListener);
var port:Number = 5333;
//設定Serial Port連接位置 , com1~com4=5331~5334 , 記得對應serproxy的設定檔
var a:Arduino = new Arduino(port);//建立一個Arduino的監聽物件
aListener = new Object();
a.addEventListener(“onConnect",aListener);
a.addEventListener(“onConnectError",aListener);
a.addEventListener(“onDisconnect",aListener);
a.addEventListener(“onReceiveData",aListener);
///////////////////////////////////////
aListener.onConnectError = function()
{
//連線失敗
trace(“Failed");
}
//////////////////////////////////////
aListener.onDisconnect = function()
{
//失去連線
trace(“disconnected");
}
//////////////////////////////////////
aListener.onConnect = function()
{}
//////////////////////////////////////
aListener.onReceiveData = function(evtObj:Object) //主要程式由以下開始
{
aListener.onConnectError = function()
{
//連線失敗
trace(“Failed");
}
//////////////////////////////////////
aListener.onDisconnect = function()
{
//失去連線
trace(“disconnected");
}
//////////////////////////////////////
aListener.onConnect = function()
{}
//////////////////////////////////////
aListener.onReceiveData = function(evtObj:Object) //主要程式由以下開始
{
var inputData = new int; //宣告一個用來接值的變數
inputData = evtObj.data; //接收Arduino傳過來的數值
trace(inputData);
inputData = evtObj.data; //接收Arduino傳過來的數值
trace(inputData);
if(inputData==1)
{
ball.gotoAndPlay(“start");
}
else
{
stop();
}
{
ball.gotoAndPlay(“start");
}
else
{
stop();
}
}
互動作品參考範例網址:
http://www.youtube.com/watch?v=Qx2p2gpCpYA
http://www.youtube.com/watch?v=FJvSpKYiPZc
http://www.youtube.com/watch?feature=player_embedded&v=kUa-QwdEBeQ
http://www.youtube.com/watch?v=dCxllHkV6r4
http://www.youtube.com/watch?v=T0lyL_z8pxE
http://www.youtube.com/watch?v=fVg_l3zIrh4
http://www.youtube.com/watch?v=6Wlcf6XfMZg
http://arduino.tw/images/stories/P2.jpg
http://mfa.techart.tnua.edu.tw/~gmyuan/blog/?p=26
http://techart.tnua.edu.tw/fbi/?page_id=3875
http://www.youtube.com/watch?v=Qx2p2gpCpYA
http://www.youtube.com/watch?v=FJvSpKYiPZc
http://www.youtube.com/watch?feature=player_embedded&v=kUa-QwdEBeQ
http://www.youtube.com/watch?v=dCxllHkV6r4
http://www.youtube.com/watch?v=T0lyL_z8pxE
http://www.youtube.com/watch?v=fVg_l3zIrh4
http://www.youtube.com/watch?v=6Wlcf6XfMZg
http://arduino.tw/images/stories/P2.jpg
http://mfa.techart.tnua.edu.tw/~gmyuan/blog/?p=26
http://techart.tnua.edu.tw/fbi/?page_id=3875
手感賽車手 Car Racing Game
先用 Processing 寫出遊戲,確定能執從後再連結Arduino做車體的控制,把原先 "上,下,左,右,空白鍵" 轉化為實體互動。此遊戲除了可以連結 Arduino,也能直接用鍵盤玩。
P.S.網頁執行時音效會有點 Leg
零件清單:
.Arduino UNO 板子*1
.單心線
.跳線
.光敏電組*2
.水銀開關*3
.電阻*5
.手套*1
遊戲連結:http://justmydesign.sg1005.myweb.hinet.net/2011_Processing/hw11/
P.S.不知為何加入Arduino程式碼後無法在網頁上執行(因為網頁無法讀取Arduino訊號?),所以我放上純Processing的遊戲版本。
遊戲名稱:手感賽車手 Car Racing Game
操作方式:鍵盤 or Arduino
遊戲步驟:上=加速,下=煞車,左=左轉,右=右轉,空白鍵=發射火焰。遊戲時間有60秒,吃到(+5時鐘)時間額外增加5秒,遊戲結束後玩家的距離分數+射擊分數=總分。
int sensorValueSpace, sensorValueUp; void setup() { for (int i=3; i<=7; i++) pinMode(i, INPUT); Serial.begin(9600); } void loop() { sensorValueSpace = analogRead(A5); sensorValueUp = analogRead(A3); if (sensorValueUp > 200) Serial.print(1, BYTE); //1 = 沒按上鍵 else Serial.print(2, BYTE); //2 = 按上鍵 if (digitalRead(4) == LOW) Serial.print(3, BYTE); //3 = 沒按下鍵 else Serial.print(4, BYTE); //4 = 按下鍵 if (digitalRead(5) == LOW) Serial.print(5, BYTE); //5 = 沒按左鍵 else Serial.print(6, BYTE); //6 = 按左鍵 if (digitalRead(6) == LOW) Serial.print(7, BYTE); //7 = 沒按右鍵 else Serial.print(8, BYTE); //8 = 按右鍵 if (sensorValueSpace > 200) Serial.print(9, BYTE); //9 = 沒按空白鍵 else Serial.print(10, BYTE); //10 = 按空白鍵 delay(100);}
資料來源
訂閱:
文章 (Atom)