jack hanlon / Mbed 2 deprecated NeoPixelsJack

Dependencies:   mbed C12832_lcd LCD_fonts NeoStrip

main.cpp

Committer:
slackerjacker
Date:
2021-04-20
Revision:
2:a04589b1a088
Parent:
1:a9f32c0c835d

File content as of revision 2:a04589b1a088:

/*
 * Adafruit NeoPixel example
 *
 * This program displays a couple simple patterns on an 8x8 NeoPixel matrix.
 *
 */

#include "mbed.h"
#include "NeoStrip.h"
#include "gt.h"
#include "C12832_lcd.h"
#include "Arial_9.h"
#include "Small_7.h"


#define N 12  //number of leds


#define PATTERNS 3
Serial pc(USBTX, USBRX);

//int hueToRGB(float h);
//void pattern0();
//void pattern1();
//void pattern2();

// array of function pointers to the various patterns
//void (*patterns[])(void) = {&pattern0, &pattern1, &pattern2};

NeoStrip strip(p25, N); // DIN PIN with number of LEDs
NeoStrip led1(p25, 0); 
C12832_LCD LCD("LCD");
//NeoStrip leds[] = {(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)};

//DigitalIn b1(p20); // brightness up
//DigitalIn b2(p19); // brightness down
//DigitalIn b3(p22); // next pattern

// timer used for debugging
Timer timer;

