work fine

Dependencies:   mbed

main.cpp

Committer:
lixianyu
Date:
2016-06-01
Revision:
1:14b7c3a3ec60
Parent:
0:5ca227682ee7
Child:
2:487a727d6181

File content as of revision 1:14b7c3a3ec60:

// 本作品采用知识共享 署名-非商业性使用-相同方式共享 3.0 未本地化版本 许可协议进行许可
// 访问 http://creativecommons.org/licenses/by-nc-sa/3.0/ 查看该许可协议
// ==============

// 版权所有:
// @老潘orz  wasdpkj@hotmail.com
// ==============

// Microduino-IDE
// ==============
// Microduino Getting start:
// http://www.microduino.cc/download/

// Microduino IDE Support:
// https://github.com/wasdpkj/Microduino-IDE-Support/

// ==============
// Microduino wiki:
// http://wiki.microduino.cc

// ==============
// E-mail:
// Kejia Pan
// pankejia@microduino.cc

// ==============
// Weibo:
// @老潘orz

#define _MAIN_CPP

#include "mbed.h"
#include "MicroduinoPinNames.h"
#include "Microduino_Matrix.h"

uint8_t Addr[MatrixPix_X][MatrixPix_Y] = {
    { 64}
};

Matrix display = Matrix(Addr);
AnalogIn gAnalogIn(A0);
Timer g_Timer;

static const uint8_t logoA[] = {   //低位在前 逐行
    0x00, 0x66, 0x66, 0xDB, 0xDB, 0xDB, 0xDB, 0x00
};

static const uint8_t logoB[] = {  //BMP File
    0x42, 0x4D, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00,
    0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
    0x00, 0x00, 0xC2, 0x00, 0x00, 0x00, 0x20, 0x2E, 0x00, 0x00, 0x20, 0x2E, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFF, 0xEE, 0xEE, 0xEE,
    0xEE, 0xEE, 0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE,
    0xEE, 0x4D, 0x8E, 0x65, 0x26, 0x94, 0x50, 0x26, 0x94, 0x50, 0x26, 0x94, 0x50, 0x26, 0x94, 0x50,
    0x24, 0x60, 0x51, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE, 0xEE, 0xDD, 0xBB, 0x99, 0xDD, 0xBB, 0x99, 0x4B,
    0x94, 0xD4, 0x2B, 0x69, 0x96, 0xCC, 0xBB, 0x84, 0xCC, 0xAA, 0x88, 0xFF, 0xEE, 0xDD, 0xFF, 0xEE,
    0xEE, 0xC7, 0xBB, 0x99, 0x50, 0xB2, 0x70, 0x26, 0x94, 0x50, 0x26, 0x94, 0x50, 0x47, 0x94, 0x4D,
    0xCC, 0xAA, 0x88, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE, 0xEE, 0xDB, 0xCC, 0xB3, 0x53, 0xBB, 0x88, 0x53,
    0xBB, 0x88, 0x53, 0xBB, 0x88, 0x26, 0x94, 0x50, 0xB5, 0xAA, 0x92, 0xEE, 0xEE, 0xDD, 0xFF, 0xEE,
    0xEE, 0xDD, 0xDD, 0xCC, 0x53, 0xBB, 0x88, 0x3A, 0xD5, 0x95, 0x53, 0xBB, 0x88, 0x48, 0xAF, 0x50,
    0xCC, 0xAA, 0x99, 0xEE, 0xEE, 0xDD, 0xEE, 0xEE, 0xEE, 0xE2, 0xCB, 0xCD, 0x53, 0xBB, 0x88, 0x53,
    0xBB, 0x88, 0x3A, 0xD5, 0x95, 0x50, 0xB2, 0x70, 0xD6, 0xBB, 0xB1, 0xFF, 0xEE, 0xDD, 0xDD, 0xEE,
    0xEE, 0xEE, 0xEE, 0xEE, 0xFF, 0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0xFF, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE,
    0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xDD, 0x00, 0x00,
};

DigitalOut myled(D13);
#define delay wait_ms
void randomSeed(unsigned long seed)
{
    if (seed != 0) {
        //srandom(seed);
        srand(seed);
    }
}

long random(long howbig)
{
    if (howbig == 0) {
        return 0;
    }
    return rand() % howbig;
}

long random(long howsmall, long howbig)
{
    if (howsmall >= howbig) {
        return howsmall;
    }
    long diff = howbig - howsmall;
    return random(diff) + howsmall;
}

