/* main ===================================================================== */ int main (void) { uint16_t usAdc; // pour valeur ADC double dValue; // pour la valeur de l'humidité xAdcSensor xSensor; /* * Repère d'étalonnage utilisé pour le test * * Le capteur est un modèle HIH4030 de Honeywell. Il est connecté à la * broche ADC0. C'est un capteur linéaire. * Le datasheet nous donne les valeurs de tension en sortie: * V1 = Vout(0%) = 958mV * V2 = Vout(75.3%) = 3268mV * comme Vref=5V, le quantum de l'ADC vaut LSB=5/1024=4.88mV donc : * V1 = Vout(0%) = 958mV et ADC = 196 LSB * V2 = Vout(75.3%) = 3268mV et ADC = 670 LSB * Ce qui donne le repère xSetting = (0, 75.3, 196, 670) */ xAdcSensorSetting xSetting = ADC_SENSOR_SETTING_LINEAR(0, 75.3, 196, 670); // Configuration du port série par défaut (8N1, sans RTS/CTS) xSerialIos settings = SERIAL_SETTINGS (BAUDRATE); // Ouverture du port série en sortie FILE * serial_port = xFileOpen (PORT, O_WRONLY, &settings); stdout = serial_port; // le port série est la sortie standard vLedInit(); // la LED1 est basculée à mesure vAdcInit(); // Init de l'ADC vAdcSetRef (eAdcVcc); // Tension de référence AVcc (5V pour Arduino UNO) /* * Le capteur est branché sur la voie 0 (ADC0) * Moyennage sur 32 mesures */ vAdcSensorInit (&xSensor, &xSetting, ADC_SENSOR_LINEAR, 0, 32); printf ("ADC0,Humidite\n"); for (;;) { /* * Lecture de la valeur brute en sortie de l'ADC : * Si on n'a pas besoin de usAdc, on peut utiliser dAdcSensorGetValue() * à la place de usAdcSensorGetRaw() et dAdcSensorRawToValue() */ usAdc = usAdcSensorGetRaw (&xSensor); // Conversion de la valeur brute en grandeur mesurée. dValue = dAdcSensorRawToValue (&xSensor, usAdc); // Affichage des valeurs printf ("%u,%.02f\n", usAdc, dValue); vLedToggle (LED_LED1); // Bascule LED1 après chaque mesure delay_ms (500); } return 0; }
/* main ===================================================================== */ int main (void) { uint16_t usAdc; // pour valeur ADC double dValue; // pour la valeur de la pression xAdcSensor xSensor; /* * Repère d'étalonnage utilisé pour le test * * Le capteur est un modèle MPX4115AP de Freescale, sa tension de sortie est: * Vout = Vcc*(.009*P-.095) avec P pression en kPa * il s'agit bien d'un capteur linéaire. * Le capteur mesure entre 150 hPa (15 kPa) et 1150 hPa (115 kPa). * Pour Vcc=Vref=5V, le quantum de l'ADC vaut LSB=5/1024=4.88mV, ce qui donne: * Vout(15) = 200mV = 41 LSB * Vout(115) = 4700mV = 963 LSB * Ce qui donne le repère xSetting = (150, 1150, 41, 963) */ xAdcSensorSetting xSetting = ADC_SENSOR_SETTING_LINEAR(150, 1150, 41, 963); // Configuration du port série par défaut (8N1, sans RTS/CTS) xSerialIos settings = SERIAL_SETTINGS (BAUDRATE); // Ouverture du port série en sortie FILE * serial_port = xFileOpen (PORT, O_WRONLY, &settings); stdout = serial_port; // le port série est la sortie standard vLedInit(); // la LED1 est basculée à mesure vAdcInit(); // Init de l'ADC vAdcSetRef (eAdcVcc); // Tension de référence AVcc (5V pour Arduino UNO) /* * Capteur branché sur la voie 0 (ADC0) * Moyennage sur 32 mesures */ vAdcSensorInit (&xSensor, &xSetting, ADC_SENSOR_LINEAR, 0, 32); printf ("ADC0,Pression\n"); for (;;) { /* * Lecture de la valeur brute en sortie de l'ADC : * Si on n'a pas besoin de usAdc, on peut utiliser dAdcSensorGetValue() * à la place de usAdcSensorGetRaw() et dAdcSensorRawToValue() */ usAdc = usAdcSensorGetRaw (&xSensor); // Conversion de la valeur brute en grandeur mesurée. dValue = dAdcSensorRawToValue (&xSensor, usAdc); // Affichage des valeurs printf ("%u,%.02f\n", usAdc, dValue); vLedToggle (LED_LED1); // Bascule LED1 après chaque mesure delay_ms (500); } return 0; }
void vStartAntBOT(void){ PowerOn(); DDRB = 0xFF; PORTB = 0xFF; ///* initialize display, cursor off */ lcd_init(LCD_DISP_ON); ///* clear display and home cursor */ lcd_clrscr(); lcd_puts("Ant BOT>\nPower On"); mirf_RX_ADDR_P0 = mirf_Default_ADDR; mirf_ShockB_init(2); // RC_SetUnits(500,7); // test wheels // RC_SetUnits(500, 6); // RC_SetUnits(500, 5); // RC_SetUnits(100, 1); #if(USE_BOT_CTRL == 1) vStartControlTask(mainCONTROL_PRIORITY); #endif #if(USE_BOT_LIGHTS == 1) vStartLightsTask( mainLIGHTS_PRIORITY ); #endif #if(USE_BOT_BUTTON == 1) vStartButtonTask( mainBUTTON_PRIORITY, 10 ); #endif #if(USE_BOT_ARM == 1) vStartArmTask(mainARM_PRIORITY); #endif #if(USE_BOT_WHEEL == 1) vStartWheelTask(mainWHEEL_PRIORITY); #endif #if(USE_BOT_SERVO == 1) RC_StartModule(); #endif #if(USE_BOT_ADC == 1) vAdcInit(5); #endif }
/* main ===================================================================== */ int main (void) { uint16_t usAdc; // pour valeur ADC char sep = ','; // caractère de séparation entre valeurs // Configuration du port série par défaut (8N1, sans RTS/CTS) xSerialIos settings = SERIAL_SETTINGS (BAUDRATE); // Ouverture du port série en sortie FILE * serial_port = xFileOpen (PORT, O_WRONLY, &settings); stdout = serial_port; // le port série est la sortie standard vLedInit(); // la LED1 est basculée à série de mesures vAdcInit(); // Init de l'ADC vAdcSetRef (eAdcInternal); // Tension de référence interne (1.1V pour Arduino UNO) // Affiche la ligne d'entête: ADC0,ADC1,... for (int i = 0; i < ADC_CHAN_QUANTITY; i++) { if (i == (ADC_CHAN_QUANTITY - 1)) { // saut de ligne après dernière étiquette sep = '\n'; } printf ("ADC%u%c", i, sep); } for (;;) { sep = ','; // Affiche les valeurs ADC for (int i = 0; i < ADC_CHAN_QUANTITY; i++) { usAdc = usAdcReadAverage (i, 8); // lecture avec moyennage sur 8 valeurs if (i == (ADC_CHAN_QUANTITY - 1)) { // saut de ligne après dernière valeur sep = '\n'; } printf ("%u%c", usAdc, sep); } vLedToggle (LED_LED1); // Bascule LED1 après chaque série de mesure delay_ms (1000); } return 0; }
/* internal public functions ================================================ */ void vBatInit (void) { vBatChargeInit(); vAdcInit(); if (xTaskProcess == 0) { xTaskProcess = xTaskCreate ( xTaskConvertMs (MINUTES(BAT_PROCESS_INTERVAL_MIN)), prvvTaskProcess); } if (xTaskMonitor == 0) { xTaskMonitor = xTaskCreate (xTaskConvertMs (BAT_MONITOR_INTERVAL_MS), prvvTaskMonitor); } prvvSetToIdle(); vTaskStart (xTaskMonitor); }