- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在获取电压读数并将其转换为压力读数。这是我第一次真正使用 C 语言,所以我的代码很困惑,但到目前为止运行良好。我面临的问题是让程序计算介于最小和最大期望值之间的读数数量(存储在数组 data[i] 中)。
这是代码,Sum2 和 count 是给我带来麻烦的地方。 Sum2 添加 999 个值而不是过滤,并且 count 始终结果为 998,而它应该接近 500
编辑:
数据[i]中的读数是电压,我正在使用压力。我的校准曲线是 P=(V-2.9674)/.404
//Voltage readings for NI USB-6009 built from the ground up
#include "stdafx.h"
#include "stdio.h"
#include "NIDAQmx.h"
#include "math.h"
#include "tdmwriter.h"
#include "fundtypes.h"
#include "platdefines.h"
#define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
int main(void)
{
int32 error = 0;
TaskHandle taskHandle = 0;
int32 read;
float64 data[1000], Sum=0, Average, Variance, Deviation=0, std_dev, min=0, max=0, num=0, avg=0, minP=0, maxP=0, avgP=0, avgP2=0, minP2=0, maxP2=0, minV=0, maxV=0, avgV=0, Sum2 = 0;
char errBuff[2048] = { '\0' };
int i, count = 0;
/*********************************************/
// DAQmx Configure Code
/*********************************************/
DAQmxErrChk(DAQmxCreateTask("Pressure Voltage\n", &taskHandle));
DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle, "Dev1/ai0", "", DAQmx_Val_Cfg_Default, -10.0, 10.0, DAQmx_Val_Volts, NULL));
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandle, "", 100.0, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, 1000));
/*********************************************/
// DAQmx TDMS Configure Code
/*********************************************/
DAQmxErrChk(DAQmxConfigureLogging(taskHandle, "C:\\TestData\\LogFile.tdms", DAQmx_Val_LogAndRead, "ECS Test Data", DAQmx_Val_OpenOrCreate));
//DAQmxWriteAnalogF64(taskHandle,1000, 1 /*autoStart*/, -1 /*timeout*/, DAQmx_Val_GroupByScanNumber, data, 1000, NULL);
/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk(DAQmxStartTask(taskHandle));
printf("Voltage due to Pressure:\n");
printf("\n");
printf("Recording Data...\n");
DAQmxErrChk(DAQmxWaitUntilTaskDone(taskHandle, 10.0));
/*********************************************/
// DAQmx Read Code
/*********************************************/
DAQmxErrChk(DAQmxReadAnalogF64(taskHandle, 1000, 10.0, DAQmx_Val_GroupByChannel, data, 1000, &read, NULL));
printf("Acquired %d points\n", (int)read);
/*********************************************/
//Display Values
/*********************************************/
printf("\n");
printf("values:\n");
printf("Voltage 1= %f\n",data[10]);
printf("Voltage 2= %f\n", data[100]);
printf("Voltage 3= %f\n", data[200]);
printf("Voltage 4= %f\n", data[300]);
printf("Voltage 5= %f\n", data[400]);
printf("Voltage 6= %f\n", data[500]);
printf("Voltage 7= %f\n", data[600]);
printf("Voltage 8= %f\n", data[700]);
printf("Voltage 9= %f\n", data[800]);
printf("Voltage 10= %f\n", data[900]);
printf("\n");
//for (int i = 1; i < 1000; i++) {
// printf("Voltage %i= %f\n",i, data[i]);
//}
//printf("\n");
/*********************************************/
//Average Values
/*********************************************/
for (i = 1; i < 999; ++i) {
Sum = Sum + data[i];
}
Average = (Sum / 999);
printf("Average= %f\n", Average);
/*********************************************/
//Standard Deviation
/*********************************************/
for (i = 1; i < 999; ++i) {
Deviation = Deviation + pow((Average - data[i]), 2);
}
Variance = Deviation / 999;
printf("Variance= %f\n", Variance);
std_dev = sqrt(Variance);
printf("Standard Deviation= %f\n", std_dev);
printf("\n");
/*********************************************/
//Min and Max Values
/*********************************************/
{
max = fmax(data[2], data[999]);
}
{
min = fmin(data[2], data[999]);
}
printf("Min: %f\n", min);
printf("Max: %f\n", max);
printf("Log File located in C:\\TestData. Please rename LogFile.tdms after testing\n");
printf("\n");
/*********************************************/
//Convert to Pressure Readings
/*********************************************/
printf("Pressure Readings (inches H2O):\n");
{
minP = (min - 2.9674) / .404;
maxP = (max - 2.9674) / .404;
avgP = (Average - 2.9674) / .404;
}
printf("Min Pressure: %f\n", minP);
printf("Max Pressure: %f\n", maxP);
printf("Average Pressure: %f\n", avgP);
printf("\n");
/*********************************************/
//New Voltage and Pressure Averages
/*********************************************/
{//target min and max pressure
minP2 = avgP - (avgP / 10);
maxP2 = avgP + (avgP / 10);
}
{//target min and max voltage
minV = (minP2*.404) + 2.9674;
maxV = (maxP2*.404) + 2.9674;
}
{//Sum of values in desired range
for (i = 1; i < 999; ++i) {
if (minV < data[i] && data[i] < maxV); { Sum2 = Sum2 + data[i]; }
}
}
{//Number of values in desired range
for (i = 1; i < 999; i++)
{
if (minV < data[i] && data[i] < maxV);
{
count++;
}
}
}
{//New average voltage
avgV = Sum2 / count;
}
{//New average pressure
avgP2 = ((avgV - 2.9674) / .404);
}
printf("Adjusted Values:\n");
printf("Min P2= %f\n", minP2);
printf("Max P2= %f\n", maxP2);
printf("Min Voltage= %f\n", minV);
printf("Max Voltage= %f\n", maxV);
printf("Sum Voltage= %f\n", Sum2);
printf("Count= %d\n", count);
printf("AvgV= %f\n", avgV);
printf("AvgP= %f\n", avgP2);
Error:
if (DAQmxFailed(error))
DAQmxGetExtendedErrorInfo(errBuff, 2048);
if (taskHandle != 0)
{
/*********************************************/
// DAQmx Stop Code
/*********************************************/
DAQmxStopTask(taskHandle);
DAQmxClearTask(taskHandle);
}
if (DAQmxFailed(error))
printf("DAQmx Error: %s\n", errBuff);
printf("End of program, press Enter key to quit...\n");
getchar();
return 0;
}
最佳答案
C 是基于零的索引,因此您每次都会跳过第一个值,这可能会也可能不会给出错误的值。额外的括号导致您无法正确设置条件。我标记了不好的;带有评论,以便您可以看到它。
sum2 = 0; // not needed since initialized above
count = 0; // not needed since initialized above
for (i = 0; i < 999; ++i)
{
if ((minV < data[i]) && (data[i] < maxV)) // ; messed up and forced code to execute
// Extra parens are just for readability
{
//Sum of values in desired range
Sum2 += data[i];
//Number of values in desired range
count++;
}
}
关于c - 访问外部生成的数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36752539/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!