Hi all.
I've got the code running but I'm noticing some strange behavior, the values in the array (vals) is being added up, and the total value is being subtracted from the brightness each time - (1500 in this case)?
Here is the code, very experimental at the moment and a lot will change. The array is defined in the DEFINES section and the dimming is happening in the void down() function.
//////////////////////
//INCLUDES
//////////////////////
#include <SPI.h>
#include <Ethernet.h>
#include "Tlc5940.h"
//////////////////////
//END OF INCLUDES
//////////////////////
//////////////////////
//DEFINES
//////////////////////
int TLCDelay = 50; //Delay after setting TLC
int brightness = 4095; //Initial brightness to display
int brightnessStep = 128; //Dimming steps in
// number of items in an array
#define NUMITEMS(arg) ((unsigned int) (sizeof (arg) / sizeof (arg [0])))
int vals [] = { 1000, 500 };
int numVal = NUMITEMS (vals); //number of values in array
//////////////////////
//END OF DEFINES
//////////////////////
//////////////////////
//ETHERNET SETUP
//////////////////////
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = {
192, 168, 0, 177 }; // ip in lan
byte gateway[] = {
192, 168, 1, 1 }; // internet access via router
byte subnet[] = {
255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
//////////////////////
//END OF ETHERNET SETUP
//////////////////////
//////////////////////
//START OF MODES
//////////////////////
void allOn(){
Tlc.clear();
digitalWrite(7, HIGH);
Tlc.setAll(brightness);
Tlc.update();
delay(TLCDelay);
}
void sides(){
Tlc.clear();
digitalWrite(7, HIGH);
for (int i = 4; i < 12; i++)
{
Tlc.set(i, brightness);
}
Tlc.update();
delay(TLCDelay);
}
void gradient(){
Tlc.clear();
for (int i = 0; i < 4; i++)
Tlc.set(i, 4095);
for (int i = 4; i < 8; i++)
Tlc.set(i, 1000);
for (int i = 8; i < 12; i++)
Tlc.set(i, 250);
for (int i = 12; i < 16; i++)
Tlc.set(i, 100);
Tlc.update();
delay(TLCDelay);
}
void frontRow(){
Tlc.clear();
Tlc.set((1, 5, 9), brightness);
Tlc.update();
delay(TLCDelay);
}
void middle(){
Tlc.clear();
Tlc.set(6, brightness);
Tlc.set(7, brightness);
Tlc.set(8, brightness);
Tlc.update();
delay(TLCDelay);
}
//////////////////////
//END OF MODES
//////////////////////
//////////////////////
//START OF DIMMING CONTROL
//////////////////////
void up(){
if ((brightness + brightnessStep) < 4095)
brightness = brightness + brightnessStep;
Serial.println(brightness);
Tlc.setAll(brightness);
Tlc.update();
delay(TLCDelay);
}
void down(){
for (int i = 0; i < numVal; i++){ //for the amount of values in the array..
brightness = (brightness - vals[i]); //set new brightness level
}
Serial.println(brightness);
Tlc.setAll(brightness);
Tlc.update();
delay(TLCDelay);
}
//////////////////////
//END OF DIMMING CONTROL
//////////////////////
void setup(){
Tlc.init(0);
pinMode(7, OUTPUT); //pin selected to control
//start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
}
void loop(){
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
///////////////
client.println("HTTP/1.1 200 OK"); //send new page
client.println("Content-Type: text/html");
client.println();
client.println("<HTML>");
client.println("<HEAD>");
client.println("<meta name='apple-mobile-web-app-capable' content='yes' />");
client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
client.println("<link rel='stylesheet' type='text/css' href='http://homeautocss.net84.net/a.css' />");
client.println("<TITLE>Home Automation</TITLE>");
client.println("<meta name=\"viewport\" content=\"user-scalable = yes\" />"); //?
client.println("<meta name=\"viewport\" content=\"width=device-width, height=device-height, initial-scale=1, maximum-scale=1\" />");
client.println("</HEAD>");
client.println("<BODY>");
client.println("<H1>Home Automation</H1>");
client.println("<hr />");
client.println("
");
client.println("<a href=\"/?lighton\"\">All On</a>");
client.println("<a href=\"/?lightoff\"\">All Off</a>
");
client.println("
");
client.println("<hr />");
client.println("
");
client.println("<a href=\"/?sides\"\">Sides</a>");
client.println("<a href=\"/?gradient\"\">Gradient</a>
");
client.println("
");
client.println("
");
client.println("<a href=\"/?up\"\">Up</a>");
client.println("<a href=\"/?down\"\">Down</a>
");
client.println("
");
client.println("
");
client.println("<a href=\"/?frontRow\"\">Front Row</a>");
client.println("<a href=\"/?middle\"\">Middle</a>
");
client.println("</BODY>");
client.println("</HTML>");
delay(1);
//stopping client
client.stop();
///////////////////// control arduino pin
if(readString.indexOf("?lighton") >0)//checks for on
{
allOn();
}
else if(readString.indexOf("?lightoff") >0)//checks for off
{
Tlc.setAll(0);
Tlc.update();
delay(TLCDelay);
}
else if(readString.indexOf("?sides") >0)//checks for off
{
sides();
}
else if(readString.indexOf("?gradient") >0)//checks for off
{
gradient();
}
else if(readString.indexOf("?up") >0)
{
up();
}
else if(readString.indexOf("?down") >0)
{
down();
}
else if(readString.indexOf("?frontRow") >0)
{
frontRow();
}
else if(readString.indexOf("?middle") >0)
{
middle();
}
//clearing string for next read
readString="";
}
}
}
}
}
/*
digitalWrite(7, LOW);
//Tlc.set(1, 0);
//Tlc.set(15, 0);
for (int i = 4095; i > (0-1) ; i--)
{
Tlc.set(15, i);
Tlc.set(10, i);
Tlc.update();
delay(1);
}
Tlc.set(9, 0);
Tlc.update();
delay(100);
*/