Skip to content

Instantly share code, notes, and snippets.

@LuisFDuarte
Last active August 29, 2015 14:10
Show Gist options
  • Save LuisFDuarte/a8f6b40e07b497b43271 to your computer and use it in GitHub Desktop.
Save LuisFDuarte/a8f6b40e07b497b43271 to your computer and use it in GitHub Desktop.
#include "LedControl-MAX7219-MAX7221/LedControl-MAX7219-MAX7221.h"
#include "HttpClient/HttpClient.h"
HttpClient http;
#define VARIABLE_ID "544e4as8f7625426e332b1e8e"
#define TOKEN "pSZJt9W7vdfgW3fpUsRYNKiDMgJ770NK"
int presence = 0;
LedControl *led;// LedControl object
uint8_t data = A5;
uint8_t load = A4;
uint8_t myclock = A3;
// Headers needed by Ubidots API
http_header_t headers[] = {
{ "Content-Type", "application/json" },
{ "X-Auth-Token" , TOKEN },
{ NULL, NULL } // NOTE: Always terminate headers will NULL
};
http_request_t request;
http_response_t response;
void setup() {
pinMode(D1, INPUT);
request.port = 80;
request.hostname = "things.ubidots.com";
request.path = "/api/v1.6/variables/"VARIABLE_ID"/values";
//Serial.begin(9600);//For Debug purposes
led = new LedControl(data,myclock,load,1); //DIN,CLK,CS,HowManyDisplays
led-> shutdown(0,false); //Turn it on
led-> setIntensity(0,7);//Set Led's Intensity, max value=15
}
void loop() {
presence=digitalRead(D1);
//Serial.print("presence: ");//
//.Serial.println(presence);
if(presence)
{
request.body = "{\"value\":" + String(presence) + "}"; //Sending presence to Ubidots
http.post(request, response, headers);
// Serial.println(response.status); //For debug only
//Serial.println(response.body);//See the response from the Ubidots Api
do{
selectColor(3);//Red color
led->setColumn(0,0,0x00);
led->setColumn(0,1,0x22);
led->setColumn(0,2,0x14);
led->setColumn(0,3,0x10);
led->setColumn(0,4,0x10);
led->setColumn(0,5,0x14);
led->setColumn(0,6,0x22);
led->setColumn(0,7,0x00);
delay(2000);
presence=digitalRead(D1);
}while(presence);
}
request.body = "{\"value\":" + String(presence) + "}"; //Sending presence to Ubidots
http.post(request, response, headers);
selectColor(2);//Green color
led->setColumn(0,0,0x7E);
led->setColumn(0,1,0x81);
led->setColumn(0,2,0x95);
led->setColumn(0,3,0xB1);
led->setColumn(0,4,0xB1);
led->setColumn(0,5,0x95);
led->setColumn(0,6,0x81);
led->setColumn(0,7,0x7E);
}
void putByte(byte data_1) //not my function
{
byte i = 8;
byte mask;
while(i > 0)
{
mask = 0x01 << (i - 1); // get bitmask
digitalWrite(myclock, LOW); // tick
if (data_1 & mask) // choose bit
{
digitalWrite(data, HIGH);// send 1
}
else
{
digitalWrite(data, LOW); // send 0
}
digitalWrite(myclock, HIGH); // tock
--i; // move to lesser bit
}
}
void selectColor(int cmd) //
{
byte reg = 0x0c; //max7219_reg_shutdown
byte col = 0x01; //shutdown false
byte col2 = 0x00; //shutdown true
int c = 0;
digitalWrite(load, LOW);
if (cmd == 0)//Off
{
for ( c =1; c<= 4; c++) {
putByte(reg);// specify register
putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data
putByte(reg);// specify register
putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data
}
}
else if (cmd == 2)//Green
{
led-> setIntensity(0,14);
for ( c =1; c<= 4; c++) {
putByte(reg);// specify register
putByte(col);//((data & 0x01) * 256) + data >> 1); // put data
putByte(reg);// specify register
putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data
}
}
else if (cmd == 3)//Red
{
led-> setIntensity(0,3);
for ( c =1; c<= 4; c++)
{
putByte(reg);// specify register
putByte(col2);//((data & 0x01) * 256) + data >> 1); // put data
putByte(reg);// specify register
putByte(col);//((data & 0x01) * 256) + data >> 1); // put data
}
}
digitalWrite(load, LOW);
digitalWrite(load,HIGH);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment