The project is a smart task-tracking robot that helps young adults stay focused and motivated throughout the day. The device allows the user to:
Set daily tasks (number + duration) through a mobile app or interface.
Tracks their progress using a real-time countdown system.
Provides motivational messages and visual feedback on a screen if you win
at first of design i opened a new component and started with the face first making the sketch and mak it fully defined then i opened the placement for the 2 oled and lcd screen and make circles 3 m for the screw and nuts , after that extroded it to 0.3 (wood thikness) and add applience with wood matriel
for the head component,
as the same at the face i made it component and as it will be 3d printed i make the appliance of it with plastic
for the head front ,
this part will have the arduino inside it so i joint the arduino component and mke the screw places at it to hold the arduino and at one side i opend the places for usb and power supply
project time line
first thing 3d printing:
part 1 the head:
after finishing it at fusion I exported this file as stl for print it
i set the settings for the support touching buildplate and opened the adhesion to avoid the design to move while fabrication,
for the infill i needed to make it lighting to use the Minimum quantity of the PLA grams.
for the layer hight i needed it to be smooth so i made it 0.1
after editing the parameters i saved it as stl to send it to the lab to be an overnight print, and saved a copy for me as gcode to be ready for the machine if i needed it.
first thing 3d printing:
part 2 the back:
as what i did at the part one i made at this part but i changed the layer height to be 0.3 as no need to be smooth and i had limited grams so i needed the minimum quantity.
first thing 3d printing:
part 2 the back:
as what i did at the part one i made at this part but i changed the layer height to be 0.3 as no need to be smooth and i had limited grams so i needed the minimum quantity.
then for laser cutting:
after finishing at fusion, we need to use the "export for dxf" to export each component at the file (each one alone in a file).
then import the files together at RDworks at the same workspace and arrange them next to each other in the same sheet area.
then i set the parmeters for cutting with speed: 30
and power: 45 as min and 50 as max
then save it as ai to insert at the machine laptop the download it
my file took 1:33 min at the machine and half a sheet
Jumper wires to connect components together
Arduino UNO
9V Adaptor as the power supply
USB to insert the code to Arduino board
220-ohm Resistor for the LEDs
2Leds as an output, green if i did the task and red if i did not
2*Oled output display for animated eye
buzzer as an output, for ring
LCD screen output to show the countdown
input, with it i can tell arduino that i did my task
Bluetooth module and the app to send the signal from the app to Arduino and to insert the time value on it for the tasks
VCC → 5V
GD → GND
SDA → A4
SCL → A5
VCC → 5V
GND → GND
SDA → A4 (نفس SDA للـ LCD)
SCL → A5 (نفس SCL للـ LCD)
الشاشة الأولى عنوانها 0x3C
الشاشة الثانية لازم يكون عنوانها 0x3D
VCC → 5V
GND → GND
TX → Arduino RX (pin 0)
RX → Arduino TX (pin 1) عبر Voltage Divider (مثلاً مقاومة 1k + 2k)
+ → pin 5
- → Gnd
Red LED → pin 6 + مقاومة 220Ω → GND
Green LED → pin 7 + مقاومة 220Ω → GND
One side → pin 2
Other side → GND
the power source is a 9v adaptor
this code is for the timer to show on the lcd
Timer Logic Explanation
When you power on the Arduino, it connects to the Bluetooth module and waits for input.
From the mobile app, you send a number (1, 2, 3, or 4):
1 → 45 minutes
2 → 60 minutes (1 hour)
3 → 30 minutes
4 → 45 minutes
Once a number is received, the countdown timer starts and shows the remaining time on the LCD screen.
During the countdown:
If the pushbutton is pressed before the timer ends, the LCD shows “Winner”, the green LED turns ON, and the buzzer beeps.
If the timer reaches zero without pressing the button, the LCD shows “Loser”, the red LED turns ON, and the buzzer beeps.
When there are 5 minutes left, the buzzer makes a short beep to warn that time is almost finished.
Timer Code Explanation
We use the millis() function instead of delay() to measure time.
millis() gives the number of milliseconds since the Arduino started running.
We compare the current millis() with the previous one to check if 1 second passed
Every second, we decrease the countdown timer and update the LCD.
When time reaches 0 or the button is pressed, we stop the timer and show the result.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins
const int buzzerPin = 5;
const int redLed = 6;
const int greenLed = 7;
const int buttonPin = 2;
// Timer variables
unsigned long prev_millis = 0;
const unsigned long period = 1000; // 1 sec
long remainingTime = 0; // in seconds
bool timerRunning = false;
bool winnerDeclared = false;
// Task times (in seconds)
const long taskTimes[] = {45 * 60, 60 * 60, 30 * 60, 60 * 60};
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // button to GND
digitalWrite(buzzerPin, LOW);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
Serial.begin(9600); // Bluetooth & Serial Monitor share this
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Waiting for");
lcd.setCursor(0,1);
lcd.print("task via BT...");
}
void loop() {
// Check if task selected via Bluetooth
if (Serial.available() && !timerRunning) {
char c = Serial.read();
if (c >= '1' && c <= '4') {
int index = c - '1';
remainingTime = taskTimes[index];
timerRunning = true;
winnerDeclared = false;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Task Started!");
delay(1000);
lcd.clear();
}
}
// Timer running
if (timerRunning) {
unsigned long currentMillis = millis();
if (currentMillis - prev_millis >= period) {
prev_millis = currentMillis;
if (remainingTime > 0) {
remainingTime--;
int hours = remainingTime / 3600;
int minutes = (remainingTime % 3600) / 60;
int seconds = remainingTime % 60;
lcd.setCursor(0,0);
lcd.print("Time Remaining ");
lcd.setCursor(0,1);
if (hours < 10) lcd.print("0");
lcd.print(hours);
lcd.print(":");
if (minutes < 10) lcd.print("0");
lcd.print(minutes);
lcd.print(":");
if (seconds < 10) lcd.print("0");
lcd.print(seconds);
lcd.print(" ");
// Warning buzzer if 5 minutes left
if (remainingTime == 5 * 60) {
tone(buzzerPin, 1000, 500);
}
} else {
// Time finished - loser
if (!winnerDeclared) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time Over!");
lcd.setCursor(0,1);
lcd.print("You are LOSER");
digitalWrite(redLed, HIGH);
tone(buzzerPin, 500, 2000);
timerRunning = false;
}
}
}
// Check button press
if (digitalRead(buttonPin) == LOW && remainingTime > 0 && !winnerDeclared) {
winnerDeclared = true;
timerRunning = false;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Congrats!");
lcd.setCursor(0,1);
lcd.print("You are WINNER");
digitalWrite(greenLed, HIGH);
tone(buzzerPin, 1500, 2000);
}
}
}
this code for oled i get it from gethup and it shows the 2 eyes in one oled so i need to edit it to show the left eye on the left side and right eye on the right side so i had to edit the dimensions of the screen to make the eye zoom in in each one screen and look like a single eye on each one
for the right: nt ref_eye_height = 60; // Increased size for the single eye
int ref_eye_width = 100; // Increased size for the single eye
int ref_space_between_eye = 10;
int ref_corner_radius = 10;
for the left :
/reference state
int ref_eye_height = 60; // Increased size for the single eye
int ref_eye_width = 60; // Increased size for the single eye
int ref_space_between_eye = 10;
int ref_corner_radius = 10;
//current state of the eyes
int left_eye_height = ref_eye_height;
int left_eye_width = ref_eye_width;
int left_eye_x = 32;
int left_eye_y = 32;
int right_eye_x = 32+ref_eye_width+ref_space_between_eye;
int right_eye_y = 32;
int right_eye_height = ref_eye_height;
int right_eye_width = ref_eye_width;
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library.
// On an arduino UNO: A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO: 2(SDA), 3(SCL), ...
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
//Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI);
//uint8_t w, uint8_t h, SPIClass *spi_ptr,
// int8_t dc_pin, int8_t rst_pin, int8_t cs_pin,
// uint32_t bitrate)
// states for demo
int demo_mode = 1;
static const int max_animation_index = 8;
int current_animation_index = 0;
//reference state
int ref_eye_height = 40;
int ref_eye_width = 40;
int ref_space_between_eye = 10;
int ref_corner_radius = 10;
//current state of the eyes
int left_eye_height = ref_eye_height;
int left_eye_width = ref_eye_width;
int left_eye_x = 32;
int left_eye_y = 32;
int right_eye_x = 32+ref_eye_width+ref_space_between_eye;
int right_eye_y = 32;
int right_eye_height = ref_eye_height;
int right_eye_width = ref_eye_width;
void draw_eyes(bool update=true)
{
display.clearDisplay();
//draw from center
int x = int(left_eye_x-left_eye_width/2);
int y = int(left_eye_y-left_eye_height/2);
display.fillRoundRect(x,y,left_eye_width,left_eye_height,ref_corner_radius,SSD1306_WHITE);
x = int(right_eye_x-right_eye_width/2);
y = int(right_eye_y-right_eye_height/2);
display.fillRoundRect(x,y,right_eye_width,right_eye_height,ref_corner_radius,SSD1306_WHITE);
if(update)
{
display.display();
}
}
void center_eyes(bool update=true)
{
//move eyes to the center of the display, defined by SCREEN_WIDTH, SCREEN_HEIGHT
left_eye_height = ref_eye_height;
left_eye_width = ref_eye_width;
right_eye_height = ref_eye_height;
right_eye_width = ref_eye_width;
left_eye_x = SCREEN_WIDTH/2-ref_eye_width/2-ref_space_between_eye/2;
left_eye_y = SCREEN_HEIGHT/2;
right_eye_x = SCREEN_WIDTH/2+ref_eye_width/2+ref_space_between_eye/2;
right_eye_y = SCREEN_HEIGHT/2;
draw_eyes(update);
}
void blink(int speed=12)
{
draw_eyes();
for(int i=0;i<3;i++)
{
left_eye_height = left_eye_height-speed;
right_eye_height = right_eye_height-speed;
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_height = left_eye_height+speed;
right_eye_height = right_eye_height+speed;
draw_eyes();
delay(1);
}
}
void sleep()
{
left_eye_height = 2;
right_eye_height = 2;
draw_eyes(true);
}
void wakeup()
{
sleep();
for(int h=0; h <= ref_eye_height; h+=2)
{
left_eye_height = h;
right_eye_height = h;
draw_eyes(true);
}
}
void happy_eye()
{
center_eyes(false);
//draw inverted triangle over eye lower part
int offset = ref_eye_height/2;
for(int i=0;i<10;i++)
{
display.fillTriangle(left_eye_x-left_eye_width/2-1, left_eye_y+offset, left_eye_x+left_eye_width/2+1, left_eye_y+5+offset, left_eye_x-left_eye_width/2-1,left_eye_y+left_eye_height+offset,SSD1306_BLACK);
//display.fillRect(left_eye_x-left_eye_width/2-1, left_eye_y+5, left_eye_width+1, 20,SSD1306_BLACK);
display.fillTriangle(right_eye_x+right_eye_width/2+1, right_eye_y+offset, right_eye_x-left_eye_width/2-1, right_eye_y+5+offset, right_eye_x+right_eye_width/2+1,right_eye_y+right_eye_height+offset,SSD1306_BLACK);
//display.fillRect(right_eye_x-right_eye_width/2-1, right_eye_y+5, right_eye_width+1, 20,SSD1306_BLACK);
offset -= 2;
display.display();
delay(1);
}
display.display();
delay(1000);
}
void saccade(int direction_x, int direction_y)
{
//quick movement of the eye, no size change. stay at position after movement, will not move back, call again with opposite direction
//direction == -1 : move left
//direction == 1 : move right
int direction_x_movement_amplitude = 8;
int direction_y_movement_amplitude = 6;
int blink_amplitude = 8;
for(int i=0;i<1;i++)
{
left_eye_x+=direction_x_movement_amplitude*direction_x;
right_eye_x+=direction_x_movement_amplitude*direction_x;
left_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
draw_eyes();
delay(1);
}
for(int i=0;i<1;i++)
{
left_eye_x+=direction_x_movement_amplitude*direction_x;
right_eye_x+=direction_x_movement_amplitude*direction_x;
left_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_y+=direction_y_movement_amplitude*direction_y;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
draw_eyes();
delay(1);
}
}
void move_right_big_eye()
{
move_big_eye(1);
}
void move_left_big_eye()
{
move_big_eye(-1);
}
void move_big_eye(int direction)
{
//direction == -1 : move left
//direction == 1 : move right
int direction_oversize = 1;
int direction_movement_amplitude = 2;
int blink_amplitude = 5;
for(int i=0;i<3;i++)
{
left_eye_x+=direction_movement_amplitude*direction;
right_eye_x+=direction_movement_amplitude*direction;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
if(direction>0)
{
right_eye_height+=direction_oversize;
right_eye_width+=direction_oversize;
}else
{
left_eye_height+=direction_oversize;
left_eye_width+=direction_oversize;
}
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_x+=direction_movement_amplitude*direction;
right_eye_x+=direction_movement_amplitude*direction;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
if(direction>0)
{
right_eye_height+=direction_oversize;
right_eye_width+=direction_oversize;
}else
{
left_eye_height+=direction_oversize;
left_eye_width+=direction_oversize;
}
draw_eyes();
delay(1);
}
delay(1000);
for(int i=0;i<3;i++)
{
left_eye_x-=direction_movement_amplitude*direction;
right_eye_x-=direction_movement_amplitude*direction;
right_eye_height-=blink_amplitude;
left_eye_height-=blink_amplitude;
if(direction>0)
{
right_eye_height-=direction_oversize;
right_eye_width-=direction_oversize;
}else
{
left_eye_height-=direction_oversize;
left_eye_width-=direction_oversize;
}
draw_eyes();
delay(1);
}
for(int i=0;i<3;i++)
{
left_eye_x-=direction_movement_amplitude*direction;
right_eye_x-=direction_movement_amplitude*direction;
right_eye_height+=blink_amplitude;
left_eye_height+=blink_amplitude;
if(direction>0)
{
right_eye_height-=direction_oversize;
right_eye_width-=direction_oversize;
}else
{
left_eye_height-=direction_oversize;
left_eye_width-=direction_oversize;
}
draw_eyes();
delay(1);
}
center_eyes(
}
void setup() {
// put your setup code here, to run once:
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
//for usb communication
Serial.begin(115200);
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
// Clear the buffer
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Intellar.ca"));
display.display();
delay(2000);
sleep();
delay(2000);
// Draw a single pixel in white
//display.drawPixel(10, 10, SSD1306_WHITE);
}ر
void launch_animation_with_index(int animation_index)
if(animation_index>max_animation_index)
{
animation_index=8;
}
switch(animation_index)
{
case 0:
wakeup();
break;
case 1:
center_eyes(true);
break;
case 2:
move_right_big_eye();
break;
case 3:
move_left_big_eye();
break;
case 4:
blink(10);
break;
case 5:
blink(20);
break;
case 6:
happy_eye();
break;
case 7:
sleep();
break;
case 8:
center_eyes(true);
for(int i=0;i<20;i++)
{
int dir_x = random(-1, 2);
int dir_y = random(-1, 2);
saccade(dir_x,dir_y);
delay(1);
saccade(-dir_x,-dir_y);
delay(1);
}
break;
}
void loop() {
// put your main code here, to run repeatedly:
// put your main code here, to run repeate
if(demo_mode == 1)
{
// cycle animations
launch_animation_with_index(current_animation_index++);
if(current_animation_index > max_animation_index)
{
current_animation_index = 0;
}
}
//send A0 - A5 for animation 0 to 5
if(Serial.available()) {
String data = Serial.readString();
data.trim();
char cmd = data[0];
if(cmd == 'A')
{
demo_mode = 0;
String arg = data.substring(1,data.length());
int anim = arg.toInt();
launch_animation_with_index(anim);
Serial.print(cmd);
Serial.print(arg);
}
}
}
this is the final union code the the new address for the oled
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for the left OLED display, connected to I2C (SDA, SCL pins)
// The default I2C address is 0x3C.
#define OLED_RESET_LEFT -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS_LEFT 0x3C ///< Left display address
Adafruit_SSD1306 display_left(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET_LEFT);
// Declaration for the right OLED display, connected to I2C (SDA, SCL pins)
// The right display must have its I2C address changed to 0x3D.
#define OLED_RESET_RIGHT -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS_RIGHT 0x3D ///< Right display address
Adafruit_SSD1306 display_right(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET_RIGHT);
// States
int demo_mode = 1;
static const int max_animation_index = 8;
int current_animation_index = 0;
// Eye reference
int ref_eye_height = 60;
int ref_eye_width = 60;
int ref_space_between_eye = 10;
int ref_corner_radius = 10;
// Left eye
int left_eye_height = ref_eye_height;
int left_eye_width = ref_eye_width;
int left_eye_x = SCREEN_WIDTH / 2;
int left_eye_y = SCREEN_HEIGHT / 2;
// Right eye
int right_eye_height = ref_eye_height;
int right_eye_width = ref_eye_width;
int right_eye_x = SCREEN_WIDTH / 2;
int right_eye_y = SCREEN_HEIGHT / 2;
// ---------- DRAWING ----------
void drawEyes(bool update = true) {
// Left eye
display_left.clearDisplay();
int xL = int(left_eye_x - left_eye_width / 2);
int yL = int(left_eye_y - left_eye_height / 2);
display_left.fillRoundRect(xL, yL, left_eye_width, left_eye_height,
ref_corner_radius, SSD1306_WHITE);
if (update) display_left.display();
// Right eye
display_right.clearDisplay();
int xR = int(right_eye_x - right_eye_width / 2);
int yR = int(right_eye_y - right_eye_height / 2);
display_right.fillRoundRect(xR, yR, right_eye_width, right_eye_height,
ref_corner_radius, SSD1306_WHITE);
if (update) display_right.display();
}
void centerEyes(bool update = true) {
left_eye_height = ref_eye_height;
left_eye_width = ref_eye_width;
right_eye_height = ref_eye_height;
right_eye_width = ref_eye_width;
left_eye_x = SCREEN_WIDTH / 2;
left_eye_y = SCREEN_HEIGHT / 2;
right_eye_x = SCREEN_WIDTH / 2;
right_eye_y = SCREEN_HEIGHT / 2;
drawEyes(update);
}
void blink(int speed = 12) {
drawEyes();
for (int i = 0; i < 3; i++) {
left_eye_height -= speed;
right_eye_height -= speed;
drawEyes();
delay(1);
}
for (int i = 0; i < 3; i++) {
left_eye_height += speed;
right_eye_height += speed;
drawEyes();
delay(1);
}
}
void sleepEyes() {
left_eye_height = 2;
right_eye_height = 2;
drawEyes(true);
}
void wakeupEyes() {
sleepEyes();
for (int h = 0; h <= ref_eye_height; h += 2) {
left_eye_height = h;
right_eye_height = h;
drawEyes(true);
}
}
// Add your other animations (happy_eye, saccade, etc.) here
// Just make sure to update both left_eye_* and right_eye_* and call drawEyes()
// ---------- SETUP ----------
void setup() {
Serial.begin(115200);
if (!display_left.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS_LEFT)) {
Serial.println(F("SSD1306 Left allocation failed"));
for (;;);
}
if (!display_right.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS_RIGHT)) {
Serial.println(F("SSD1306 Right allocation failed"));
for (;;);
}
display_left.clearDisplay();
display_left.setCursor(0, 0);
display_left.println(F("Left Eye Ready"));
display_left.display();
display_right.clearDisplay();
display_right.setCursor(0, 0);
display_right.println(F("Right Eye Ready"));
display_right.display();
delay(2000);
sleepEyes();
}
// ---------- ANIMATION ----------
void launchAnimation(int animation_index) {
if (animation_index > max_animation_index) animation_index = 8;
switch (animation_index) {
case 0: wakeupEyes(); break;
case 1: centerEyes(true); break;
case 2: blink(10); break;
case 3: blink(20); break;
case 4: sleepEyes(); break;
// add more cases for happy_eye, saccade, etc.
}
}
// ---------- LOOP ----------
void loop() {
if (demo_mode == 1) {
launchAnimation(current_animation_index++);
if (current_animation_index > max_animation_index) current_animation_index = 0;
}
if (Serial.available()) {
String data = Serial.readString();
data.trim();
char cmd = data[0];
if (cmd == 'A') {
demo_mode = 0;
String arg = data.substring(1, data.length());
int anim = arg.toInt();
launchAnimation(anim);
Serial.print(cmd);
Serial.print(arg);
}
}
}
i started to assembly the parts together after checking my circuit and put each component at its place and collect the wires of each component together
1
first, i started with the face i assembled the screens with screw and nuts
2
then, i put the face in the head and assembled it with t-slots
and pull the wires through the hole at the head
3
putting the Arduino board, pushbutton and LEDs into the front part
4
Assembled the body and the head together with the t-slots
5
Adding the sides and the base to assemble it with the front and head parts
at fabrication:
i needed to make some part but the machine shifted while it was fabricating so i had to refabricate
at the design stage and fabrication:
the Arduino i used at fusion from the library is small than the Arduino i had at my components, and i discovered it after i fabricated so i had to measure the Arduino i have and refabricate it.
while coding i was struggle with the OLED code: at first after get the animation code from github i needed to divide the eyes so i had to see tutorials and changed the dimensions after that while connected the oleds with the Arduino (each one of them worked so good ) the 2 leds refused to work together (by the way i changed the address at the code as menna said) what i discovered is that i had to change the address -physically- for one of them to be different from the other one.
i would create a better design and make it more smarter like adding speaker and appliction just for it to insert my tasks details.