FlashAir Developers Summit OSAKA 2019 handson step2

Dependencies:   mbed ADT7410 FlashAir_iSDIO SDFileSystem USBDevice

main.cpp

Committer:
hogejun
Date:
2019-01-19
Revision:
9:e4bd6b88187d
Parent:
8:49dfc9ab1950

File content as of revision 9:e4bd6b88187d:

#include "mbed.h"
#include "FlashAir_iSDIO.h"
#include "USBSerial.h"
#include "ADT7410.h"

#define USE_ADT7410
//-------------------------------------------------------------------------------
//Port Settings
DigitalOut led1(LED1);
//DigitalOut led2(P1_13,0);

InterruptIn sw(P1_20);
InterruptIn isp(P0_1);

DigitalOut sA1(P0_13,0);
DigitalOut sA2(P1_21,0); 
DigitalOut sB(P0_9,0);
DigitalOut sC(P0_20,0);
DigitalOut sD1(P0_14,0);
DigitalOut sD2(P1_26,0);
DigitalOut sE(P0_16,0);
DigitalOut sF(P0_11,0);
DigitalOut sG1(P0_23,0);
DigitalOut sG2(P0_8,0);
DigitalOut sJ(P0_12,0);
DigitalOut sK(P1_28,0);
DigitalOut sL(P1_31,0);
DigitalOut sP(P1_23,0);
DigitalOut sN(P1_27,0);
DigitalOut sM(P0_2,0);
DigitalOut sDP(P1_25,0);
DigitalOut SD_VEN(P1_16);
//Serial console(P0_19, P0_18); // TX, RX
//FlashAir_iSDIO sd(P0_21, P0_22, P1_15, P0_17, "sd", &console); // mosi(CMD), miso(DAT0), sclk(CLK), cs(DAT3)
FlashAir_iSDIO sd(P0_21, P0_22, P1_15, P0_17, "sd"); // mosi(CMD), miso(DAT0), sclk(CLK), cs(DAT3)

USBSerial serial;
#ifdef USE_ADT7410
ADT7410 sensor(P0_5, P0_4, 0x90, 100000);
#else
int dummyval[] = {0,1,2,3,4,5,6,7,8,9};
#define DUMMYVALLEN (sizeof(dummyval)/sizeof(dummyval[0]))
#endif
int sense_int;
float senseval;

//-------------------------------------------------------------------------------
//Program

int wlan_connected = 0;
uint32_t sequenceId ;

void sw_int(){
    serial.printf("sw_int\n");
    if(wlan_connected==1){
        // disconnect 
        // 1. get sequenceID
        // 2. issue disconnect command
        // 3. wait response 
    serial.printf("disconnect\n");
        sequenceId = sd.getNextSequenceId();
        sd.wlan_disconnect(sequenceId);
        sd.waitResponse(sequenceId);
        wlan_connected =0;
//        led1 = 0;
        sDP = 0;
        wait(5.0);
    }else{
        // establish
        // 1. get sequenceID
        // 2. issue establish command
        // 3. wait resoonse        
    serial.printf("establish\n");
        sequenceId = sd.getNextSequenceId();
        sd.wlan_establish(sequenceId, "isdiotest", "12345678", FlashAir_iSDIO::ENCMODE_WPA2PSK_AES);
        sd.waitResponse(sequenceId);
//        led1 = 1;
        sDP = 1;
        wlan_connected =1;
        wait(5.0);
    
    }
}

void isp_int(){
    #define TESTDATA "deadbeaf"
    char testdata[] = TESTDATA;
    uint8_t data[sizeof(testdata)];
    memcpy(data, &testdata, sizeof(data));
    sd.write_shared_mem(0x0, data, sizeof(data));
    wait(3.0);
}

#if 1
void write_shmem(float val)
{
    char data[255];
    sprintf(data, "%.02f", val);
    sd.write_shared_mem(0x0, (uint8_t*)data, sizeof(data));
    wait(1.0);
}
#endif

