element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Members
    Members
    • Benefits of Membership
    • Achievement Levels
    • Members Area
    • Personal Blogs
    • Feedback and Support
    • What's New on element14
  • Learn
    Learn
    • Learning Center
    • eBooks
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Dev Tools
    • Manufacturers
    • Raspberry Pi
    • RoadTests & Reviews
    • Avnet Boards Community
    • Product Groups
  • Store
    Store
    • Visit Your Store
    • Choose Another Store
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
Arduino
  • Products
  • More
Arduino
Blog My IoT Holiday Lightings...#2: First prototype
  • Blog
  • Forum
  • Documents
  • Events
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Arduino requires membership for participation - click to join
Blog Post Actions
  • Subscribe by email
  • More
  • Cancel
  • Share
  • Subscribe by email
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: vaghasiamadhuri
  • Date Created: 22 Dec 2014 9:42 AM Date Created
  • Views 563 views
  • Likes 4 likes
  • Comments 7 comments
  • iot_holidaylights
  • my_iot_lightings
  • iot_variable_lighting
  • arduino_yun
Related
Recommended

My IoT Holiday Lightings...#2: First prototype

vaghasiamadhuri
vaghasiamadhuri
22 Dec 2014

I have received Arduino Yun, Arduino Uno and Infineon RGB LED control shield...

 

I have used REST api style communication link between my android cell and arduino yun... I have merged bridge example of arduino yun and Infineon RGB LED Shield example for this prototype...

 

I am using processing for Android and PC application...

 

My processing sketch works fine with Android as well as widows/linux PC...

 

In my processing app.. two modes are there,

1. fix (fix color)

2. loop (rotate color)

 

Here is my processing sketch....

 

float r_color=127,g_color=127,b_color=127, rot_color;
float r_bar = width/2,g_bar = width/2,b_bar = width/2, rot_bar = width/2;
float r_yun, g_yun, b_yun, rot_yun = 200;
float rot_status = 0;
float fix_status = 1;
color backgroundcolor = color(50, 50, 0);
String url = "http://192.168.43.27/arduino/";
void setup()
{
  orientation(LANDSCAPE);
  textSize(34);
}


void draw()
{
  background(backgroundcolor);
  drawUI();
//  text("IP = "+ip,20,130);
//text(url+str((int)r_yun),20,170);
}




void mousePressed()
{
// int mouse = (int)mouseX;
if (mouseY > height/6 && mouseY < height/6+60)
{
   if( mouseX > width/3 && mouseX < width/3 + width/6)
   {
     rot_status = 1;
     fix_status = 0;
     String json[] = loadStrings(url + "rot/1/" +str((int)rot_yun));
     println(url + "set/1/" + str((int)rot_yun));
     delay(300);
   }
   if( mouseX > width/3 + width/6 && mouseX < 2*width/3)
   {
     rot_status = 0;
     fix_status = 1;
     String json[] = loadStrings(url + "set/1/" + str((int)r_yun));
     println(url + "set/1/" + str((int)r_yun));
     delay(300);
     String json1[] = loadStrings(url + "set/2/" + str((int)g_yun));
     println(url + "set/2/" + str((int)g_yun));
     delay(300);
     String json2[] = loadStrings(url + "set/3/" + str((int)b_yun));
     println(url + "set/3/" + str((int)b_yun));
     delay(300);
  
   }
}

if( mouseX > 50 && mouseX < width-50)
{
  if (mouseY > 2*height/6 && mouseY < 2*height/6+60 && rot_status == 1)
  {
    rot_color = map(mouseX, 50, width-50, 0, 255);
    rot_yun = map(mouseX, 50, width-50, 0, 4090);
    rot_bar = mouseX-50;
    String json[] = loadStrings(url + "rot/1/" + str((int)rot_yun));
    println(url + "rot/1/" + str((int)rot_yun));
  }
  else if (mouseY > 3*height/6 && mouseY < 3*height/6+60 && fix_status == 1)
  {
    r_color = map(mouseX, 50, width-50, 0, 255);
    r_yun = map(mouseX, 50, width-50, 0, 4090);
    r_bar = mouseX-50;
    String json[] = loadStrings(url + "set/1/" + str((int)r_yun));
    println(url + "set/1/" + str((int)r_yun));
  }
  else if (mouseY > 4*height/6 && mouseY < 4*height/6+60 && fix_status == 1)
  {
    g_color = map(mouseX, 50, width-50, 0, 255);
    g_yun = map(mouseX, 50, width-50, 0, 4090);
    g_bar = mouseX-50;
    String json[] = loadStrings(url + "set/2/" + str((int)g_yun));
    println(url + "set/3/" + str((int)g_yun));
  }
  else if (mouseY > 5*height/6 && mouseY < 5*height/6+60 && fix_status == 1)
  {
    b_color = map(mouseX, 50, width-50, 0, 255);
    b_yun = map(mouseX, 50, width-50, 0, 4090);
    b_bar = mouseX-50;
    String json[] = loadStrings(url + "set/3/" + str((int)b_yun));
    println(url + "set/3/" + str((int)b_yun));
  }
}
}




