hmLib_boolian fulladc_talk(cstring* pStr){
	uint32 sumadc;

	if(_fulladc_Mode.SendData_i){
		cstring_construct_dynamic_safe(pStr, 1);
		if(_fulladc_Mode.SendData)cstring_putc(pStr, 0, 0x10);
		else cstring_putc(pStr, 0, 0x11);

		//送信後自動的にフラグを落とす
		_fulladc_Mode.SendData_i = hmLib_false;
		return hmLib_false;
	} else if(_fulladc_Mode.Data){
		cstring_construct_dynamic_safe(pStr, 1 + 2 * 8);
		cstring_putc(pStr, 0, 0x00);

		//データ取得
		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH0);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 1, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 2, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH1);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 3, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 4, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH2);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 5, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 6, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH3);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 7, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 8, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High
																		
		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH4);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr,  9, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 10, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH5);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 11, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 12, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH6);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 13, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 14, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High

		sumadc = adc_get_average(Vref_GND, HMR_ADC_CH7);//IDをANに変換してそこのデータを読み読み
		cstring_putc(pStr, 15, (hmLib_uint8)(sumadc & 0x00FF));		//Low
		cstring_putc(pStr, 16, (hmLib_uint8)((sumadc >> 8) & 0x00FF));	//High


		//送信後自動的にフラグを落とす
		_fulladc_Mode.Data = hmLib_false;
		return hmLib_false;
	}
Пример #2
0
int get_angle(unsigned char channel)
{
  int center_pos = 0;
  float vec;
  float z;
  float result;
  float factor = 100;

  switch (channel)
  {
    case 0:
      center_pos = CENTER_POSITION_X;
      break;

    case 1:
      center_pos = CENTER_POSITION_Y;
      break;

    case 2:
      center_pos = CENTER_POSITION_Z;
      break;

    default:
      return 0;
  }

  /* Z axis is used as the reference vector when calculating the angle */
  z = (float)((int)adc_get_average(ADC_CHANNEL_Z)-CENTER_OFFSET_Z);
  /* Prepare the wanted first vector */
  vec = (float)((int)adc_get_average(channel) - center_pos);
  /* calculate the angle of the summed vector */
  result = atanf (vec / z) * 180 / PI;

  /* This is just for presentation */
  if (vec < z) {
    factor = -100;
  }

  return (int)(result*factor);
}
Пример #3
0
uint8_t keypadad_get(uint8_t pin) {
	int16_t adc = adc_get_average(pin, kADCReferenceAVCC);

	for (uint8_t i = 0; i < KEYPADAD_KEY_COUNT; i++) {
		const int16_t key_value = i * KEYPADAD_VALUE_PER_KEY;

		if (ABS(key_value - adc) < KEYPADAD_ERROR_RANGE)
			return i;

		if  (key_value > adc)
			// Encountered an ADC value that's not within reasonable margins of error => invalid
			return 0xFE;
	}

	if (adc < ((1 << KEYPADAD_ADC_RESOLUTION) - KEYPADAD_ERROR_RANGE))
		// ADC value lies between key15_value + ERROR_RANGE and keyNone_value - ERROR_RANGE => invalid
		return 0xFE;

	// No key pressed
	return 0xFF;
}
hmLib_boolian thermo_talk(cstring* pStr){
	hmLib_uint16 sumadc;

	if(_thermo_Mode.SendData_i){
		cstring_construct_dynamic_safe(pStr,1);
		if(_thermo_Mode.SendData)cstring_putc(pStr,0,0x10);
		else cstring_putc(pStr,0,0x11);

		//送信後自動的にフラグを落とす
		_thermo_Mode.SendData_i=hmLib_false;
		return hmLib_false;
	}else if(_thermo_Mode.Data){
		cstring_construct_dynamic_safe(pStr,3);
		cstring_putc(pStr,0,0x00);

		//温度データ取得
		sumadc = adc_get_average(Vref_GND,ADC_Thermo);
		cstring_putc(pStr,1,(unsigned char)(sumadc%256));
		cstring_putc(pStr,2,(unsigned char)((sumadc>>8)%256));

		//送信後自動的にフラグを落とす
		_thermo_Mode.Data=hmLib_false;
		return hmLib_false;
	}