I just got an MCP3008 ACD chip working over SPI, unfortunately I have no idea how any of this works so I can't be of much more help, but I figured I'd post my working code here for anyone else to look at.
#include <SPI.h>
#define CS_PIN 5 // I used pin 5
int pinRead = 0;
char buf[64];
int adcRead(int channel) {
if ((channel > 7) || (channel < 0)) {
return -1;
}
digitalWrite(CS_PIN, LOW);
SPI.transfer(1);
uint8_t r1 = SPI.transfer((channel + 8) << 4);
uint8_t r2 = SPI.transfer(0);
digitalWrite(CS_PIN, HIGH);
return ((r1 & 3) << 8) + r2;
}
void setup() {
pinMode(CS_PIN, OUTPUT);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setFrequency(1000000); // 1 MHz -- remove line when running on Arduino UNO
digitalWrite(CS_PIN, HIGH);
}
void loop() {
pinRead = adcRead(0);
sprintf(buf, "%i", pinRead);
Particle.publish("Pin 0", buf);
delay(1000);
}