void drawUI()
{
  pushStyle();
  textAlign(CENTER);
  stroke(255);

  //fill(color(r_color,g_color,b_color));
  //rect(width/3, 1*height/6, width/3, 60);

  fill(rot_status * 200);
  rect(width/3, 1*height/6, width/6, 60);

  fill(fix_status * 200);
  rect(width/3 + width/6, 1*height/6, width/6, 60);
  if(rot_status == 1)
  {
  fill(color(100,200,200));
  rect(50, 2*height/6, width-100, 60);

  fill(color(50,100,100));
  rect(50, 2*height/6, rot_bar, 60);

  fill(0);
  text("SPEED", width/2, 2*height/6+43);
  }

  if(fix_status == 1)
  {
  fill(color(r_color,g_color,b_color));
  rect(width/3, 2*height/6, width/3, 60);

  fill(color(255,0,0));
  rect(50, 3*height/6, width-100, 60);
  fill(color(0,255,0));
  rect(50, 4*height/6, width-100, 60);
  fill(color(0,0,255));
  rect(50, 5*height/6, width-100, 60);

  fill(color(r_color,0,0));
  rect(50, 3*height/6, r_bar, 60);
  fill(color(0,g_color,0));
  rect(50, 4*height/6, g_bar, 60);
  fill(color(0,0,b_color));
  rect(50, 5*height/6, b_bar, 60);

  fill(color(255-r_color,255-g_color,255-b_color));
  text("COLOR", width/2, 2*height/6+43);
  }



  fill(255);
  text("IoT Holiday Lights", width/2, 60 );
  fill(0);
  text("LOOP", width/3 + width/12, height/6+43);
  fill(0);
  text("FIX", width/3 + width/6 + width/12 , height/6+43);

  popStyle();
}

 

Here is my arduino yun sketch... Still clean up of code is not done.... Sorry for that...

 

/*
  Arduino Yún Bridge example


This example for the Arduino Yún shows how to use the
Bridge library to access the digital and analog pins
on the board through REST calls. It demonstrates how
you can create your own API when using REST style
calls through the browser.


Possible commands created in this shetch:


* "/arduino/digital/13"     -> digitalRead(13)
* "/arduino/digital/13/1"   -> digitalWrite(13, HIGH)
* "/arduino/analog/2/123"   -> analogWrite(2, 123)
* "/arduino/analog/2"       -> analogRead(2)
* "/arduino/mode/13/input"  -> pinMode(13, INPUT)
* "/arduino/mode/13/output" -> pinMode(13, OUTPUT)


This example code is part of the public domain


 http://arduino.cc/en/Tutorial/Bridge


*/


