Amateur Question Photon Particle - Neopixel

Hey Folks,

im new to the Photon & Particle.
I simply want to set DigitalWrite over the Tinker App of my PIN0 to High & Low, to start the neopixel Rainbow sample & shut it off again…
Im trying to understand step by step, would be happy about any hint.

So far, it´s only starting the Rainbow code…

HAPPY christmas & thanks in advance

BEN


// This #include statement was automatically added by the Particle IDE.
#include "neopixel/neopixel.h"

#include "lib1.h"


int tinkerDigitalRead(String pin);
int tinkerDigitalWrite(String command);




SYSTEM_MODE(AUTOMATIC);

#define PIXEL_PIN D0
#define PIXEL_COUNT 28
#define PIXEL_TYPE WS2812B

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

void setup()
{
    strip.begin();
    strip.show(); 
	Particle.function("digitalread", tinkerDigitalRead);
	Particle.function("digitalwrite", tinkerDigitalWrite);
}

void rainbow(uint8_t wait);
uint32_t Wheel(byte WheelPos);

//{

//}





void loop()
{
  rainbow(20);



}



void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }


}


int tinkerDigitalRead(String pin)

{
	int pinNumber = pin.charAt(1) - '0';
	if (pinNumber< 0 || pinNumber >7) return -1;

	if(pin.startsWith("D"))
	{
		pinMode(pinNumber, INPUT_PULLDOWN);
		return digitalRead(pinNumber);
	}
	else if (pin.startsWith("A"))
	{
		pinMode(pinNumber+10, INPUT_PULLDOWN);
		return digitalRead(pinNumber+10);
	}
	return -2;
}


int tinkerDigitalWrite(String command)
{
	bool value = 0;
	int pinNumber = command.charAt(1) - '0';
	if (pinNumber< 0 || pinNumber >7) return -1;

	if(command.substring(3,7) == "HIGH") value = 1;
	else if(command.substring(3,6) == "LOW") value = 0;
	else return -2;

	if(command.startsWith("D"))
	{
		pinMode(pinNumber, OUTPUT);
		digitalWrite(pinNumber, value);
		return 1;
	}
	else if(command.startsWith("A"))
	{
		pinMode(pinNumber+10, OUTPUT);
		digitalWrite(pinNumber+10, value);
		return 1;
	}
	else return -3;
}

Since you are unconditionally calling rainbow(20) in loop() that’s all you’ll ever see :wink:

If you want to “abuse” Tinker for that you could write

bool doRainbow = false;

void loop() {
  if (doRainbow) {
    doRainbow = false; // do it only once
    rainbow(20);
  }
}

And then set doRainbow = true in one of your Particle.function() handlers.

1 Like

Ben, did @ScruffR’s suggestion resolve your issue?

1 Like