2015年1月18日 星期日

Arduino DS1302 Set_Clock



#include "stdio.h"
#include "DS1302.h"

namespace {

// Set the appropriate digital I/O pin connections.
const int kCePin   = 5;  // Chip Enable
const int kIoPin   = 6;  // Input/Output
const int kSclkPin = 7;  // Serial Clock

// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}

void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();

  // Name the day of the week.
  const String day = dayAsString(t.day);

  // Format the time and date and insert into the temporary buffer.
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);

  // Print the formatted string to serial so we can see the time.
  Serial.println(buf);
}

}  // namespace

void setup() {
  Serial.begin(9600);

  // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.
  rtc.writeProtect(false);
  rtc.halt(false);

  // Make a new time object to set the date and time.
  // Sunday, January 18, 2015 at 21:11:50.
  Time t(2015, 01, 18, 21, 11, 50, Time::kSunday);

  // Set the time and date on the chip.
  rtc.time(t);
}

// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

2015年1月12日 星期一

Romanza Lyrics

Lyrics to Romanza Già la sento, già la sento morire, però è calma sembra voglia dormire; poi con gli occhi lei mi viene a cercare, poi si toglie anche l'ultimo velo, anche l'ultimo cielo, anche l'ultimo bacio. Ah, forse colpa mia, ah, forse colpa tua, e così son rimasto a pensare. Ma la vita, ma la vita cos'è tutto o niente, forse neanche un perchè. Con le mani lei me viene a cercare, poi mi stringe, lentamente mi lascia, lentamente mi stringe, lentamente mi cerca. Ah, forse colpa mia, ah, forse colpa tua, e così sono rimasto a guardare. E lo chiamano amore, e lo chiamano amore, e lo chiamano amore una spina nel cuore che non fa dolore. È un deserto questa gente con la sabbia in fondo al cuore e tu, che non mi senti più, che non mi vedi più, avessi almeno il coraggio e la forza di dirti che sono con te. (Ave Maria, ave Maria.) Ah, forse colpa mia, ah, forse colpa mia, e così son rimasto così son rimasto così. Già la sento che non può più sentire; in silenzio se n'è andata a dormire, è già andata a dormire.

2015年1月11日 星期日

Arduino_Ethercard_4 Relayboard_web control

#include static byte mymac[] = { 0x5A,0x5A,0x5A,0x5A,0x5A,0x5A }; static byte myip[] = { 192,168,1,222 }; byte Ethernet::buffer[900]; BufferFiller bfill; int LedPins[] = { 2,3,4,5}; boolean PinStatus[] = { 1,2,3,4}; const char http_OK[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n\r\n"; const char http_Found[] PROGMEM = "HTTP/1.0 302 Found\r\n" "Location: /\r\n\r\n"; const char http_Unauthorized[] PROGMEM = "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n\r\n" "

401 Unauthorized

"; void homePage() { bfill.emit_p(PSTR("$F" "ArduinoPIN Webserver" "Relay 1: $F
" "Relay 2: $F
" "Relay 3: $F
" "Relay 4: $F"), http_OK, PinStatus[1]?PSTR("off"):PSTR("on"), PinStatus[1]?PSTR("ON"):PSTR("OFF"), PinStatus[2]?PSTR("off"):PSTR("on"), PinStatus[2]?PSTR("ON"):PSTR("OFF"), PinStatus[3]?PSTR("off"):PSTR("on"), PinStatus[3]?PSTR("ON"):PSTR("OFF"), PinStatus[4]?PSTR("off"):PSTR("on"), PinStatus[4]?PSTR("ON"):PSTR("OFF")); } void setup() { Serial.begin(9600); if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0); if (!ether.dhcpSetup()); ether.printIp("My Router IP: ", ether.myip); ether.printIp("My SET IP: ", ether.myip); for(int i = 0; i <= 4; i++) { pinMode(LedPins[i],OUTPUT); digitalWrite (LedPins[i],HIGH); PinStatus[i]=false; } } void loop() { delay(1); word len = ether.packetReceive(); // check for ethernet packet / word pos = ether.packetLoop(len); // check for tcp packet / if (pos) { bfill = ether.tcpOffset(); char *data = (char *) Ethernet::buffer + pos; if (strncmp("GET /", data, 5) != 0) { bfill.emit_p(http_Unauthorized); } else { data += 5; if (data[0] == ' ') { homePage(); // Return home page for (int i = 0; i <= 3; i++)digitalWrite(LedPins[i],!PinStatus[i+1]); } else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) { PinStatus[1] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) { PinStatus[2] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) { PinStatus[3] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) { PinStatus[4] = true; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) { PinStatus[1] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) { PinStatus[2] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) { PinStatus[3] = false; bfill.emit_p(http_Found); } else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) { PinStatus[4] = false; bfill.emit_p(http_Found); } else { // Page not found bfill.emit_p(http_Unauthorized); } } ether.httpServerReply(bfill.position()); // send http response } }

Arduino_ENC28j60_RBBB server

Wire up as following
 - SO -> Arduino pin 12
-  SI -> Arduino pin 11
-  SCK -> Arduino pin 13
-  CS -> Arduino pin 8
-  VCC -> Arduino  5V/(3V3) pin
-  GND -> Arduino Gnd pin

#include "EtherCard.h"

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,1,199 };

byte Ethernet::buffer[500];
BufferFiller bfill;

void setup () {
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);
}

static word homePage() {
  long t = millis() / 1000;
  word h = t / 3600;
  byte m = (t / 60) % 60;
  byte s = t % 60;
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "#meta http-equiv='refresh' content='1'/>"
    "#title>RBBB server#/title>"
    "#h1>$D$D:$D$D:$D$D#/h1>"),   
      h/10, h%10, m/10, m%10, s/10, s%10);
  return bfill.position();
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
 
  if (pos)  // check if valid tcp data is received
    ether.httpServerReply(homePage()); // send web page data