#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>
#define ADDRESS                    0x15EUL

  #define INTENSITY_RED              0x11U
  #define INTENSITY_GREEN            0x12U
  #define INTENSITY_BLUE     0x13U
  #define INTENSITY_RGB              0x14U
  #define CURRENT_RED                0x21U
  #define CURRENT_GREEN              0x22U
  #define CURRENT_BLUE               0x23U
  #define CURRENT_RGB                0x24U
  #define DMXOFF     0x30U
  #define DMXON                 0x31U
  #define DMXSLOT     0x32U
  #define DMX8BIT                    0x33U
  #define DMX16BIT                   0x34U
  #define OFFTIME_RED                0x41U
  #define OFFTIME_GREEN              0x42U
  #define OFFTIME_BLUE     0x43U
  #define WALKTIME                   0x50U
  #define DIMMINGLEVEL               0x60U
  #define FADERATE                   0x61U
  #define _CHANGE_ADDRESS            0x70U

  #define READ_INTENSITY_RED         0x81U
  #define READ_INTENSITY_GREEN       0x82U
  #define READ_INTENSITY_BLUE        0x83U
  #define READ_CURRENT_RED           0x84U
  #define READ_CURRENT_GREEN         0x85U
  #define READ_CURRENT_BLUE          0x86U
  #define READ_OFFTIME_RED           0x87U
  #define READ_OFFTIME_GREEN         0x88U
  #define READ_OFFTIME_BLUE          0x89U
  #define READ_WALKTIME              0x8AU
  #define READ_DIMMINGLEVEL          0x8BU
  #define READ_FADERATE              0x8CU
  #define DIRECTACCESS_READ          0x90U // read twice
  #define DIRECTACCESS_MOVE       0x91U
  #define DIRECTACCESS_AND           0x92U
  #define DIRECTACCESS_OR            0x93U

  #define SAVEPARAMETERS             0xA0U

  #define BCCUMODID                  0x50030008U
  #define CHIPID                     0x40010004U
  #define REDINTS                    0x500300A0U // BCCU_CH5
  #define REDINT                     0x500300A4U
  #define BLUEINTS                   0x50030078U
  #define STARTWALK                  0x50030018U

  #include <Wire.h>

  unsigned int c[2] = {0};
  unsigned int d[4] = {0};
  unsigned int on = 0;
  unsigned int message = 0;
  unsigned long redcurr = 0;
  unsigned long greencurr = 0;
  unsigned long bluecurr = 0;
  unsigned long redoff = 0;
  unsigned long greenoff = 0;
  unsigned long blueoff = 0;
  unsigned long redint = 0x00;
  unsigned long greenint = 0x00;
  unsigned long blueint = 0x00;
  unsigned long fadetime = 0x00;
  unsigned long walk = 0x00;
  unsigned long brightness = 1;

  unsigned int r_send = 2048;
  unsigned int g_send = 2048;
  unsigned int b_send = 2048;
  unsigned int rot = 0, rot_delay = 500;


// Listen on default port 5555, the webserver on the Yún
// will forward there all the HTTP requests for us.
YunServer server;


void setup() {
  Serial.begin(9600);
  Wire.begin();
  Shield_init();
  I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, r_send); // RED
  I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, g_send); // GREEN
  I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, b_send); // BLUE
  // Bridge startup
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);
  // Listen for incoming connection only from localhost
  // (no one from the external network could connect)
  server.listenOnLocalhost();
  server.begin();
}


void loop() {
  // Get clients coming from server
  YunClient client = server.accept();


  // There is a new client?
  if (client) {
    // Process request
    process(client);


    // Close connection and free resources.
    client.stop();
  }
  if(rot==1){led_rotate();}
  delay(20); // Poll every 20ms
}


void process(YunClient client) {
  // read the command
  String command = client.readStringUntil('/');


  // is "digital" command?
  if (command == "set") {
    setCommand(client);
  }


  // is "analog" command?
  if (command == "rot") {
    rotCommand(client);
  }


  // is "mode" command?
  if (command == "mode") {
    modeCommand(client);
  }
}


void setCommand(YunClient client) {
  int set_clr,value;


  // Read color number
  set_clr = client.parseInt();
  // Read intensity
  if (client.read() == '/') {
    value = client.parseInt();
  }
  client.print(F("color="));
  client.print(set_clr);

  if(set_clr == 1){r_send = value;}
  else if(set_clr == 2){g_send = value;}
  else if(set_clr == 3){b_send = value;}
  rot = 0;
  I2CWRITE2BYTES (ADDRESS, WALKTIME, 48);
  I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, r_send); // RED
  I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, g_send); // GREEN
  I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, b_send); // BLUE

  // Send feedback to client


}


