Пример #1
0
/* 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;
}
Пример #2
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;
}
Пример #3
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


}
Пример #4
0
/* 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;
}
Пример #5
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);
}