void seg_disp(int val){
    switch((val/10)%10){
        case 0:sA1=1;sA2=1;sB=0;sF=0;sJ=1;sK=0;sL=1;break;
        case 1:sA1=1;sA2=1;sB=0;sF=0;sJ=0;sK=0;sL=0;break;
        case 2:sA1=0;sA2=0;sB=0;sF=1;sJ=1;sK=0;sL=1;break;
        case 3:sA1=0;sA2=0;sB=0;sF=0;sJ=1;sK=1;sL=1;break;
        case 4:sA1=1;sA2=1;sB=1;sF=0;sJ=0;sK=1;sL=0;break;
        case 5:sA1=0;sA2=1;sB=1;sF=0;sJ=1;sK=1;sL=0;break;
        case 6:sA1=1;sA2=1;sB=0;sF=0;sJ=1;sK=1;sL=0;break;
        case 7:sA1=0;sA2=0;sB=0;sF=0;sJ=1;sK=0;sL=1;break;
        case 8:sA1=1;sA2=1;sB=0;sF=0;sJ=1;sK=1;sL=1;break;
        case 9:sA1=0;sA2=1;sB=0;sF=0;sJ=1;sK=1;sL=1;break;
        default:sA1=0;sA2=0;sB=0;sF=0;sJ=0;sK=0;sL=0;break;
    }
    switch(val%10){
        case 0:sC=1;sD1=1;sD2=1;sE=1;sG1=1;sG2=1;sN=0;break;
        case 1:sC=0;sD1=1;sD2=1;sE=0;sG1=0;sG2=0;sN=0;break;
        case 2:sC=1;sD1=0;sD2=1;sE=1;sG1=1;sG2=0;sN=1;break;
        case 3:sC=1;sD1=1;sD2=1;sE=1;sG1=0;sG2=0;sN=1;break;
        case 4:sC=0;sD1=1;sD2=1;sE=0;sG1=0;sG2=1;sN=1;break;
        case 5:sC=1;sD1=1;sD2=0;sE=1;sG1=0;sG2=1;sN=1;break;
        case 6:sC=1;sD1=1;sD2=0;sE=1;sG1=1;sG2=1;sN=1;break;
        case 7:sC=1;sD1=1;sD2=1;sE=0;sG1=0;sG2=0;sN=0;break;
        case 8:sC=1;sD1=1;sD2=1;sE=1;sG1=1;sG2=1;sN=1;break;
        case 9:sC=1;sD1=1;sD2=1;sE=1;sG1=0;sG2=1;sN=1;break;
        default:sC=0;sD1=0;sD2=0;sE=0;sG1=0;sG2=0;sN=0;break;
    }
}


void out_file(float val)
{
    FILE *fd = fopen("/sd/test.text", "a");
    fprintf(fd, "%.02f\n\r", val);
    fclose(fd);
    
    led1 = 1;
    wait(0.5);
    led1 = 0;    
}

int main()
{
     serial.printf("Hello FlashAir_iSDIO_16seg_ADT7410\n");
     wait(1.0);
     SD_VEN = 1;
    // Initialize card
    FILE *fp = fopen("/sd/isdio.txt", "w");
    fclose(fp);
    
#ifdef USE_ADT7410
    sensor.reset();
#endif

    // disconnect anyway    
    sequenceId = sd.getNextSequenceId();
    sd.wlan_disconnect(sequenceId);
    sd.waitResponse(sequenceId);
    
    // register interrupt handler
    sw.rise(&sw_int);
    isp.rise(&isp_int);
    
    int i=0;
    while(1)
    {
#ifdef USE_ADT7410
        senseval = sensor.getTemp();
        sense_int = (int)sensor.getTemp();
#else
        sense_int = dummyval[i];
#endif        
        seg_disp(sense_int);
        out_file(senseval);
        write_shmem(senseval);
        serial.printf("%f\n",senseval);
        i++;
#ifndef USE_ADT7410
        if(i>=DUMMYVALLEN) i=0;
#endif
        wait(0.3);        
    }
}