void rotCommand(YunClient client) {
  int value;
  // Read pin number
  rot = client.parseInt();
  if (client.read() == '/') {
    value = client.parseInt();
  }
  I2CWRITE2BYTES (ADDRESS, WALKTIME, value/14);
  rot_delay = value;
  // Send feedback to client
  client.print("rotation = ");
  client.print(rot);

}


void modeCommand(YunClient client) {
  int pin;


  // Read pin number
  pin = client.parseInt();


  // If the next character is not a '/' we have a malformed URL
  if (client.read() != '/') {
    client.println(F("error"));
    return;
  }


  String mode = client.readStringUntil('\r');


  if (mode == "input") {
    pinMode(pin, INPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as INPUT!"));
    return;
  }


  if (mode == "output") {
    pinMode(pin, OUTPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as OUTPUT!"));
    return;
  }


  client.print(F("error: invalid mode "));
  client.print(mode);
}
void I2CWRITE2BYTES (int Address, int Command, unsigned int Data)
  {
    unsigned int upperByte, lowerByte; // Separate 4 byte data into 2 byte values
    lowerByte = Data;
    upperByte = Data >> 8;

    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // Putting address into correct format
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write

    Wire.beginTransmission(byte(upperSLAD)); // Start I2C transmission
    Wire.write(byte(lowerSLAD)); // address lower 8 bits of i2c address
    Wire.write(byte(Command)); // write command
    Wire.write(byte(upperByte)); // write data
    Wire.write(byte(lowerByte));
    Wire.endTransmission(true);
   
  }
   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   int Command - Defined I2C Commands i.e. INTENSITY_RGB, CURRENT_RGB
                   unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree - Three 16bit data to be written to slave
  Parameters (OUT): None
  Return Value: None
  Description: This function will write 6 bytes of word to the I2C bus line
  */

  void I2CWRITE6BYTES (unsigned int Address, unsigned int Command, unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree) // DataOne: Red, DataTwo: Green, DataThree: Blue
  {
    unsigned int upperByte, lowerByte; // Split each Data parameter into upper and lower 8 bytes because I2C format sends 8 bytes of data each time
    lowerByte = DataOne;
    upperByte = DataOne >> 8;

    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF);
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write

    Wire.beginTransmission(byte(upperSLAD)); // Red
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command));
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));
    lowerByte = DataTwo;
    upperByte = DataTwo >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));
    lowerByte = DataThree;
    upperByte = DataThree >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));
    Wire.endTransmission(true);
   
  }

