diff --git a/code/Barrier.cpp b/code/Barrier.cpp index 4be3e2a..bf5ce20 100644 --- a/code/Barrier.cpp +++ b/code/Barrier.cpp @@ -24,13 +24,17 @@ class Barrier { } void open(){ - this->state = OPEN; - this->servo.write(0); + if (this->state != OPEN){ + this->state = OPEN; + this->servo.write(0); + } } void close(){ - this->state = CLOSED; - this->servo.write(90); + if(this->state != CLOSED){ + this->state = CLOSED; + this->servo.write(90); + } } bool is_open() const { diff --git a/code/DistSensor.cpp b/code/DistSensor.cpp index 36ddef5..abe839b 100644 --- a/code/DistSensor.cpp +++ b/code/DistSensor.cpp @@ -3,34 +3,34 @@ class DistSensor { private: - int trigPin; - int echoPin; + int trig_pin; + int echo_pin; const int ULTRASONIC_CM_FACTOR = 58; void make_measurement(){ - digitalWrite(this->trigPin, HIGH); + digitalWrite(this->trig_pin, HIGH); delayMicroseconds(10); - digitalWrite(this->trigPin, LOW); + digitalWrite(this->trig_pin, LOW); } public: int duration; float default_distance; - DistSensor(int trigPin, int echoPin, float default_distance){ - this->trigPin = trigPin; - this->echoPin = echoPin; + DistSensor(int trig_pin, int echo_pin, float default_distance){ + this->trig_pin = trig_pin; + this->echo_pin = echo_pin; this->default_distance = default_distance; } void configure_pins(){ - pinMode(this->trigPin, OUTPUT); - pinMode(this->echoPin, INPUT); + pinMode(this->trig_pin, OUTPUT); + pinMode(this->echo_pin, INPUT); } int get_duration(){ this->make_measurement(); - this->duration = pulseIn(this->echoPin, HIGH); + this->duration = pulseIn(this->echo_pin, HIGH); return this->duration; } diff --git a/code/LCDScreen.cpp b/code/LCDScreen.cpp new file mode 100644 index 0000000..e9e2f64 --- /dev/null +++ b/code/LCDScreen.cpp @@ -0,0 +1,54 @@ +#include +#include + +enum LCDScreenState { + DISPLAY_DEFAULT_MESSAGE, + DISPLAY_TEMPERATURE, + DISPLAY_PARKING_SPOTS +}; + +class LCDScreen { + + private: + LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27,20,4); + LCDScreenState state; + String default_message = "Bem vindo!"; + + public: + LCDScreen(String default_message = ""){ + if (default_message != ""){ + this->default_message = default_message; + } + } + + void init(){ + lcd.init(); + lcd.backlight(); + this->display_default_message(); + } + + void clear(){ + lcd.clear(); + } + + void display_temperature(float temp){ + if (this->state != DISPLAY_TEMPERATURE){ + this->clear(); + this->state = DISPLAY_TEMPERATURE; + } + lcd.setCursor(0, 0); + lcd.print("Temp: "); + lcd.print(temp,1); + lcd.print(" C "); + } + + void display_default_message(){ + if (this->state != DISPLAY_DEFAULT_MESSAGE){ + this->clear(); + this->state = DISPLAY_DEFAULT_MESSAGE; + } + lcd.setCursor(0, 0); + lcd.print(this->default_message); + } + +}; \ No newline at end of file diff --git a/code/code.ino b/code/code.ino index 531a154..0e4d921 100644 --- a/code/code.ino +++ b/code/code.ino @@ -1,37 +1,56 @@ -#include +#include +#include +#include #include "Barrier.cpp"; #include "DistSensor.cpp"; +#include "LCDScreen.cpp"; #define ULTRASONIC_SENSOR_PIN_TRIG 11 #define ULTRASONIC_SENSOR_PIN_ECHO 12 #define SERVO_PIN 10 +#define TEMP_SENSOR_PIN 9 -unsigned long previous_time = 0; +OneWire oneWire(TEMP_SENSOR_PIN); +DallasTemperature temperature_sensors(&oneWire); DistSensor dist_sensor = DistSensor(ULTRASONIC_SENSOR_PIN_TRIG, ULTRASONIC_SENSOR_PIN_ECHO, 25.0); -Barrier barrier = Barrier(SERVO_PIN, 3); +Barrier barrier = Barrier(SERVO_PIN, 4); +LCDScreen screen = LCDScreen(); + +unsigned long current_time, sensor_last_time_activated, temperature_last_time_measured; + +float temperature_in_c = 0; void setup() { - Serial.begin(115200); + Serial.begin(9600); dist_sensor.configure_pins(); barrier.configure_pins(); + temperature_sensors.begin(); + screen.init(); + } void loop() { - unsigned long current_time = millis(); + current_time = millis(); if (dist_sensor.is_in_range()){ - previous_time = current_time; + sensor_last_time_activated = current_time; if(barrier.is_closed()){ barrier.open(); } } else if (!dist_sensor.is_in_range() && barrier.is_open()){ - if (current_time - previous_time >= barrier.open_time_seconds * 1000){ + if (current_time - sensor_last_time_activated >= barrier.open_time_seconds * 1000){ barrier.close(); } - } + if (current_time - temperature_last_time_measured >= 1000){ + temperature_last_time_measured = current_time; + temperature_sensors.requestTemperatures(); + temperature_in_c = temperature_sensors.getTempCByIndex(0); + } + + screen.display_temperature(temperature_in_c); } diff --git a/diagram.json b/diagram.json index cdb4985..4553d45 100644 --- a/diagram.json +++ b/diagram.json @@ -90,20 +90,20 @@ [ "lcd1:VCC", "bb1:tp.29", "red", [ "h0" ] ], [ "lcd1:SDA", "bb1:37b.f", "gray", [ "h0" ] ], [ "lcd1:SCL", "bb1:38b.f", "purple", [ "h0" ] ], - [ "bb1:37b.g", "uno:A5", "gray", [ "v1.6", "h-283.9" ] ], - [ "bb1:38b.h", "uno:A4", "purple", [ "v1.6", "h-303" ] ], + [ "bb1:59b.f", "bb1:59t.e", "red", [ "v0" ] ], + [ "bb1:57b.f", "bb1:57t.e", "black", [ "v0" ] ], + [ "uno:9", "bb1:58t.d", "blue", [ "v480", "h519.2", "v-136" ] ], + [ "bb1:58b.f", "bb1:58t.e", "violet", [ "v0" ] ], [ "btn1:1.l", "bb1:4t.c", "", [ "$bb" ] ], [ "btn1:2.l", "bb1:2t.c", "", [ "$bb" ] ], [ "btn1:1.r", "bb1:4b.h", "", [ "$bb" ] ], [ "btn1:2.r", "bb1:2b.h", "", [ "$bb" ] ], - [ "bb1:59b.f", "bb1:59t.e", "red", [ "v0" ] ], - [ "bb1:57b.f", "bb1:57t.e", "black", [ "v0" ] ], + [ "r1:1", "bb1:58b.g", "", [ "$bb" ] ], [ "temp1:GND", "bb1:57t.c", "", [ "$bb" ] ], [ "temp1:DQ", "bb1:58t.c", "", [ "$bb" ] ], [ "temp1:VCC", "bb1:59t.c", "", [ "$bb" ] ], - [ "uno:9", "bb1:58t.d", "blue", [ "v480", "h519.2", "v-136" ] ], - [ "r1:1", "bb1:58b.g", "", [ "$bb" ] ], - [ "bb1:58b.f", "bb1:58t.e", "violet", [ "v0" ] ] + [ "uno:A4", "bb1:37b.g", "gray", [ "v0" ] ], + [ "uno:A5", "bb1:38b.h", "purple", [ "v0" ] ] ], "dependencies": {} } \ No newline at end of file diff --git a/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.cpp b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.cpp new file mode 100644 index 0000000..79f4389 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.cpp @@ -0,0 +1,315 @@ +// Based on the work by DFRobot + +#include "LiquidCrystal_I2C.h" +#include +#if defined(ARDUINO) && ARDUINO >= 100 + +#include "Arduino.h" + +#define printIIC(args) Wire.write(args) +inline size_t LiquidCrystal_I2C::write(uint8_t value) { + send(value, Rs); + return 1; +} + +#else +#include "WProgram.h" + +#define printIIC(args) Wire.send(args) +inline void LiquidCrystal_I2C::write(uint8_t value) { + send(value, Rs); +} + +#endif +#include "Wire.h" + + + +// When the display powers up, it is configured as follows: +// +// 1. Display clear +// 2. Function set: +// DL = 1; 8-bit interface data +// N = 0; 1-line display +// F = 0; 5x8 dot character font +// 3. Display on/off control: +// D = 0; Display off +// C = 0; Cursor off +// B = 0; Blinking off +// 4. Entry mode set: +// I/D = 1; Increment by 1 +// S = 0; No shift +// +// Note, however, that resetting the Arduino doesn't reset the LCD, so we +// can't assume that its in that state when a sketch starts (and the +// LiquidCrystal constructor is called). + +LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows) +{ + _Addr = lcd_Addr; + _cols = lcd_cols; + _rows = lcd_rows; + _backlightval = LCD_NOBACKLIGHT; +} + +void LiquidCrystal_I2C::init(){ + init_priv(); +} + +void LiquidCrystal_I2C::init_priv() +{ + Wire.begin(); + _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; + begin(_cols, _rows); +} + +void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { + if (lines > 1) { + _displayfunction |= LCD_2LINE; + } + _numlines = lines; + + // for some 1 line displays you can select a 10 pixel high font + if ((dotsize != 0) && (lines == 1)) { + _displayfunction |= LCD_5x10DOTS; + } + + // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! + // according to datasheet, we need at least 40ms after power rises above 2.7V + // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 + delay(50); + + // Now we pull both RS and R/W low to begin commands + expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) + delay(1000); + + //put the LCD into 4 bit mode + // this is according to the hitachi HD44780 datasheet + // figure 24, pg 46 + + // we start in 8bit mode, try to set 4 bit mode + write4bits(0x03 << 4); + delayMicroseconds(4500); // wait min 4.1ms + + // second try + write4bits(0x03 << 4); + delayMicroseconds(4500); // wait min 4.1ms + + // third go! + write4bits(0x03 << 4); + delayMicroseconds(150); + + // finally, set to 4-bit interface + write4bits(0x02 << 4); + + + // set # lines, font size, etc. + command(LCD_FUNCTIONSET | _displayfunction); + + // turn the display on with no cursor or blinking default + _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; + display(); + + // clear it off + clear(); + + // Initialize to default text direction (for roman languages) + _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; + + // set the entry mode + command(LCD_ENTRYMODESET | _displaymode); + + home(); + +} + +/********** high level commands, for the user! */ +void LiquidCrystal_I2C::clear(){ + command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal_I2C::home(){ + command(LCD_RETURNHOME); // set cursor position to zero + delayMicroseconds(2000); // this command takes a long time! +} + +void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){ + int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; + if ( row > _numlines ) { + row = _numlines-1; // we count rows starting w/0 + } + command(LCD_SETDDRAMADDR | (col + row_offsets[row])); +} + +// Turn the display on/off (quickly) +void LiquidCrystal_I2C::noDisplay() { + _displaycontrol &= ~LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::display() { + _displaycontrol |= LCD_DISPLAYON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turns the underline cursor on/off +void LiquidCrystal_I2C::noCursor() { + _displaycontrol &= ~LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::cursor() { + _displaycontrol |= LCD_CURSORON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// Turn on and off the blinking cursor +void LiquidCrystal_I2C::noBlink() { + _displaycontrol &= ~LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} +void LiquidCrystal_I2C::blink() { + _displaycontrol |= LCD_BLINKON; + command(LCD_DISPLAYCONTROL | _displaycontrol); +} + +// These commands scroll the display without changing the RAM +void LiquidCrystal_I2C::scrollDisplayLeft(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); +} +void LiquidCrystal_I2C::scrollDisplayRight(void) { + command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); +} + +// This is for text that flows Left to Right +void LiquidCrystal_I2C::leftToRight(void) { + _displaymode |= LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This is for text that flows Right to Left +void LiquidCrystal_I2C::rightToLeft(void) { + _displaymode &= ~LCD_ENTRYLEFT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'right justify' text from the cursor +void LiquidCrystal_I2C::autoscroll(void) { + _displaymode |= LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// This will 'left justify' text from the cursor +void LiquidCrystal_I2C::noAutoscroll(void) { + _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; + command(LCD_ENTRYMODESET | _displaymode); +} + +// Allows us to fill the first 8 CGRAM locations +// with custom characters +void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i=0; i<8; i++) { + write(charmap[i]); + } +} + +// Turn the (optional) backlight off/on +void LiquidCrystal_I2C::noBacklight(void) { + _backlightval=LCD_NOBACKLIGHT; + expanderWrite(0); +} + +void LiquidCrystal_I2C::backlight(void) { + _backlightval=LCD_BACKLIGHT; + expanderWrite(0); +} + + + +/*********** mid level commands, for sending data/cmds */ + +inline void LiquidCrystal_I2C::command(uint8_t value) { + send(value, 0); +} + + +/************ low level data pushing commands **********/ + +// write either command or data +void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { + uint8_t highnib=value&0xf0; + uint8_t lownib=(value<<4)&0xf0; + write4bits((highnib)|mode); + write4bits((lownib)|mode); +} + +void LiquidCrystal_I2C::write4bits(uint8_t value) { + expanderWrite(value); + pulseEnable(value); +} + +void LiquidCrystal_I2C::expanderWrite(uint8_t _data){ + Wire.beginTransmission(_Addr); + printIIC((int)(_data) | _backlightval); + Wire.endTransmission(); +} + +void LiquidCrystal_I2C::pulseEnable(uint8_t _data){ + expanderWrite(_data | En); // En high + delayMicroseconds(1); // enable pulse must be >450ns + + expanderWrite(_data & ~En); // En low + delayMicroseconds(50); // commands need > 37us to settle +} + + +// Alias functions + +void LiquidCrystal_I2C::cursor_on(){ + cursor(); +} + +void LiquidCrystal_I2C::cursor_off(){ + noCursor(); +} + +void LiquidCrystal_I2C::blink_on(){ + blink(); +} + +void LiquidCrystal_I2C::blink_off(){ + noBlink(); +} + +void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){ + createChar(char_num, rows); +} + +void LiquidCrystal_I2C::setBacklight(uint8_t new_val){ + if(new_val){ + backlight(); // turn backlight on + }else{ + noBacklight(); // turn backlight off + } +} + +void LiquidCrystal_I2C::printstr(const char c[]){ + //This function is not identical to the function used for "real" I2C displays + //it's here so the user sketch doesn't have to be changed + print(c); +} + + +// unsupported API functions +void LiquidCrystal_I2C::off(){} +void LiquidCrystal_I2C::on(){} +void LiquidCrystal_I2C::setDelay (int cmdDelay,int charDelay) {} +uint8_t LiquidCrystal_I2C::status(){return 0;} +uint8_t LiquidCrystal_I2C::keypad (){return 0;} +uint8_t LiquidCrystal_I2C::init_bargraph(uint8_t graphtype){return 0;} +void LiquidCrystal_I2C::draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end){} +void LiquidCrystal_I2C::draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_row_end){} +void LiquidCrystal_I2C::setContrast(uint8_t new_val){} + + diff --git a/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.h b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.h new file mode 100644 index 0000000..201be33 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.h @@ -0,0 +1,126 @@ +//YWROBOT +#ifndef LiquidCrystal_I2C_h +#define LiquidCrystal_I2C_h + +#include +#include "Print.h" +#include + +// commands +#define LCD_CLEARDISPLAY 0x01 +#define LCD_RETURNHOME 0x02 +#define LCD_ENTRYMODESET 0x04 +#define LCD_DISPLAYCONTROL 0x08 +#define LCD_CURSORSHIFT 0x10 +#define LCD_FUNCTIONSET 0x20 +#define LCD_SETCGRAMADDR 0x40 +#define LCD_SETDDRAMADDR 0x80 + +// flags for display entry mode +#define LCD_ENTRYRIGHT 0x00 +#define LCD_ENTRYLEFT 0x02 +#define LCD_ENTRYSHIFTINCREMENT 0x01 +#define LCD_ENTRYSHIFTDECREMENT 0x00 + +// flags for display on/off control +#define LCD_DISPLAYON 0x04 +#define LCD_DISPLAYOFF 0x00 +#define LCD_CURSORON 0x02 +#define LCD_CURSOROFF 0x00 +#define LCD_BLINKON 0x01 +#define LCD_BLINKOFF 0x00 + +// flags for display/cursor shift +#define LCD_DISPLAYMOVE 0x08 +#define LCD_CURSORMOVE 0x00 +#define LCD_MOVERIGHT 0x04 +#define LCD_MOVELEFT 0x00 + +// flags for function set +#define LCD_8BITMODE 0x10 +#define LCD_4BITMODE 0x00 +#define LCD_2LINE 0x08 +#define LCD_1LINE 0x00 +#define LCD_5x10DOTS 0x04 +#define LCD_5x8DOTS 0x00 + +// flags for backlight control +#define LCD_BACKLIGHT 0x08 +#define LCD_NOBACKLIGHT 0x00 + +#define En B00000100 // Enable bit +#define Rw B00000010 // Read/Write bit +#define Rs B00000001 // Register select bit + +class LiquidCrystal_I2C : public Print { +public: + LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); + void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); + void clear(); + void home(); + void noDisplay(); + void display(); + void noBlink(); + void blink(); + void noCursor(); + void cursor(); + void scrollDisplayLeft(); + void scrollDisplayRight(); + void printLeft(); + void printRight(); + void leftToRight(); + void rightToLeft(); + void shiftIncrement(); + void shiftDecrement(); + void noBacklight(); + void backlight(); + void autoscroll(); + void noAutoscroll(); + void createChar(uint8_t, uint8_t[]); + void setCursor(uint8_t, uint8_t); +#if defined(ARDUINO) && ARDUINO >= 100 + virtual size_t write(uint8_t); +#else + virtual void write(uint8_t); +#endif + void command(uint8_t); + void init(); + +////compatibility API function aliases +void blink_on(); // alias for blink() +void blink_off(); // alias for noBlink() +void cursor_on(); // alias for cursor() +void cursor_off(); // alias for noCursor() +void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() +void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() +void printstr(const char[]); + +////Unsupported API functions (not implemented in this library) +uint8_t status(); +void setContrast(uint8_t new_val); +uint8_t keypad(); +void setDelay(int,int); +void on(); +void off(); +uint8_t init_bargraph(uint8_t graphtype); +void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); +void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end); + + +private: + void init_priv(); + void send(uint8_t, uint8_t); + void write4bits(uint8_t); + void expanderWrite(uint8_t); + void pulseEnable(uint8_t); + uint8_t _Addr; + uint8_t _displayfunction; + uint8_t _displaycontrol; + uint8_t _displaymode; + uint8_t _numlines; + uint8_t _cols; + uint8_t _rows; + uint8_t _backlightval; +}; + +#endif diff --git a/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.o b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.o new file mode 100644 index 0000000..bca78e0 Binary files /dev/null and b/libs/LiquidCrystal_I2C-1.1.3/LiquidCrystal_I2C.o differ diff --git a/libs/LiquidCrystal_I2C-1.1.3/README.md b/libs/LiquidCrystal_I2C-1.1.3/README.md new file mode 100644 index 0000000..aee58d3 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/README.md @@ -0,0 +1,2 @@ +# LiquidCrystal_I2C +LiquidCrystal Arduino library for the DFRobot I2C LCD displays diff --git a/libs/LiquidCrystal_I2C-1.1.3/examples/CustomChars/CustomChars.pde b/libs/LiquidCrystal_I2C-1.1.3/examples/CustomChars/CustomChars.pde new file mode 100644 index 0000000..beea6d6 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/examples/CustomChars/CustomChars.pde @@ -0,0 +1,70 @@ +//YWROBOT +//Compatible with the Arduino IDE 1.0 +//Library version:1.1 +#include +#include + +#if defined(ARDUINO) && ARDUINO >= 100 +#define printByte(args) write(args); +#else +#define printByte(args) print(args,BYTE); +#endif + +uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; +uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0}; +uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; +uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; +uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0}; +uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0}; +uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0}; +uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; + +LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + lcd.backlight(); + + lcd.createChar(0, bell); + lcd.createChar(1, note); + lcd.createChar(2, clock); + lcd.createChar(3, heart); + lcd.createChar(4, duck); + lcd.createChar(5, check); + lcd.createChar(6, cross); + lcd.createChar(7, retarrow); + lcd.home(); + + lcd.print("Hello world..."); + lcd.setCursor(0, 1); + lcd.print(" i "); + lcd.printByte(3); + lcd.print(" arduinos!"); + delay(5000); + displayKeyCodes(); + +} + +// display all keycodes +void displayKeyCodes(void) { + uint8_t i = 0; + while (1) { + lcd.clear(); + lcd.print("Codes 0x"); lcd.print(i, HEX); + lcd.print("-0x"); lcd.print(i+16, HEX); + lcd.setCursor(0, 1); + for (int j=0; j<16; j++) { + lcd.printByte(i+j); + } + i+=16; + + delay(4000); + } +} + +void loop() +{ + +} + diff --git a/libs/LiquidCrystal_I2C-1.1.3/examples/HelloWorld/HelloWorld.pde b/libs/LiquidCrystal_I2C-1.1.3/examples/HelloWorld/HelloWorld.pde new file mode 100644 index 0000000..458c6d8 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/examples/HelloWorld/HelloWorld.pde @@ -0,0 +1,28 @@ +//YWROBOT +//Compatible with the Arduino IDE 1.0 +//Library version:1.1 +#include +#include + +LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + lcd.init(); + // Print a message to the LCD. + lcd.backlight(); + lcd.setCursor(3,0); + lcd.print("Hello, world!"); + lcd.setCursor(2,1); + lcd.print("Ywrobot Arduino!"); + lcd.setCursor(0,2); + lcd.print("Arduino LCM IIC 2004"); + lcd.setCursor(2,3); + lcd.print("Power By Ec-yuan!"); +} + + +void loop() +{ +} diff --git a/libs/LiquidCrystal_I2C-1.1.3/examples/SerialDisplay/SerialDisplay.pde b/libs/LiquidCrystal_I2C-1.1.3/examples/SerialDisplay/SerialDisplay.pde new file mode 100644 index 0000000..1fca4e1 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/examples/SerialDisplay/SerialDisplay.pde @@ -0,0 +1,34 @@ +/* + * Displays text sent over the serial port (e.g. from the Serial Monitor) on + * an attached LCD. + * YWROBOT + *Compatible with the Arduino IDE 1.0 + *Library version:1.1 + */ +#include +#include + +LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display + +void setup() +{ + lcd.init(); // initialize the lcd + lcd.backlight(); + Serial.begin(9600); +} + +void loop() +{ + // when characters arrive over the serial port... + if (Serial.available()) { + // wait a bit for the entire message to arrive + delay(100); + // clear the screen + lcd.clear(); + // read all the available characters + while (Serial.available() > 0) { + // display each character to the LCD + lcd.write(Serial.read()); + } + } +} diff --git a/libs/LiquidCrystal_I2C-1.1.3/keywords.txt b/libs/LiquidCrystal_I2C-1.1.3/keywords.txt new file mode 100644 index 0000000..8c450a9 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/keywords.txt @@ -0,0 +1,46 @@ +########################################### +# Syntax Coloring Map For LiquidCrystal_I2C +########################################### + +########################################### +# Datatypes (KEYWORD1) +########################################### + +LiquidCrystal_I2C KEYWORD1 + +########################################### +# Methods and Functions (KEYWORD2) +########################################### +init KEYWORD2 +begin KEYWORD2 +clear KEYWORD2 +home KEYWORD2 +noDisplay KEYWORD2 +display KEYWORD2 +noBlink KEYWORD2 +blink KEYWORD2 +noCursor KEYWORD2 +cursor KEYWORD2 +scrollDisplayLeft KEYWORD2 +scrollDisplayRight KEYWORD2 +leftToRight KEYWORD2 +rightToLeft KEYWORD2 +shiftIncrement KEYWORD2 +shiftDecrement KEYWORD2 +noBacklight KEYWORD2 +backlight KEYWORD2 +autoscroll KEYWORD2 +noAutoscroll KEYWORD2 +createChar KEYWORD2 +setCursor KEYWORD2 +print KEYWORD2 +blink_on KEYWORD2 +blink_off KEYWORD2 +cursor_on KEYWORD2 +cursor_off KEYWORD2 +setBacklight KEYWORD2 +load_custom_character KEYWORD2 +printstr KEYWORD2 +########################################### +# Constants (LITERAL1) +########################################### diff --git a/libs/LiquidCrystal_I2C-1.1.3/library.json b/libs/LiquidCrystal_I2C-1.1.3/library.json new file mode 100644 index 0000000..5a23a39 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/library.json @@ -0,0 +1,15 @@ +{ + "name": "LiquidCrystal_I2C", + "keywords": "LCD, liquidcrystal, I2C", + "description": "A library for DFRobot I2C LCD displays", + "repository": + { + "type": "git", + "url": "https://github.com/marcoschwartz/LiquidCrystal_I2C.git" + }, + "frameworks": "arduino", + "platforms": + [ + "atmelavr" + ] +} \ No newline at end of file diff --git a/libs/LiquidCrystal_I2C-1.1.3/library.properties b/libs/LiquidCrystal_I2C-1.1.3/library.properties new file mode 100644 index 0000000..236bd84 --- /dev/null +++ b/libs/LiquidCrystal_I2C-1.1.3/library.properties @@ -0,0 +1,9 @@ +name=LiquidCrystal_I2C +version=1.1.2 +author=Frank de Brabander +maintainer=Marco Schwartz +sentence=A library for I2C LCD displays. +paragraph= The library allows to control I2C displays with functions extremely similar to LiquidCrystal library. THIS LIBRARY MIGHT NOT BE COMPATIBLE WITH EXISTING SKETCHES. +category=Display +url=https://github.com/marcoschwartz/LiquidCrystal_I2C +architectures=avr