Arch Cookbook
.
This is a part of Arch Cookbook.
Recipe 7: Working with RTC
Ingredients
In addition to things listed in Recipe 1, we require
- Grove - Serial LCD
- Grove - RTC
Procedure
- Connect Grove - Serial LCD to on-board grove connector marked UART.
- Connect Grove - RTC to on board grove connector markded I2C.
- Build and upload the program to Arch platform. follow procedure listed in Recipe 1.
The following program demonstrates a watch.
Import program
00001 #include "mbed.h" 00002 #include "SerialLCD.h" 00003 #include "ds1307.h" 00004 00005 SerialLCD lcd(P1_13, P1_14); // Grove Serial LCD is connected to UART Tx and Rx pins 00006 DS1307 rtc(P0_5, P0_4); // Grove RTC is connected to I2C SDA(P0_5) and SCL(P0_4) 00007 00008 int main() { 00009 const char *week[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 00010 int sec, min, hour, day, date, month, year; 00011 char strBuffer[16]; 00012 00013 lcd.begin(); 00014 lcd.print("Clock"); 00015 rtc.start_clock(); 00016 rtc.gettime(&sec, &min, &hour, &day, &date, &month, &year); 00017 if (0 == year) { 00018 rtc.settime(0, 0, 0, 4, 1, 1, 2014 % 100); // Jan 1st, 2014, Wed, 00:00:00 00019 } 00020 00021 while(1) { 00022 rtc.gettime(&sec, &min, &hour, &day, &date, &month, &year); 00023 snprintf(strBuffer, sizeof(strBuffer), "%d-%d-%d %s", 2000 + year, month, date, week[day]); 00024 lcd.setCursor(0, 0); 00025 lcd.print(strBuffer); 00026 snprintf(strBuffer, sizeof(strBuffer), "%d:%d:%d", hour, min, sec); 00027 lcd.setCursor(0, 1); 00028 lcd.print(strBuffer); 00029 wait(0.5); 00030 } 00031 } 00032 00033
Recipe 8: Working with USB Keyboard
Ingredients
In addition to things listed in Recipe 1, we require
- Grove - Button
Procedure
- Connect Grove - Button to on-board grove connector marked UART.
- Build and upload the program to Arch platform. follow procedure listed in Recipe 1.
The following program demonstrates a USB keyboard with one button. Press the button to mute your computer and press CapsLock, NumLock or ScrollLock of your keyboard to turn on/off Arch's LEDs.
Import program
00001 #include "mbed.h" 00002 #include "USBKeyboard.h" 00003 00004 //LED1: NUM_LOCK, LED2: CAPS_LOCK, LED3: SCROLL_LOCK 00005 BusOut leds(LED1, LED2, LED3); 00006 DigitalOut button(P1_14); // Configure P1_14 pin as input 00007 USBKeyboard keyboard; 00008 00009 int main() { 00010 int buttonPressedCount = 0; 00011 00012 while (!keyboard.configured()) { // wait until keyboard is configured 00013 } 00014 00015 while (1) { 00016 leds = keyboard.lockStatus(); 00017 00018 if (button.read()) { 00019 buttonPressedCount++; 00020 if (2 == buttonPressedCount) { // when button is pressed about 0.02s 00021 keyboard.mediaControl(KEY_MUTE); // send mute key 00022 } 00023 } else { 00024 buttonPressedCount = 0; 00025 } 00026 wait(0.01); 00027 } 00028 }
The following program implements an automatic input keyboard triggered by CapsLock key (for Windows). When the CapsLock key is pressed, a website is opened by IE.
Import program
00001 #include "mbed.h" 00002 #include "USBKeyboard.h" 00003 00004 //LED1: NUM_LOCK, LED2: CAPS_LOCK, LED3: SCROLL_LOCK 00005 BusOut leds(LED1, LED2, LED3); 00006 USBKeyboard keyboard; 00007 00008 int main(void) { 00009 uint8_t caps; // status of CapsLock 00010 00011 while (!keyboard.configured()) { // wait until keyboard is configured 00012 } 00013 00014 while (1) { 00015 leds = keyboard.lockStatus(); 00016 caps = keyboard.lockStatus() & 0x2; 00017 00018 // wait until CapsLock is pressed 00019 while ((keyboard.lockStatus() & 0x2) == caps) { 00020 leds = keyboard.lockStatus(); 00021 } 00022 00023 if (!caps) { 00024 keyboard.keyCode(KEY_CAPS_LOCK); // lowercase input 00025 } 00026 00027 // Automatic input 00028 keyboard.keyCode('r', 0x08); // win + r 00029 wait(0.1); 00030 keyboard.puts("iexplore http://seeedstudio.com\n\n"); 00031 } 00032 }
Please log in to post comments.