/*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   int Command - Defined I2C Commands i.e. DMX16Bit
                   unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree, usigned int DataFour, unsigned int DataFive - Three 16bit data to be written to slave
  Parameters (OUT): None
  Return Value: None
  Description: This function will write 12 bytes of word to the I2C bus line
  */

  void I2CWRITE12BYTES (unsigned int Address, unsigned int Command, unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree, unsigned int DataFour, unsigned int DataFive, unsigned int DataSix) // DataOne: Red, DataTwo: Green, DataThree: Blue
  {
    unsigned int upperByte, lowerByte;
    lowerByte = DataOne;
    upperByte = DataOne >> 8;

    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF);
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command)); // write command
    Wire.write(byte(upperByte)); // write 2 bytes
    Wire.write(byte(lowerByte));

    lowerByte = DataTwo;
    upperByte = DataTwo >> 8;
    Wire.write(byte(upperByte)); // write next two bytes
    Wire.write(byte(lowerByte));

    lowerByte = DataThree;
    upperByte = DataThree >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));


    lowerByte = DataFour;
    upperByte = DataFour >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));


    lowerByte = DataFive;
    upperByte = DataFive >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));


    lowerByte = DataSix;
    upperByte = DataSix >> 8;
    Wire.write(byte(upperByte));
    Wire.write(byte(lowerByte));
    Wire.endTransmission(true);
   
  }

   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   int Command - Defined read I2C Commands i.e. READ_INTENSITY_RED, READ_INTENSITY_GREEN, READ_INTENSITY_BLUE
  Parameters (OUT): None
  Return Value: Requested data from Shield will be sent back
  Description: This function will request 2 bytes of word from the shield
  */

  unsigned int I2CREAD (unsigned int Address, unsigned int Command) // Returns data sent by slave
  {
    int i = 0;
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF);
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79;

    Wire.beginTransmission(byte(upperSLAD)); // Red
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command));
    Wire.endTransmission(false); // false for Repeated Start

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.requestFrom(upperSLAD, 2, true);
    unsigned int data = 0;

    while(Wire.available())    // slave may send less than requested. Print out received data byte
    {
      message = 1;
      c[i] = Wire.read(); // receive a byte as character
      i++;
   
    }
    Wire.endTransmission(true);

    data = c[1]; // write data to serial monitor. c[1] is higher byte
    data = (data << 8) | c[0];  // shift left and combine with lower byte
    Serial.print("0x");
    if (data < 0x1000)
        Serial.print("0");
    Serial.println(data, HEX);
    return data;
  }

   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   int Command - DIRECTACCESS_READ
  Parameters (OUT): None
  Return Value: Requested data from the Shield will be returned
  Description: This function will request 4 bytes of data from shield.
  */