int main()
{
//	b1.mode(PullDown);
//	b2.mode(PullDown);
//	b3.mode(PullDown);
	
	//int pattern = 0;

	//bool b3o = b3;		// old copy of button 3 to poll for changes
	//int p = 0;
	
	////////////////////////////////////
	//////note colours value below////// 
	////////////////////////////////////
	 
    float bright = 0.05;	// 20% is plenty for indoor use
    int red = 0xFF0000; 
    int orange = 0xFF8000;
    int yellow = 0xFFFF00;
    int green = 0x00FF44; 
    int blue = 0x00BFFF; 
    int indigo = 0x0F0082;
    int violet = 0x8000B4;
    int white = 0xFFFFFF;
	int i = 0; 
	int hueToRGB(float h);
    
	strip.setBrightness(bright);	// set default brightness


	pc.printf("1 - Bootup\n\r");
	pc.printf("2 - Bootdown\n\r");
	pc.printf("3 - Clear\n\r");
	pc.printf("4 - Happy\n\r");
	pc.printf("5 - Sad\n\r");

	while(true)

	{if (pc.readable()) {
            switch(pc.getc()) {
                case '1'://bootup sequence
//strip.setPixels(0, N, test_img);
    LCD.cls();
        {
    strip.clear();
    strip.write();
    wait_ms(200);
    strip.setPixel(0,red);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(1,orange);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(2,yellow);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(3,green);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(4,blue);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(5,indigo);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(6,violet);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(7,indigo);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(8,blue);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(9,green);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(10,yellow);
    strip.write();
    wait_ms(200);
    
    strip.setPixel(11,orange);
    strip.write();
    wait_ms(200);
}   
 

      
                    break;
                	case '2'://bootdown sequence
  
    LCD.cls();
    
    strip.setPixel(11,orange);
    strip.write();
    wait_ms(1);

    
    
    strip.setPixel(10,yellow);
    strip.write();
    wait_ms(1);


    strip.setPixel(9,green);
    strip.write();
    wait_ms(1);


    strip.setPixel(8,blue);
    strip.write();
    wait_ms(1);


    strip.setPixel(7,indigo);
    strip.write();
    wait_ms(1);

    strip.setPixel(6,violet);
    strip.write();
    wait_ms(1);

    strip.setPixel(5,indigo);
    strip.write();
    wait_ms(1);

    strip.setPixel(4,blue);
    strip.write();
    wait_ms(1);

    strip.setPixel(3,green);
    strip.write();
    wait_ms(1);

    strip.setPixel(2,yellow);
    strip.write();
    wait_ms(1);

    strip.setPixel(1,orange);
    strip.write();
    wait_ms(1);

    strip.setPixel(0,red);
    strip.write();
    wait_ms(1);

{
	for (int i = 11; i >= 0; i--)
	{strip.setPixel(i,0,0,0);
    strip.write();
    wait_ms(500);
	}
}
   
    

    

                    break;
                    case '3'://clear
    LCD.cls();
    strip.clear();
    strip.write();
    
    break;
                	case '4':

    LCD.claim(stdout);     
    LCD.locate(10,0);
    LCD.set_font((unsigned char*) Arial_9);
    printf("Happy Bot");
    LCD.copy_to_lcd();
    LCD.set_font((unsigned char*) Small_7);


while(true)
{	
{	
		for (int i = 0; i < N; i++)
		{
		strip.setPixel(i,white);
	    strip.write();
	    wait_ms(15);
	    }

//if(white)
{	
		for (int i = 0; i < N; i++)
		{
		strip.setPixel(i,yellow);
	    strip.write();
	    wait_ms(50);
	    }
//else(yellow)    
{
		for (int i =0; i < N; i++)
		{
		strip.setPixel(i,orange);
		strip.write();
		wait_ms(50);
		}

}
//return 1;




//for (int i = 0; i < 4; i++)
//strip.clear();
//wait_ms(100);


         	break;
         	
				case '5':
{	
		for (int i = 0; i < 12; i++)
		strip.setPixel(i,blue);
	    strip.write();
	    wait_ms(1);
	    } 	
	    
{
        for (int i = 0; i<0.2; i+0.01)
        strip.setBrightness(bright+i);
        wait_ms(20);
         }
         
         
         
         	
         	
         	
 				break;        	
         	
         	
       //  			case '5':

{
	static float dh = 360.0 / N;
	static float x = 0;

	for (int i = 0; i < N; i++)
		strip.setPixel(i, hueToRGB((dh * i) - x));
	
	x += 1;
	if (x > 360)
		x = 0;
}

//			break;
//led1 = 1;
//wait(0.5);
//strip.write();
//led1 = !1;
//wait(0.5);
//strip.write();

                	
 //  PwmOut strip();
  //  strip.setPixel.write(0,red,brightness));

    

	              
    //    wait_ms(30);                          
      //  brightness = brightness + fadeAmount;            
        
        //if((int)brightness == 1.0)           
          //  brightness = 0;
        //{
                    
                    
    
	
//}

























	
	/*while (true)
	{
		timer.reset(); // use a timer to measure loop execution time for debugging purposes
		timer.start(); // for this application, the main loop takes approximately 3ms to run

		// button 1 increases brightness
		if(0) //(b1 && bright < 1)
		{
			bright += 0.01;
			if (bright > 1)
				bright = 1;
			strip.setBrightness(bright);
		}

		// button 2 decreases brightness
		if (0)//(b2 && bright > 0)
		{
			bright -= 0.01;
			if (bright < 0)
				bright = 0;
			strip.setBrightness(bright);
		}
		
		// button 3 changes the pattern, only do stuff when its state has changed
		if (0)//(b3 != b3o)
		{
			if (b3 && ++pattern == PATTERNS)
				pattern = 0;
			b3o = b3;
		}
		
		// run the pattern update function which sets the strip's pixels
		patterns[pattern]();
		strip.write();

		timer.stop();
		// print loop time if b3 is pressed
		if (b3)
			printf("Loop Time: %dus\n", timer.read_us());
		
		wait_ms(10);
	}
}*/

// pattern0 displays a static image
/*void pattern0()
{
	strip.setPixels(0, N, gt_img);
}

// display a shifting rainbow, all colors have maximum
// saturation and value, with evenly spaced hue
void pattern1()
{
	static float dh = 360.0 / N;
	static float x = 0;

	for (int i = 0; i < N; i++)
		strip.setPixel(i, hueToRGB((dh * i) - x));
	
	x += 1;
	if (x > 360)
		x = 0;
}

// display a shifting gradient between red and blue
void pattern2()
{
	// offset for each pixel to allow the pattern to move
	static float x = 0;

	float r, b, y;

	for (int i = 0; i < N; i++)
	{
		// y is a scaled position between 0 (red) and 1.0 (blue)
		y = 1.0 * i / (N - 1) + x;
		if (y > 1)
			y -= 1;

		// if on the left half, red is decreasing and blue is increasng
		if (y < 0.5)
		{
			b = 2 * y;
			r = 1 - b;
		}

		// else red is increasing and blue is decreasing
		else
		{
			r = 2 * (y - 0.5);
			b = 1 - r;
		}

		// scale to integers and set the pixel
		strip.setPixel(i, (uint8_t)(r * 255), 0, (uint8_t)(b * 200));
	}

	x += 0.003;
	if (x > 1)
		x = 0;
}

// Converts HSV to RGB with the given hue, assuming
// maximum saturation and value
int hueToRGB(float h)
{
	// lots of floating point magic from the internet and scratching my head
	float r, g, b;
	if (h > 360)
		h -= 360;
	if (h < 0)
		h += 360;
	int i = (int)(h / 60.0);
	float f = (h / 60.0) - i;
	float q = 1 - f;
	
	switch (i % 6)
	{
		case 0: r = 1; g = f; b = 0; break;
		case 1: r = q; g = 1; b = 0; break;
		case 2: r = 0; g = 1; b = f; break;
		case 3: r = 0; g = q; b = 1; break;
		case 4: r = f; g = 0; b = 1; break;
		case 5: r = 1; g = 0; b = q; break;
		default: r = 0; g = 0; b = 0; break;
	}
	
	// scale to integers and return the packed value
	uint8_t R = (uint8_t)(r * 255);
	uint8_t G = (uint8_t)(g * 255);
	uint8_t B = (uint8_t)(b * 255);

	return (R << 16) | (G << 8) | B;
}
*/}}
}}}}}