Compile and upload
Browsing the IP
Then, You will see RBBB server runing...

2015年1月9日 星期五

Arduino pro mini_DS18b20_LCDI2S_SDcard

 [SD]              --    [Arduino]
CS or SDCS  --    D10 or D4
MOSI             --    D11
MISO             --    D12
CLK or SCK   --    D13


#include "OneWire.h"
#include "DallasTemperature.h"
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "SD.h"

int row =0;
LiquidCrystal_I2C lcd(0x27, 16,2);

// Arduino數位腳位9接到1-Wire裝置
#define ONE_WIRE_BUS 9
// 運用程式庫建立物件
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

unsigned long time;

void setup(void)
{

  Serial.begin(9600);
 
  pinMode(10, OUTPUT);

  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
   
  sensors.begin();
  //lcd.begin(16,2);
  lcd.init();  
  lcd.backlight();

// initial

  Serial.println("CLEARDATA");
  Serial.println("LABEL,Time,Timer,Temperature1,Temperature2,");

}

void loop(void)
{
  // 要求匯流排上的所有感測器進行溫度轉換
  sensors.requestTemperatures();

  // 參數0代表匯流排上第0個1-Wire裝置
 
  //Serial.print("DATA,TIME");
  Serial.print("DATA,TIME");
  Serial.print(",");
  Serial.print("TIMER");
  Serial.print(",");
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print(",");
  Serial.print(sensors.getTempCByIndex(1));
  Serial.println(",");

  row ++;

  //超過10000行資料後就覆蓋舊資料
  /*
  if (row > 10000)
  {
    row=0;
    Serial.println("ROW,SET,2");
  }
  */

  lcd.setCursor(0, 0);
  lcd.print("SensorA:");
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print("C");
  lcd.setCursor(0, 1);
  lcd.print("SensorB:");
  lcd.print(sensors.getTempCByIndex(1));
  lcd.print("C");
 
  File dataFile = SD.open("Data.TXT",FILE_WRITE);
  if (dataFile){
    time = millis();
    dataFile.print(time);
    dataFile.print(",");
    dataFile.print(sensors.getTempCByIndex(0));
    dataFile.print(",");
    dataFile.println(sensors.getTempCByIndex(1));

  }
  dataFile.close(); 
   
  delay(100);
}


//http://playground.arduino.cc/Learning/OneWire
//https://github.com/milesburton/Arduino-Temperature-Control-Library
//http://arduino-info.wikispaces.com/file/view/LiquidCrystal_I2C1602V1.zip

2015年1月8日 星期四

Merge DS18b20 & 1602 i2c pde

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
#include "OneWire.h"
#include "DallasTemperature.h"

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LiquidCrystal_I2C lcd(0x27,16,2); 
void setup()
{
 lcd.init();            
 lcd.backlight();
 lcd.print("Room Temperature");

  Serial.begin(115200);
  Serial.println("Temperature Sensor");

  sensors.begin();
}
void loop()
{
  sensors.requestTemperatures();

  Serial.println(sensors.getTempCByIndex(0));
  lcd.setCursor(5, 1);
  lcd.print(sensors.getTempCByIndex(0));
  lcd.print(" C");
  delay(1000);
}

2015年1月7日 星期三

Arduino DS18b20 & 1602 i2c

Temperature DS18b20

#include "OneWire.h"
#include "DallasTemperature.h"

// Arduino數位腳位2接到1-Wire裝置
#define ONE_WIRE_BUS 2

// 運用程式庫建立物件
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup(void)
{
  Serial.begin(115200);
  Serial.println("Temperature Sensor");
  // 初使化
  sensors.begin();
}

void loop(void)
{
  // 要求匯流排上的所有感測器進行溫度轉換(不過我只有一個)
  sensors.requestTemperatures();

  // 取得溫度讀數(攝氏)並輸出,
  // 參數0代表匯流排上第0個1-Wire裝置
  Serial.println(sensors.getTempCByIndex(0));

  delay(1000);
}

LCD 1602 i2c

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
 lcd.init();                      // initialize the lcd
 // Print a message to the LCD.
 lcd.backlight();
 lcd.print("Hello, Dennis Liao!");
}
void loop()
{
}

2015年1月4日 星期日

Arduino IR remote control

ref. Ken Shirriff's blog
http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

Step 1.
The examples/IRrecvDemo sketch provides a simple example of how to receive codes:

#include "IRremote.h"

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
 


  if (irrecv.decode(&results)) {
    Serial.print(results.value, HEX);

    Serial.print(", bits is ");
    Serial.print(results.bits);
    Serial.print(", decode_type is ");
    Serial.println(results.decode_type);
    irrecv.resume(); // Receive the next value
  }
}
 
#define NEC 1
#define SONY 2
#define RC5 3
#define RC6 4
#define DISH 5
#define SHARP 6
#define PANASONIC 7
#define JVC 8
#define SANYO 9
#define MITSUBISHI 10
#define UNKNOWN -1 

Step 2.

#include "IRremote.h"

int receiver = 11; // pin 11 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver);           // create instance of 'irrecv'
decode_results results;            // create instance of 'decode_results'

void setup()  
{
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  irrecv.enableIRIn(); // Start the receiver
}

void loop()  
{
  if (irrecv.decode(&results))
  {
    translateIR();
    irrecv.resume();
  } 
}

void translateIR() // takes action based on IR code received
{
  switch(results.value)
  {
  case 0xE995F5AE: 
    Serial.println(" CH-            ");
    break;

  case 0x8311AD20: 
    Serial.println(" CH+            ");
    break;

  default:
    Serial.println(" other button   ");
  }
  delay(500);