unsigned long I2CREAD_DIRECTACCESS (unsigned int Address, unsigned int Command, unsigned long registerAddress)
  {
    int i = 0;
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // sending command + address
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command));

    unsigned int firstByte, secondByte, thirdByte, fourthByte;
    firstByte = registerAddress >> 24; // top byte
    secondByte = registerAddress >> 16;
    thirdByte = registerAddress >> 8;
    fourthByte = registerAddress; // bottom byte

    Wire.write(byte(firstByte));
    Wire.write(byte(secondByte));
    Wire.write(byte(thirdByte));
    Wire.write(byte(fourthByte));

    Wire.endTransmission(false); // false for Repeated Start

    Wire.beginTransmission(byte(upperSLAD)); // request for read
    Wire.write(byte(lowerSLAD));
    Wire.requestFrom(upperSLAD, 4, true);
    unsigned long data = 0;

    while(Wire.available())    // slave may send less than requested. Print out received data byte
    {
      d[i] = 0;
      d[i] = Wire.read(); // receive a byte as character
      i++;
    }


    Wire.endTransmission(true);

    data = d[3]; // combining into one variable. Highest byte received first
    data = (data << 8) | d[2];
    data = (data << 8) | d[1];
    data = (data << 8) | d[0];
    Serial.print("0x");
    if (data < 0x10000000)
        Serial.print("0");
    Serial.println(data, HEX);
    return data;
  }
   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   int Command - Defined I2C Commands i.e. DIRECTACCESS_OR, DIRECTACCESS_AND, DIRECTACCESS_MOVE
                   unsigned long registerAddress - address of target register
                   unsigned long Data - 32 bits data to be written to register
  Parameters (OUT): None
  Return Value: None
  Description: This function will write 4 bytes of data to specified register
  */
  void I2CWRITE_DIRECTACCESS (unsigned int Address, unsigned int Command, unsigned long registerAddress, unsigned long Data) // For accessing registers directly
  {
    int i = 0;
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // sending command + address
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command));

    unsigned int firstByte, secondByte, thirdByte, fourthByte; // Send address of register first
    firstByte = registerAddress >> 24; // top byte
    secondByte = registerAddress >> 16;
    thirdByte = registerAddress >> 8;
    fourthByte = registerAddress; // bottom byte

    Wire.write(byte(firstByte));
    Wire.write(byte(secondByte));
    Wire.write(byte(thirdByte));
    Wire.write(byte(fourthByte));

    firstByte = Data >> 24; // top byte
    secondByte = Data >> 16;
    thirdByte = Data >> 8;
    fourthByte = Data; // bottom byte


    Wire.write(byte(firstByte)); // send 4 bytes of data
    Wire.write(byte(secondByte));
    Wire.write(byte(thirdByte));
    Wire.write(byte(fourthByte));
    Wire.endTransmission(true);

  }
   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   unsigned int newAddress - Address the shield should change to
  Parameters (OUT): None
  Return Value: None
  Description: This function will change the I2C address of the slave
  */

  void CHANGEADDRESS (unsigned int Address, unsigned int newAddress)
  {
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF);
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write
  
    Wire.beginTransmission(byte(upperSLAD)); // Red
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(0x70)); // Command to change address
    lowerSLAD = (unsigned int) (newAddress & 0x00FF);
    upperSLAD = newAddress >> 7; // Split address into 2 bytes
    upperSLAD |= 0xF0; // 10 bit addressing: First 5 bits have to be 11110.
    upperSLAD &= 0xFE;
    Wire.write(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.endTransmission(true);
  }

   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
                   unsigned int Command - DMXON, DMXOFF
  Parameters (OUT): None
  Return Value: None
  Description: This function will enable or disable DMX512 control on shield
  */

  void I2CDMX (unsigned int Address, unsigned int Command) // Switch off / on the DMX
  {
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // Putting address into correct format
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79;

    Wire.beginTransmission(byte(upperSLAD)); // Start I2C transmission
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(Command));
    Wire.endTransmission(true);

  }
   /*
  Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E
  Parameters (OUT): None
  Return Value: None
  Description: This function will request the shield to save configurations to flash memory
  */

  void I2CSAVEPARAM (unsigned int Address)
  {
    int i = 0;
    unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF);
    unsigned int upperSLAD = Address >> 8;
    upperSLAD |= 0x79;

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD));
    Wire.write(byte(SAVEPARAMETERS)); // write SAVEPARAMETERS command
    Wire.endTransmission(false); // false for Repeated Start

    Wire.beginTransmission(byte(upperSLAD));
    Wire.write(byte(lowerSLAD)); // write to address lower 8 bits of slave address
    Wire.requestFrom(upperSLAD, 2, true);  // send READ request with upper slave address
    unsigned int data = 0;

    while(Wire.available())    // slave may send less than requested. Print out received data byte
    {
      message = 1;
      c[i] = Wire.read(); // receive a byte as character
      i++;
    }
    Wire.endTransmission(true); // STOP condition

    data = c[1]; // print the data on serial monitor
    data = (data << 8) | c[0];
    Serial.print("0x");
    if (data < 0x1000)
        Serial.print("0");
    Serial.println(data, HEX);

  }


  void Shield_init()
  { 
    //while(!Serial);
    while (on != 1) // Wait for shield to respond
    {
      I2CDMX (ADDRESS, DMXOFF); // disable DMX
      I2CWRITE2BYTES (ADDRESS, FADERATE, 0x0000); // Immediate fade
      I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0000); // 0% brightness level
      on = I2CREAD(ADDRESS, READ_DIMMINGLEVEL); // Request for brightness level
      if (message == 1 && on == 0) // If message received and brightness level = 9%
      {
        message = 0;
        on = 1; // break out of loop
      }
    }

    while (redcurr != 0x15 || greencurr != 0x15 || bluecurr != 0x15 || redoff != 0x38 || greenoff != 0x39 || blueoff != 0x38 || brightness != 0)
    {
        I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0000, 0x000, 0x0000); // Off Light
  // Ensure that parameters are set up correctly. Read back and check. If wrong, write and read again.
        redcurr = I2CREAD (ADDRESS, READ_CURRENT_RED); // Read the red current intensity
  greencurr = I2CREAD (ADDRESS, READ_CURRENT_GREEN); // Read the green current intensity
  bluecurr = I2CREAD (ADDRESS, READ_CURRENT_BLUE); // Read the blue current intensity
  redoff = I2CREAD (ADDRESS, READ_OFFTIME_RED); // Read the off-time of the red channel
  greenoff = I2CREAD (ADDRESS, READ_OFFTIME_GREEN); // Read the off-time of the green channel
  blueoff = I2CREAD (ADDRESS, READ_OFFTIME_BLUE); // Read the off-time of the blue channel
  brightness = I2CREAD (ADDRESS, READ_DIMMINGLEVEL); // Read the dimming level
     
        I2CWRITE2BYTES (ADDRESS, OFFTIME_RED, 0x38); // Set off-time of red channel to 0x38
  I2CWRITE2BYTES (ADDRESS, OFFTIME_GREEN, 0x39); // Set off-time of green channel to 0x39
  I2CWRITE2BYTES (ADDRESS, OFFTIME_BLUE, 0x38); // Set off-time of blue channel to 0x38
  I2CWRITE2BYTES (ADDRESS, CURRENT_RED, 0x15); // Set current intensity of red channel to 0x15
  I2CWRITE2BYTES (ADDRESS, CURRENT_GREEN, 0x15); // Set current intensity of green channel to 0x15
  I2CWRITE2BYTES (ADDRESS, CURRENT_BLUE, 0x15); // Set current intensity of blue channel to 0x15
  I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0000);
    }

    delay(100);
    I2CWRITE2BYTES (ADDRESS, FADERATE, 0x0014); // Fade Rate --> 0.7s
    I2CWRITE2BYTES (ADDRESS, WALKTIME, 0x000F);
    I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0555, 0x0555, 0x0555); // White Light
    I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0FFF); // Maximum Brightness


    delay(2000); // wait 2 sec
    // change lamp colour to red
    I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, 0x0FFF); // change red colour intensity to 0xFFF
    I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0000); // change green colour intensity to 0x000
    I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, 0x0000); // change blue colour intensity to 0x000
    delay(1000);
    I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, 0x0000);
    I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0FFF);
    delay(1000);
    I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0000);
    I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, 0x0FFF);

    delay(1000); // Read back values from slave


    I2CWRITE2BYTES (ADDRESS, WALKTIME, 24); // set walk-time 240ms
}
void led_rotate()
{
I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, 0x0fff); // RED
  I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0000); // GREEN
  I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, 0x0000); // BLUE
  delay(rot_delay);
  I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, 0x0000); // RED
  I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0fff); // GREEN
  I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, 0x0000); // BLUE
  delay(rot_delay);
  I2CWRITE2BYTES (ADDRESS, INTENSITY_RED, 0x0000); // RED
  I2CWRITE2BYTES (ADDRESS, INTENSITY_GREEN, 0x0000); // GREEN
  I2CWRITE2BYTES (ADDRESS, INTENSITY_BLUE, 0x0fff); // BLUE
  delay(rot_delay);
}

 

 

