Things used in this project

Hardware components:
Photon new
Particle Photon
×1
MAX7219 8-Digit Red LED Display Module
×1
Adafruit industries ada592 image 75px
USB-A to Micro-USB Cable
×1
Software apps and online services:
Yahoo Query Language
Packagist
Hand tools and fabrication machines:
3drag
3D Printer (generic)
Dremel 200 Series

Custom parts and enclosures

Custom Enclosure
Custom project enclosure designed in Tinkercad.

Schematics

Schematic
Selection 240

Code

FirmwareC/C++
Firmware built using Particle Build online IDE and flashed to the Photon. Requires the LedControl-MAX7219-MAX7221 library to be included with the project.
// This #include statement was automatically added by the Particle IDE.
#include "LedControl-MAX7219-MAX7221/LedControl-MAX7219-MAX7221.h"

#include <math.h>

LedControl lc=LedControl(D6,D4,D5,1);

int count = 0;

void setup() {
    
  /*
   The MAX72XX is in power-saving mode on startup,
   we have to do a wakeup call
   */
  lc.shutdown(0,false);
  /* and clear the display */
  lc.clearDisplay(0);
  
  Particle.subscribe("hook-response/commonmark-count", gotPackagistCount, MY_DEVICES);
  
  lc.setChar(0, 0, '-', true);
  lc.setChar(0, 1, '-', false);
  lc.setChar(0, 2, '-', false);
  lc.setChar(0, 3, '-', false);
  lc.setChar(0, 4, '-', false);
  lc.setChar(0, 5, '-', false);
  lc.setChar(0, 6, '-', false);
  lc.setChar(0, 7, '-', false);
  
  Particle.publish("commonmark-count");
}

void loop() { 
  // Fetch updates every 5 minutes
  delay(1000 * 60 * 5);

  // Set the last decimal point to indicate that we're fetching an update
  // To do this, we need to set the last digit as well
  lc.setDigit(0, 0, count % 10, true);

  Particle.publish("commonmark-count");
}

void gotPackagistCount(const char *name, const char *data) {
  char *key = "total\":\"";
  char *ptrTotal = strstr(data, key);
  if (ptrTotal == NULL) {
    return;
  }

  ptrTotal += strlen(key);

  int x = 0;
  char result[8];
  while (x < 8 && *ptrTotal != '"') {
      result[x++] = *ptrTotal++;
  }
  result[x] = '\0';
  count = strtol(result, NULL, 10);
    
  // Display the count
  displayCount();
}

void displayCount() {
  int i = 0;
  int n = numPlaces(count);
  do {
    int digit = count % 10;
    lc.setDigit(0, i, digit, false);
    i++;
    count=(int)(count/10);
  } while (i < n);

  while(i < 8) {
    lc.setChar(0, i, ' ', false);
      i++;
  }
}

int numPlaces (int n) {
  if (n == 0) return 1;

  return floor (log10 (abs (n))) + 1;
}
particle-cli command to create the webhookPlain text
particle webhook GET commonmark-count "https://query.yahooapis.com/v1/public/yql?q=select%20downloads.total%20from%20json%20where%20url%3D'https%3A%2F%2Fpackagist.org%2Fpackages%2Fleague%2Fcommonmark.json'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"

Credits

202034
Colin O'Dell
1 project • 27 followers
Lead Web Developer at Unleashed Technologies. Author of league/commonmark. Conference speaker. Arduino enthusiast.
Contact

Replications

Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback

Comments

Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaBlog