void loop( void ) { bool gpsDateTimeValid; bool gpsTransitDataValid; bool obdSpeedKphValid; /* Update GPS & OBD data drivers */ GPS_update(); OBD_update(); /* Wait for valid date & time */ if ( millis() - g_timer_sample_count_ms >= g_timer_sample_rate_ms ) { /* Blink status LED for 100ms */ LED_blink( LED_ID_STATUS, 100 ); /* Get GPS date & time */ gpsDateTimeValid = GPS_getUtcDateTime( &g_sampledDateTime ); /* Increase sample rate if GPS date and time is locked */ g_timer_sample_rate_ms = ( gpsDateTimeValid ) ? TIMER_GPS_LOCKED_SAMPLE_RATE_MS : TIMER_GPS_NOT_LOCKED_SAMPLE_RATE_MS; /* Get GPS transit data */ gpsTransitDataValid = GPS_getTransitData( &g_sampledTransitData ); /* Get OBD vehicle speed KPH */ obdSpeedKphValid = OBD_getVehicleSpeed( &g_sampledVehicleSpeedKph ); /* Output sampled data to serial port */ Serial_printf( /* 0 1 2 3 4 5 6 7 8 9 A B C D E */ "%lu,%u,%04u-%02u-%02uT%02u:%02u:%02uZ00:00,%u,%f,%f,%f,%f,%u,%f\n", GPS_getNumOfSatellites(), /* 0 */ gpsDateTimeValid, /* 1 */ g_sampledDateTime.year, /* 2 */ g_sampledDateTime.month, /* 3 */ g_sampledDateTime.day, /* 4 */ g_sampledDateTime.hour, /* 5 */ g_sampledDateTime.minute, /* 6 */ g_sampledDateTime.second, /* 7 */ gpsTransitDataValid, /* 8 */ g_sampledTransitData.lat, /* 9 */ g_sampledTransitData.lng, /* A */ g_sampledTransitData.speedMph, /* B */ g_sampledTransitData.course, /* C */ obdSpeedKphValid, /* D */ g_sampledVehicleSpeedKph /* E */ ); g_timer_sample_count_ms = millis(); } /* Reset the WDT */ WDT_reset(); }
// main loop int main(void){ uint8_t stateDS18=DS18B20_STATUS_READY; #ifdef USE_WDT WDT_init(WDTO_8S); #endif initGPIO(); LCD_init(); showLcdSplash(); setLcdInitialFields(); paramLoadFromEeprom(); USART1_config(USART1_MY_UBBRN,USART_DATA_FORMAT_8BITS|USART_STOP_BITS_1,USART_TRANSMIT_ENABLE|USART_RECEIVE_ENABLE| USART_INTERRUPT_ENABLE); USART1_sendStr("Hello"); schedulerInit(); // check for the default values #ifdef USE_WDT WDT_init(WDTO_8S); #endif sei(); //enable interrups // loop while while(1){ // cintrol zone if(flagTaskControl){ #ifdef USE_WDT WDT_reset(); #endif LED_RUN_OFF; // fire the DS if(stateDS18==DS18B20_STATUS_READY){ DS18B20_startConv(); stateDS18=DS18B20_STATUS_CONV; // check if convertion ended }else if(stateDS18==DS18B20_STATUS_CONV){ if(DS18B20_convComplete()){ stateDS18=DS18B20_STATUS_END_CONV; } // convertion ready }else if (stateDS18==DS18B20_STATUS_END_CONV){ LED_RUN_ON; currentTemp=DS18B20_getTemp(); stateDS18=DS18B20_STATUS_READY; currentStatus = checkTempError(currentTemp,currentTempSetPoint,currentHistSetPoint); // chec the out setOutputRelay(currentStatus); _delay_ms(50); LED_RUN_OFF; } flagTaskControl=0; } // user bottons area if(flagTaskReadButtons){ #ifdef USE_WDT WDT_reset(); #endif uint8_t portVal = readButtons(); uint8_t code = decodeButton(portVal); code = debounceKey(code); #ifdef MAIN_DEBUG sprintf(debugBuffer,"Key %d",code); USART1_sendStr(debugBuffer); #endif stateMachine(code); // go to machine flagTaskReadButtons=0; } // lcd update area if(flagTaskUpdateLcd){ #ifdef USE_WDT WDT_reset(); #endif //showLcdSavedMessage(); updateLcd(); // update the lcd flagTaskUpdateLcd=0; } // save to eeprom if(flagSaveParametersEeprom){ #ifdef USE_WDT WDT_reset(); #endif paramSavetoEeprom(); // save value sto eeprom showLcdSavedMessage(); setLcdInitialFields(); updateLcd(); flagSaveParametersEeprom=0; } } }