Here is video of this prototype....

 

 

 

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

 

 

 

 

my 12V DC supply for LED strip is only capable of delivering 300mA so I have connected only few LEDs... I am finding some powerful 12V DC supply to drive 2amp load of 5m LED strip...

This is just initial prototype ... I will be modifying hardware and software to make it extremely user friendly...

 

Thanks..

 

Madhuri

  • Sign in to reply

Top Comments

  • peteroakes
    peteroakes over 8 years ago in reply to gadget.iom +1
    What gave that away as if I did not know, is that a standard bug, the double characters ??
  • gadget.iom
    gadget.iom over 8 years ago in reply to peteroakes

    Yeah. I've been wresting with that "feature" for ages now.

    I'm really hoping that the team could enable access via the Jive iOS app. That would be a really nice christmas present.

    image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • fvan
    fvan over 8 years ago in reply to peteroakes

    I have the same "double characters" issue when starting a sentence with my iPhone when using e14 website. Not with other websites though ...

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • peteroakes
    peteroakes over 8 years ago in reply to gadget.iom

    What gave that away

     

    as if I did not know, is that a standard bug, the double characters ??

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • gadget.iom
    gadget.iom over 8 years ago in reply to peteroakes

    Peter Oakes wrote:

     

    AAn excelent start, I look forward to seeing its progress

    peteroakes Did you post this from an iOS device?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • DAB
    DAB over 8 years ago

    Good demo.

     

    DAB

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2023 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • Facebook
  • Twitter
  • linkedin
  • YouTube