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; }
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); }
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; }