Albert-Jan Knevels / Mbed 2 deprecated CherryStone

Dependencies:   mbed

main.cpp

Committer:
EiJay
Date:
2014-10-29
Revision:
17:0dee2d58c357
Parent:
16:62feeff507d5
Child:
18:1fddc3e5fffe

File content as of revision 17:0dee2d58c357:

/*ÛÛÛÛÛÛÛÛÛ  ÛÛÛÛÛ                                               ÛÛÛÛÛÛÛÛÛ   ÛÛÛÛÛ
  ÛÛÛ°°°°°ÛÛÛ°°ÛÛÛ                                               ÛÛÛ°°°°°ÛÛÛ °°ÛÛÛ
 ÛÛÛ     °°°  °ÛÛÛÛÛÛÛ    ÛÛÛÛÛÛ  ÛÛÛÛÛÛÛÛ  ÛÛÛÛÛÛÛÛ  ÛÛÛÛÛ ÛÛÛÛ°ÛÛÛ    °°°  ÛÛÛÛÛÛÛ    ÛÛÛÛÛÛ  ÛÛÛÛÛÛÛÛ    ÛÛÛÛÛÛ
°ÛÛÛ          °ÛÛÛ°°ÛÛÛ  ÛÛÛ°°ÛÛÛ°°ÛÛÛ°°ÛÛÛ°°ÛÛÛ°°ÛÛÛ°°ÛÛÛ °ÛÛÛ °°ÛÛÛÛÛÛÛÛÛ °°°ÛÛÛ°    ÛÛÛ°°ÛÛÛ°°ÛÛÛ°°ÛÛÛ  ÛÛÛ°°ÛÛÛ
°ÛÛÛ          °ÛÛÛ °ÛÛÛ °ÛÛÛÛÛÛÛ  °ÛÛÛ °°°  °ÛÛÛ °°°  °ÛÛÛ °ÛÛÛ  °°°°°°°°ÛÛÛ  °ÛÛÛ    °ÛÛÛ °ÛÛÛ °ÛÛÛ °ÛÛÛ °ÛÛÛÛÛÛÛ
°°ÛÛÛ     ÛÛÛ °ÛÛÛ °ÛÛÛ °ÛÛÛ°°°   °ÛÛÛ      °ÛÛÛ      °ÛÛÛ °ÛÛÛ  ÛÛÛ    °ÛÛÛ  °ÛÛÛ ÛÛÛ°ÛÛÛ °ÛÛÛ °ÛÛÛ °ÛÛÛ °ÛÛÛ°°°
 °°ÛÛÛÛÛÛÛÛÛ  ÛÛÛÛ ÛÛÛÛÛ°°ÛÛÛÛÛÛ  ÛÛÛÛÛ     ÛÛÛÛÛ     °°ÛÛÛÛÛÛÛ °°ÛÛÛÛÛÛÛÛÛ   °°ÛÛÛÛÛ °°ÛÛÛÛÛÛ  ÛÛÛÛ ÛÛÛÛÛ°°ÛÛÛÛÛÛ
  °°°°°°°°°  °°°° °°°°°  °°°°°°  °°°°°     °°°°°       °°°°°ÛÛÛ  °°°°°°°°°     °°°°°   °°°°°°  °°°° °°°°°  °°°°°°
                                                       ÛÛÛ °ÛÛÛ
                                                      °°ÛÛÛÛÛÛ

                                                      °°°°°°*/

//TODO:
/*
1. include I am alive - to check if connecting w/ the mbed was succesfull
2. include a watch dog system for unconditional errors --> auto reset
*/


#include "mbed.h"
#include "MLX90393.h"
int main()
{
    //mBed indicators
    DigitalOut a1(p21);
    DigitalOut a0(p22);

    //PC-communication
    Serial pc (USBTX, USBRX);
    pc.baud(9600);

    //variables
    int hostData1,hostData2,hostData3, content_buffer[63];
    unsigned int dataInteger0, dataInteger1, dataInteger2;
    char read_buffer[11], hostCommand;

    //Chip communication (SPI)
    /*SPI spi(p5, p6, p7);
    spi.format(MLX90393::spi_bits,MLX90393::spi_mode);
    spi.frequency(100000000);
    MLX90393 sensor(p8,&spi);
    */
    
    //Chip communication (I2C)
    a1=0;
    a0=0;
    I2C i2c(p9, p10);
    i2c.frequency(75000);
    MLX90393 sensor(MLX90393::i2c_address,&i2c);


    //if you remove this line the program will fail
    //also make sure that you always send the status back to the host

    hostCommand = 0;
    while(1) {
        pc.scanf(" %i, %i, %i, %i", &hostCommand, &hostData1, &hostData2, &hostData3);
        switch(hostCommand) {
            case 0: {
                //read eeprom (implemented CS)
                sensor.RR(read_buffer,hostData1,hostData2);
                printf("%i\n",(read_buffer[0]*65536)+(read_buffer[1]*256) + read_buffer[2]);
                break;
            }
            case 1: {
                //read eeprom full (implemeted CS)
                for (int i = 0; i<63; i++) {
                    sensor.RR(read_buffer,i,hostData1);
                    content_buffer[i] = (read_buffer[0]*65536)+(read_buffer[1]*256) + read_buffer[2];
                }
                for (int i = 0; i<63; i++) {
                    printf("%i\n",content_buffer[i]);
                }
                break;
            }
            case 2: {
                //Write register
                sensor.WR(read_buffer,hostData1,hostData2,hostData3);
                break;
            }
            case 3: {
                break;
            }
            case 4: {
                //reset (Implemeted)
                sensor.RT(read_buffer,hostData1);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 5: {
                //exit (implemented in cs)
                sensor.EX(read_buffer,hostData1);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 6: {
                //single measurement (implemented)
                sensor.SM(read_buffer,hostData1,hostData2);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 7: {
                //read measurement (implemented cs)
                sensor.RM(read_buffer,hostData1,hostData2);
                dataInteger0 = (read_buffer[0]<<24)+ (read_buffer[1]<<16)+(read_buffer[2]<<8)+read_buffer[3];
                dataInteger1 = (read_buffer[4]<<24)+ (read_buffer[5]<<16)+(read_buffer[6]<<8)+read_buffer[7];
                dataInteger2 = (read_buffer[8]<<16)+ (read_buffer[9]<<8)+read_buffer[10];
                printf("%u,%u,%u\n",dataInteger0,dataInteger1,dataInteger2);
                break;
            }
            case 8: {
                //burst (implemented CS)
                sensor.SB(read_buffer,hostData1,hostData2);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 9: {
                //wake up on change (Implemented in cs)
                sensor.SWOC(read_buffer,hostData1,hostData2);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 10: {
                //memory recall
                sensor.HR(read_buffer,hostData1);
                printf("%i\n",read_buffer[0]);
                break;
            }
            case 11: {
                //memory store
                sensor.HS(read_buffer,hostData1);
                printf("%i\n",read_buffer[0]);
                break;
            }

        }
    }
}