One Wire Example striped to find sensors only builds using MBED 2 Library

Dependencies:   mbed

main.cpp

Committer:
Roietronics
Date:
2017-06-05
Revision:
0:486c7ab9114b

File content as of revision 0:486c7ab9114b:

/*****************************************************************************
 *                                                                           *
 * BOSCH RainGauge LoraWan Interface                                         *
 *                                                                           *
 * (c) 2016 Global Quality Corp                                              *
 * mailto:sudhir@gqc.com                                                     *
 * Global Quality Corp                                                       *
 *                                                                           *
 * Pal Alto, CA. 94040 USA                                                   *
 *                                                                           *
 * PERMISSION GRANTED TO USE IN NON-COMMERCIAL AND EDUCATIONAL PROJECTS      *
 * NO RESPONSIBILITY ASSUMED FOR DAMAGE OR LOSS OF ANY HARDWARE OR SOFTWARE  *
 *                                                                           *
 * version 0.2                                                               *
 * last change 7, Dec 2016                                              *
 *                                                                           *
 ****************************************************************************/
#include "mbed.h"
#include "onewire.h"
#include "DS18X20.h"
#include "DS2450.h"

uint8_t gSensorIDs[MAXSENSORS][OW_ROMCODE_SIZE];
uint8_t nSensors;
uint32_t nErreur;
uint32_t nErreur_DS18X20;
uint32_t nErreur_DS2450;
uint32_t nErreur_CRC;
uint32_t nErreur_BUS;
uint32_t nErreur_DS2450_START;
uint32_t nErreur_BUSY;
uint32_t nErreur_RESET;
uint32_t nMesure;
uint32_t micro_seconds;
Serial pc(USBTX, USBRX); // tx, rx
BusOut bugleds(LED1, LED2, LED3, LED4);

/**
*     @brief DS18X20_show_temp
*    @param  [in] id[] = rom_code
*    @param  [in] n number of id[n]
*    @param  [out] text temp in degre celsius

*     @date 20/06/2011
*/
/*
void DS18X20_show_temp(uint8_t subzero, uint8_t cel, uint8_t cel_frac_bits,char *text) {
    uint16_t decicelsius;
    char s[10];
    float temperature;
    sprintf(text,"");
    sprintf(s,"%s", (subzero)?"-":"+");
    strcat(text,s);
    decicelsius = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
    temperature = decicelsius;
    temperature = temperature/10;
    sprintf(s,"%4.1f", temperature);
    strcat(text,s);

}
*/

