當前位置:首頁 » 編程語言 » c語言三軸加速
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言三軸加速

發布時間: 2023-03-17 19:59:49

⑴ 單片機c語言PWM的典型程序謝謝

/ 利用定時器控制產生占空比可變的 PWM 波
// 按K1,PWM值增加,則占空比減小,電機減速。
// 按K2,PWM值減小,則占空比增加,電機加速。
// 當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警。

/*********************************************************/

#include<reg51.h>
#include<intrins.h>

sbit K1 =P1^4 ; //PWM值增加鍵
sbit K2 =P1^5 ; //PWM值減少鍵
sbit BEEP =P3^7 ; //蜂鳴器
unsigned char PWM=0x7f ; //賦初值

void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);

/*********************************************************/
void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延時常數
TL0=0x66 ; //頻率調節

TH1=PWM ; //脈寬調節
TL1=0 ;

EA=1;
ET0=1;
ET1=1;

TR0=1 ;

while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);

do{
if(PWM!=0x02)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}

/*********************************************************/
// 定時器0中斷服務程序 (頻率)
/*********************************************************/
void timer0() interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P0=0x00 ; //啟動輸出
}

/*********************************************************/
// 定時器1中斷服務程序 (脈寬)
/*********************************************************/
void timer1() interrupt 3
{
TR1=0 ;
P0=0xff ; //結束輸出
}

/*********************************************************/
//蜂鳴器子程序
/*********************************************************/

void Beep()
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //關閉蜂鳴器
delayms(100);
}

/*********************************************************/
// 延時子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}

/*********************************************************/
// 延時子程序
/*********************************************************/
void delayms(unsigned char ms)

{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}

/*********************************************************/

⑵ C語言如何把它翻譯成中文

這不叫「翻譯」。你的標題應該改為「請幫我給下面C程序添加註釋,看不懂」。

#include"Wire.h"
#include"I2Cdev.h"
#include"ADXL345.h"
ADXL345accel;//聲明類型為ADXL345的結構體,用於加速度感測器配置
int16_tax,ay,az;
#defineLED_PIN13
boolblinkState=false;//初始不閃爍
voidsetup(){//初始化函數
Wire.begin();//初始化硬體部分
Serial.begin(38400);//初始化串口
Serial.println("InitializingI2Cdevices...");//串口輸出調試信息
accel.initialize();//初始化加速度感測器
Serial.println("Testingdeviceconnections...");//串口輸出調試信息
Serial.println(accel.testConnection()?"ADXL345connectionsuccessful":"ADXL345connectionfailed");//測試加速度感測器連接情況,並通過串口分別輸出調試信息
pinMode(LED_PIN,OUTPUT);//指示燈管腳配置為輸出,准備閃爍
}
voidloop(){
accel.getAcceleration(&ax,&ay,&az);//從加速度感測器讀取三軸值
Serial.print("accel: ");//串口輸出調試信息
Serial.print(ax);Serial.print(" ");//串口輸出x軸加速度值
Serial.print(ay);Serial.print(" ");//串口輸出y軸加速度值
Serial.println(az);//串口輸出z軸加速度值
blinkState=!blinkState;//閃爍狀態邏輯翻轉
digitalWrite(LED_PIN,blinkState);//指示燈輸出翻轉,實現閃爍
}

⑶ c語言gsensor急加速演算法

1、加速度感測器又叫G-sensor,返回x、y、z三軸的加速度數值。
該數值包含地心引力的影響,單位是m/s^2。
將手機平放在桌面上,x軸默認為0,y軸默認0,z軸默認9.81。
將手機朝下放在桌面上,z軸為-9.81。
將手機向左傾斜,x軸為正值。
將手機向右傾斜,x軸為負值。
將手機向上傾斜,y軸為負值。
將手機向下傾斜,y軸為正值。
加速度羨肢衫感測器可能是最為成熟的一種mems產品,市場上的加速度感測器種類很多。
手機中常用的加速度感測器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
這些感測器一般提供±2G至±16G的加速度測量范圍,採用I2C或SPI介面和MCU相連,數據精度小於16bit。


2、常式:

{

privatestaticfinalStringTAG=MainActivity.class.getSimpleName();
;
兄腔privateSensormSensor;
privateTextViewtextviewX;
privateTextViewtextviewY;
privateTextViewtextviewZ;
privateTextViewtextviewF;

privateintmX,mY,mZ;
privatelonglasttimestamp=0;
飢禪CalendarmCalendar;

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textviewX=(TextView)findViewById(R.id.textView1);
textviewY=(TextView)findViewById(R.id.textView3);
textviewZ=(TextView)findViewById(R.id.textView4);
textviewF=(TextView)findViewById(R.id.textView2);

mSensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//TYPE_GRAVITY
if(null==mSensorManager){
Log.d(TAG,"");
}
//參數三,檢測的精準度
mSensorManager.registerListener(this,mSensor,
SensorManager.SENSOR_DELAY_NORMAL);//SENSOR_DELAY_GAME

}

@Override
publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){

}

@Override
publicvoidonSensorChanged(SensorEventevent){
if(event.sensor==null){
return;
}

if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
intx=(int)event.values[0];
inty=(int)event.values[1];
intz=(int)event.values[2];
mCalendar=Calendar.getInstance();
longstamp=mCalendar.getTimeInMillis()/1000l;//1393844912

textviewX.setText(String.valueOf(x));
textviewY.setText(String.valueOf(y));
textviewZ.setText(String.valueOf(z));

intsecond=mCalendar.get(Calendar.SECOND);//53

intpx=Math.abs(mX-x);
intpy=Math.abs(mY-y);
intpz=Math.abs(mZ-z);
Log.d(TAG,"pX:"+px+"pY:"+py+"pZ:"+pz+"stamp:"
+stamp+"second:"+second);
intmaxvalue=getMaxValue(px,py,pz);
if(maxvalue>2&&(stamp-lasttimestamp)>30){
lasttimestamp=stamp;
Log.d(TAG,"sensorisMoveorchanged....");
textviewF.setText("檢測手機在移動..");
}

mX=x;
mY=y;
mZ=z;

}
}

/**
*獲取一個最大值
*
*@parampx
*@parampy
*@parampz
*@return
*/
publicintgetMaxValue(intpx,intpy,intpz){
intmax=0;
if(px>py&&px>pz){
max=px;
}elseif(py>px&&py>pz){
max=py;
}elseif(pz>px&&pz>py){
max=pz;
}

returnmax;
}
}

⑷ 函數需要計算大量的sin與cos, 請問大神如何加速(c語言版)

就是用查表法,事先計算好查找表,比如說我的應用要求精確到1度,就建2個這樣的表。
cosT[360] = {}

sinT[360]= {}
然後要計算的時候直接把你要計算的角度轉換成最接近這個角度的整數,查表即可。

如果要更高的精度,就建更大的查找表

⑸ C語言數列如何加速太慢

#include<stdio.h>
unsignedintFibonacci(intn);
intmain(void){
intn;
while(scanf("%d",&n),n>0){
printf("%u ",Fibonacci(n));
}
return0;
}
unsignedintFibonacci(intn){
if(n<=0)return0;
if(n==1||n==2)return1;
else{
inta[2]={1,1},i=3;
while(i<=n){
a[i%2]=a[i%2]+a[(i-1)%2];
i++;
}
returna[(i-1)%2];
}
}

其實這不需要遞歸,稍微變一下演算法就行了。另外,你的printf里的格式字元串錯了,應該是"%u"而不是"%d"。