2011年12月7日 星期三

IRremote 1

買的時候據說是ROHM的,根據ROHM網站,腳位由左至右分別是Rout, GND, Vcc。
很奇怪,房東的東元冷氣是吃NEC的Protocol~~

2011年12月6日 星期二

小書和74HC595N的作業

Arduino小書兩枚
兩顆Shift Register控制10 pin LED Bar 一
兩顆Shift Register控制10 pin LED Bar 二
我實在沒天賦把線剪的弄的一模一樣照起來又漂亮又整齊(@@")。用兩個shift register來控制10 pin LED Bar,這樣就只會用到Arduino Uno三個Pin(不算Vcc和GND)。目前體驗到關鍵點在於
  1. Shift Register的接法,第一顆的Q7' (Q7S)腳位接到第二顆的DS腳位,第二顆的ST_CP, SH_CP都分別和第一顆接起來。
  2. 要送出去的資料會用到highByte()lowByte這兩個method,順序是high byte部分先送,再送low byte。
void loop() {
  
  // 1024 = 2^10
  for( int numberToDisplay = 0; numberToDisplay < 1024; numberToDisplay++ ) {
    byte high_byte = highByte( numberToDisplay );
    byte low_byte = lowByte( numberToDisplay );
    Serial.println( numberToDisplay );
    digitalWrite( LATCH_PIN, LOW );
    // bitOrder: which order to shift out the bits; either MSBFIRST or LSBFIRST.
    // (Most Significant Bit First, or, Least Significant Bit First)
    shiftOut( DATA_PIN, CLOCK_PIN, MSBFIRST, high_byte );
    shiftOut( DATA_PIN, CLOCK_PIN, MSBFIRST, low_byte );
    
    digitalWrite( LATCH_PIN, HIGH );
    
    delay( 500 );
  }
}
弄好已經太晚就沒有繼續做加上可變電阻將analogRead()的值透過map()把比例顯示在LED Bar上。

2011年12月1日 星期四

Keypad - 4*3 數字鍵盤

從ICShopping買的4*3 Keypad
正面
背面
我這種懶惰的傢伙當然沒按照官方網站Keypad的說明裡的測每個pin的組合,我是直接接線然後看從結果和接線去調整出正確的接法。(外行人嘛)
/*
 * Keypad 1
 */
#define NumRows 4
#define NumCols 3
#define DebounceTime 20
const char keymap[NumRows][NumCols] = {
  { '1', '2', '3' },
  { '4', '5', '6' },
  { '7', '8', '9' },
  { '*', '0', '#' }
};

// pins
const int rowPins[ NumRows ] = { 5, 4, 3, 2 };
const int colPins[ NumCols ] = { 8, 7, 6 };
程式的其他部分是拿小歐的Arduino Cookbook第一版 5.5 Reading a Keypad來的。

Mac OS X安裝Arduino third-party libraries

後來買了一個現在很容易撞機的NB...殘念,除了現在很容易撞機之外,Mac OS X還真是個不錯用的OS,活生生把ubuntu擠到第二名...。玩Arduino的時候安裝third-party提供的library安裝的路徑在/Applications/Arduino.app/Contents/Resources/Java/libraries,也可以看上面Finder的截圖。
把下載的library unzip到那個目錄下,通常重新啓動Arduino application就可以在Sketch > Import Library...找到剛剛安裝的library。

2011年11月29日 星期二

傾斜感測器

不知道為啥買的brick...。水平的時候透過analogRead()會讀取到最大的值,開始傾斜之後讀取到的值就會變小。
哈!覺得這種玩具比玩圍棋要多花錢很多錢

2011年11月22日 星期二

Ultrasonic Ranging Module - HC-SRO4 + Arduino

超音波距離感測器,我買的是兩顆眼睛、四隻腳的HC-SRO4(正面如下圖)
HC-SRO4正面看由左至右的腳分別是
  • Vcc
  • Trig
  • Echo
  • Gnd
眼前程度體會的重點有兩個,一個是自己透過Trig, Echo完成一個Ping完成一次發送/接收超音波測距的動作,針對Trig送10 microsecond的HIGH訊號出去,然後SRO4就會送出8個40kHz的square wave出去,當訊號回來的時候,我們透過pulseIn()取得Echo pin HIGH pulse的時間;另一個是距離的計算根據datasheet說明的Echo back pulse width(這裡是Echo Pin由LOW -> HIGH -> LOW的時間) microseconds除上58就是距離(cm),除上148就是inch的距離。

Lab 1 - 結果送出Serial Port

/**
 *  Ultrasonic 1: 超音波測距 秀在Serial Port 9600
 */
#define TrigPin 10
#define EchoPin 13

long ping() {
  // PING
  digitalWrite( TrigPin, LOW );
  delayMicroseconds( 2 );
  digitalWrite( TrigPin, HIGH );
  delayMicroseconds( 10 );
  digitalWrite( TrigPin, LOW );
  return pulseIn( EchoPin, HIGH );
}

void setup() {
  pinMode( TrigPin, OUTPUT );
  pinMode( EchoPin, INPUT );
  Serial.begin( 9600 );
}

void loop() {
  long duration, cm;
  String result = "Distance: ";

  duration = ping();
  cm = duration / 58;
  result += cm;
  result += " (cm).";
  Serial.println( result );
  delay( 1500 );
}
終於買了其他顏色的單芯線,那就紅色是高電位、黑色接Gnd、其他顏色就接訊號,還沒想說input/output用啥顏色來區分。
換個角度再照一張

Lab 2 - 結果顯示在16*2 LCD

2011年11月17日 星期四

analogWrite()

因為調整晚上班表,所以昨天只有一項作業,做完之後,看英文之前,踹一下Manning書上這個表的東西。
Table: Arduino analog resolution and pins (from Arduino in Action)
Analog Input Analog Output
Resolution 10 bits (0~1023) 8 bits (0~254)
Votage Range 0~5 (Volts) 0~5 (Volts)
Arduino Pins A0~A5 Digit Pins 3, 5, 6, 9. 10, 11
Arduino Mega Pins A0~A15 Digit Pins 0~13
在做之前的作業中,由Language Documents知道digitWrite(pin, value)第二個參數是HIGH/LOW;analogWrite(pin, value)。然後很無聊的做兩個練習,分別針對digit pin 13/11使用analogWrite()
/**
 * Analog out on Digit Pin 13 test
 */
const int ledPin = 13;

void setup() {
  pinMode( ledPin, OUTPUT );
}

void loop() {
  for( int i=0; i<10; i++ ) {
    analogWrite( ledPin, 54+(i*20) );
    delay( 1000 );
  }
}
可以看到pin 13沒有亮度的差別。接著把線路改成接到digit pin 11和程式ledPin改成11,燒進去之後跑一下看看,就可以看到LED的亮度會變化。