int main(void) {
    uint8_t sp[25];
    uint8_t num_sensor;
    uint8_t subzero, cel, cel_frac_bits;
    Timer timer;

    pc.printf("version 2017-06-2\n");
    pc.printf("Qantum 1 wire interface test!\n");



     ow_PullUp();
    if (search_sensors(&nSensors,&gSensorIDs[0][0])) {
        pc.printf("no Sensors found\n");
        return -1;
    } else {
        pc.printf("Sensors found : %d\n", nSensors);

        for (num_sensor=0; num_sensor<nSensors; ++num_sensor) {
            char text_id[25];
            ow_show_id( &gSensorIDs[num_sensor][0], OW_ROMCODE_SIZE,text_id );
            pc.printf("%s Sensor # %d is a ",text_id, num_sensor+1);
            //DS18X20
            if (( gSensorIDs[num_sensor][0] == DS18S20_ID) || ( gSensorIDs[num_sensor][0] == DS18B20_ID)) {
                if ( gSensorIDs[num_sensor][0] == DS18S20_ID)
                    pc.printf("DS18S20/DS1820 ");
                if ( gSensorIDs[num_sensor][0] == DS18B20_ID)
                    pc.printf("DS18B20 ");
/*                    
                if ( DS18X20_get_power_status( &gSensorIDs[num_sensor][0] ) ==
                        DS18X20_POWER_PARASITE )
                    pc.printf( "parasite" );
                else pc.printf( "externally" );
                pc.printf( " powered\n" );
8/
            }
            //DS2450
 /*
            if ( gSensorIDs[num_sensor][0] == DS2450_ID) {
                pc.printf("DS2450 ");
                for (uint8_t i=0 ; i< DS2450_SP_SIZE; i++ )     // DS2450 POWER extern
                    sp[i]=0;
                sp[4]=0x40;
                if (DS2450_configure_page(&gSensorIDs[num_sensor][0], DS2450_PAGE3,&sp[0]))
                    pc.printf("CRC Error conf page \n");
                if (DS2450_read_page(&gSensorIDs[num_sensor][0], DS2450_PAGE3,&sp[0]))
                    ;
                else
                    printf( "\n" );
                for ( char i=0 ; i< DS2450_SP_SIZE; i++ )
                    printf(":%2.2X",sp[i]);
                printf( "\n" );
                if (DS2450_configure_channel_ADC(&gSensorIDs[num_sensor][0],DS2450_ADCA,DS2450_12_BIT ,DS2450_IR_5V1))
                    pc.printf("CRC Error conf ADC\n");
                if (DS2450_configure_channel_ADC(&gSensorIDs[num_sensor][0],DS2450_ADCB,DS2450_1_BIT ,DS2450_IR_5V1))
                    pc.printf("CRC Error conf ADC\n");
                if (DS2450_configure_channel_ADC(&gSensorIDs[num_sensor][0],DS2450_ADCC,DS2450_1_BIT,DS2450_IR_5V1))
                    pc.printf("CRC Error conf ADC\n");
                if (DS2450_configure_channel_ADC(&gSensorIDs[num_sensor][0],DS2450_ADCD,DS2450_1_BIT,DS2450_IR_5V1))
                    pc.printf("CRC Error conf ADC\n");
                uint16_t adc[4];
                if (DS2450_start_and_read_ADC(&gSensorIDs[num_sensor][0], &adc[0]))
                    pc.printf("CRC Error read ADC\n");
                for (uint8_t i=0; i<4; ++i )
                    pc.printf(" adc%d:%X %f |",i,adc[i],adc[i]*5.1/65535);
                pc.printf("\n");
            }
*/
        }
        nErreur=0;
        nErreur_CRC=0;
        nErreur_BUS=0;
        nErreur_DS18X20=0;
        nErreur_DS2450=0;
        nErreur_DS2450_START=0;
        nErreur_BUSY=0;
        nErreur_RESET=0;
        nMesure=0;
        timer.start();
/*
        while (1) {
            wait(1);            // temps attente
            nMesure++;
            pc.printf("Mesure:%d erreur%d\n",nMesure,nErreur);
            bugleds=nErreur;
            switch (DS18X20_start_meas(DS18X20_POWER_EXTERN, 0 )) { // start measure ALL DS18X20
                case DS18X20_OK :
                    wait_ms(DS18B20_TCONV_12BIT);
                    break;
                case DS18X20_START_FAIL:
                    nErreur++;
                    nErreur_DS18X20++;
                    pc.printf("sensor DS18X20 : Start meas. failed \n");
                    break;
            }

            for (num_sensor=0; num_sensor<nSensors; ++num_sensor) {
                //DS2450
                if (gSensorIDs[num_sensor][0] == DS2450_ID) {
                    micro_seconds=timer.read_us();
                    uint16_t adc[4];
                    if (DS2450_start_and_read_ADC(&gSensorIDs[num_sensor][0], &adc[0])) // 3 essais avant erreur
                        if (DS2450_start_and_read_ADC(&gSensorIDs[num_sensor][0], &adc[0]))
                            switch (DS2450_start_and_read_ADC(&gSensorIDs[num_sensor][0], &adc[0])) {
                                case OW_OK:

                                    break;
                                case OW_BUSY:
                                    nErreur++;
                                    nErreur_DS2450++;
                                    nErreur_BUSY++;

                                    break;
                                case OW_ERROR:
                                    nErreur++;
                                    nErreur_DS2450++;
                                    nErreur_BUS++;

                                    break;
                                case OW_ERROR_CRC:
                                    nErreur++;
                                    nErreur_DS2450++;
                                    nErreur_CRC++;
                                    pc.printf("Error:%d\n",nErreur);
                                    pc.printf("ErrorDS2450_busy:%d\n",nErreur_BUSY);
                                    pc.printf("ErrorDS2450_start:%d\n",nErreur_DS2450_START);
                                    pc.printf("ErrorDS2450:%d\n",nErreur_DS2450);
                                    pc.printf("ErrorDS18X20:%d\n",nErreur_DS18X20);
                                    pc.printf("ErrorCRC:%d\n",nErreur_CRC);
                                    pc.printf("ErrorBUS:%d\n",nErreur_BUS);
                                    pc.printf("ErrorRESET:%d\n",nErreur_RESET);
                                    pc.printf("Mesure:%d\n",nMesure);
                                    break;
                                case OW_SHORT_CIRCUIT:
                                    nErreur++;
                                    nErreur_DS2450++;
                                    nErreur_RESET++;
                                    break;
                                case OW_ERROR_BAD_ID:

                                    break;
                            }
                    micro_seconds = timer.read_us()- micro_seconds; // duree lecture DS2450
                    pc.printf("sensor %d : time:%umicros\n",num_sensor+1,micro_seconds);
                    for (uint8_t i=0; i<4; ++i )
                        pc.printf(" adc%d:%X %f |",i,adc[i],adc[i]*5.1/65535);
                    pc.printf("\n");
                }

                //TEMP DS1820
                if ( (gSensorIDs[num_sensor][0] == DS18S20_ID) ||( gSensorIDs[num_sensor][0] == DS18B20_ID))
                    switch (DS18X20_read_meas( &gSensorIDs[num_sensor][0], &subzero, &cel, &cel_frac_bits)) {
                        case DS18X20_OK :
                            char text[25];
                            DS18X20_show_temp(subzero, cel, cel_frac_bits,text);
                            pc.printf("sensor %d : %s\n",num_sensor+1,text);
                            break;
                        case OW_ERROR:
                            nErreur++;
                            nErreur_BUS++;
                            nErreur_DS18X20++;
                            pc.printf("sensor %d : BUS Error\n",num_sensor+1);
                            break;
                        case DS18X20_ERROR_CRC:
                            nErreur++;
                            nErreur_DS18X20++;
                            nErreur_CRC++;
                            pc.printf("sensor %d : CRC Error\n",num_sensor+1);
                            break;
                    }
            }
*/
        }
    }
}