Serial pc(P0_4,P0_0);
#if 0
int main()
{
    int i;
    char buf[32];
    myled = 0;
    pc.baud(115200);
    g_Timer.start();
#if 1
    //getDeviceAddr
    for (int a = 0; a < display.getMatrixNum(); a++) {
        pc.printf("device add = %d", display.getDeviceAddr(a));
        pc.printf(" ");
    }
    pc.printf("\r\n");
#endif
    myled = !myled;
    display.clearDisplay();
    //setLedColor
    for (int y = 0; y < display.getHeight() * 8; y++) {
        for (int x = 0; x < display.getWidth() * 8; x++) {
            randomSeed(x);
            display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255));   //x, y, r, g, b
            delay(1000);
        }
    }
    delay(1000);
    myled = !myled;

    //setLed
    display.clearDisplay();
    display.setColor(0, 255, 0);
    for (int y = 0; y < display.getHeight() * 8; y++) {
        for (int x = 0; x < display.getWidth() * 8; x++) {
            display.setLed(x, y, true);   //x, y, sta
            delay(5);
        }
    }
    delay(1000);
    myled = !myled;

    //setLed
    display.clearDisplay();
    display.setColor(255, 0, 0);
    for (int y = 0; y < display.getHeight() * 8; y++) {
        for (int x = 0; x < display.getWidth() * 8; x++) {
            display.setLed(x, y, true);   //x, y, sta
            delay(5);
        }
    }
    delay(1000);
    myled = !myled;

    display.clearDisplay();
    display.setColor(0, 255, 0);
    display.drawBMP(0, 0, 8, 8, logoA);  //x,y,w,h,data
    delay(2000);
    myled = !myled;

    display.clearDisplay();
    //Windows Bitmap (BMP) file,24bit
    display.drawBMP(0, 0, logoB);   //x,y,data
    delay(2000);
    myled = !myled;

    //clearColor
    display.clearColor();
    //writeString H
    display.writeString("Microduino", MODE_H, 20, 0); //string, MODE, time ,y
    display.clearDisplay();
    //writeString V
    display.writeString("Microduino", MODE_V, 20, 0); //string, MODE, time ,x
    display.clearDisplay();
    myled = !myled;
    while(1) {
        display.setColor(random(0, 255), random(0, 255), random(0, 255));

        display.drawBox(0, 0, 8, 8);  //x,y,w,h
        delay(2000);
        display.clearDisplay();

        display.drawRBox(0, 0, 8, 8, 2);  //x,y,w,h,r
        delay(2000);
        display.clearDisplay();

        display.drawFrame(0, 0, 8, 8);  //x,y,w,h
        delay(2000);
        display.clearDisplay();

        display.drawRFrame(0, 0, 8, 8, 2);  //x,y,w,h,r
        delay(2000);
        display.clearDisplay();

        display.drawCircle(3, 3, 3);  //x,y,r
        delay(2000);
        display.clearDisplay();

        display.drawDisc(3, 3, 3);  //x,y,r
        delay(2000);
        display.clearDisplay();

        display.drawLine(0, 0, 7, 7); //x,y,x1,y1
        delay(2000);
        display.clearDisplay();

        i = display.getStringWidth("mCookie!");
        display.setColor(255, 255, 0);
        display.setFontMode(MODE_H);
        strcpy(buf, "mCookie!");
        for (int a = display.getWidth() * 8; a > -i - display.getWidth() * 8; a--) {
            display.setCursor(a, 0);   //x, y
            display.print(buf);
            delay(20);
        }
        display.clearDisplay();

        i = display.getStringHeight("mCookie!");
        display.setColor(255, 0, 255);
        display.setFontMode(MODE_V);
        for (int a = display.getHeight() * 8; a > -i - display.getHeight() * 8; a--) {
            display.setCursor(0, a);   //x, y
            display.print("mCookie!");
            delay(20);
        }
        display.clearDisplay();

        //Print
        int timer = g_Timer.read_ms();
        display.setColor(0, 255, 255);
        display.setFontMode(MODE_H);
        while (g_Timer.read_ms() - timer < 5000) {
            display.setCursor(0, 0);   //x, y
            display.print((g_Timer.read_ms() - timer) / 100);
            delay(20);
        }
        display.clearDisplay();

        //String to char*
        String _buffer_data = "Analog(A0):";
        //_buffer_data +=  analogRead(A0);
        _buffer_data += gAnalogIn.read_u16();

        char buffer_data[128];
        for (int a = 0; a < 128; a++) {
            buffer_data[a] = NULL;
        }

        for (int a = 0; a < _buffer_data.length(); a++) {
            buffer_data[a] = _buffer_data[a];
        }

        display.setColor(255, 255, 255);
        display.clearDisplay();
        display.writeString(buffer_data, MODE_H, 50, 1);
        myled = !myled;
    }
}
#elif 0
int main()
{
    int i;
    char buf[32];
    myled = 0;
    pc.baud(115200);
    g_Timer.start();
    pc.printf("rand max = %d\r\n", RAND_MAX);
#if 1
    //getDeviceAddr
    for (int a = 0; a < display.getMatrixNum(); a++) {
        pc.printf("device add = %d", display.getDeviceAddr(a));
        pc.printf(" ");
    }
    pc.printf("\r\n");
    //wait(5.0);
    pc.printf("Let us go into while\r\n");
#endif
    while (1) {
        myled = 1;
        //wait(2.0);
        //pc.printf("clearDisplay....\r\n");
        display.clearDisplay();
        int16_t height = display.getHeight();
        int16_t width = display.getWidth();
        //pc.printf("height = %d, width = %d\r\n", height, width);
        for (int y = 0; y < display.getHeight() * 8; y++) {
            for (int x = 0; x < display.getWidth() * 8; x++) {
                randomSeed(23);
                //display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255));   //x, y, r, g, b
                display.setLedColor(x, y, 156, 200, 56);   //x, y, r, g, b
                wait_ms(5);
            }
        }
        myled = 0;
        wait(1);
    }
}
#elif 0
I2C i2c(P0_11, P0_10);
void main()
{
    pc.baud(115200);
    pc.printf("Hello Microduino!\r\n");
    wait(3.5);
    i2c.frequency(400000);
    //i2c.start();
    uint8_t address = 64;
    char cmd = 0x60;
    int ret = i2c.write(address<<1, &cmd, 1, false);
    //int ret = i2c.write(0x60);
    pc.printf("clear led ret = %d\r\n", ret);
    //i2c.stop();

    uint8_t _value_r = random(0, 255);
    uint8_t _value_g = random(0, 255);
    uint8_t _value_b = random(0, 255);
    uint8_t temp[4];
    //temp[0] = 0x80 | (_row << 3) | _col;
    temp[1] = _value_b / 8;
    temp[2] = 0x20 | _value_g / 8;
    temp[3] = 0x40 | _value_r / 8;
    randomSeed(23);
    while (1) {
        i2c.write(address<<1, &cmd, 1, false);
        wait_ms(900);
        myled = !myled;
        for (int y = 0; y < display.getHeight() * 8; y++) {
            for (int x = 0; x < display.getWidth() * 8; x++) {
                //randomSeed(23);
                //display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255));   //x, y, r, g, b
                //display.setLedColor(x, y, 156, 200, 56);   //x, y, r, g, b
                _value_r = random(0, 255);
                _value_g = random(0, 255);
                _value_b = random(0, 255);
                temp[0] = 0x80 | (x << 3) | y;
                temp[1] = _value_b / 8;
                temp[2] = 0x20 | _value_g / 8;
                temp[3] = 0x40 | _value_r / 8;
                i2c.write(address<<1, (char*)temp, 4, false);
                wait_ms(5);
            }
        }
        wait(1.9);
    }
}
#elif 0
void main()
{
    randomSeed(gAnalogIn.read_u16());
    while (1) {
        display.setColor(random(0, 255), random(0, 255), random(0, 255));
        display.drawBox(0, 0, 8, 8);  //x,y,w,h
        delay(2000);
        display.clearDisplay();
        delay(599);
        //randomSeed(gAnalogIn.read_u16());
    }
}
#else
uint8_t donghua[128] = {
    0,0, 1,0, 2,0, 3,0, 4,0, 5,0, 6,0, 7,0,
    7,1, 7,2, 7,3, 7,4, 7,5, 7,6, 7,7,
    6,7, 5,7, 4,7, 3,7, 2,7, 1,7, 0,7,
    0,6, 0,5, 0,4, 0,3, 0,2, 0,1,
    1,1, 2,1, 3,1, 4,1, 5,1, 6,1,
};
void main()
{
    uint8_t r,g,b;
    randomSeed(gAnalogIn.read_u16());
    display.clearDisplay();
    int8_t x = 0;
    int8_t y = 0;
    int8_t xMax = 7;
    int8_t yMax = 7;
    int8_t xMin = 0;
    int8_t yMin = 0;
    uint8_t state = 0;
    r = random(0, 255);
    g = random(0, 255);
    b = random(0, 255);
    while (true) {
        display.setLedColor(x, y, r, g, b);   //x, y, r, g, b
        delay(50);
        if (x == 3 && y == 4) {
            x = 0;
            y = 0;
            xMax = 7;
            yMax = 7;
            xMin = 0;
            yMin = 0;
            display.clearDisplay();
            delay(500);
            state = 0;
            r = random(0, 255);
            g = random(0, 255);
            b = random(0, 255);
            display.setLedColor(0, 0, r, g, b);   //x, y, r, g, b
            //continue;
        }

        if (state == 0) {
            x++;
            if (x > xMax) {
                state = 1;
                x = xMax;
                y++;
            }
        } else if (state == 1) {
            y++;
            if (y > yMax) {
                state = 2;
                y = yMax;
                x--;
            }
        } else if (state == 2) {
            x--;
            if (x < xMin) {
                state = 3;
                x = xMin;
                y--;
            }
        } else if (state == 3) {
            y--;
            if (y == yMin) {
                state = 0;
                y = yMin+1;
                x++;
                xMax--;
                yMax--;
                xMin++;
                yMin++;
            }
        }
    }
}
#endif