Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:对的调用不匹配 嗨,我正在尽我最大的努力去做C++和OOP的工作。我已经编写了一些代码,当我把它们全部放在主循环中时,它们就可以工作了。我现在正试图整理它,并创建自己的简单库和类_C++_Arduino - Fatal编程技术网

错误:对的调用不匹配 嗨,我正在尽我最大的努力去做C++和OOP的工作。我已经编写了一些代码,当我把它们全部放在主循环中时,它们就可以工作了。我现在正试图整理它,并创建自己的简单库和类

错误:对的调用不匹配 嗨,我正在尽我最大的努力去做C++和OOP的工作。我已经编写了一些代码,当我把它们全部放在主循环中时,它们就可以工作了。我现在正试图整理它,并创建自己的简单库和类,c++,arduino,C++,Arduino,我的项目有一个连接到Arduino板上的8个LED传感器阵列。我正在尝试读取光传感器的状态。我正在使用QTRSensors库,它有一个calibrate方法,当我实例化我的类时,我想从我的类中调用该方法 目前我有以下代码 标题 #ifndef SEDIMENTLOGGER_H #define SEDIMENTLOGGER_H #include <QTRSensors.h> #include <Arduino.h> #define NUM_SENSORS 8 cl

我的项目有一个连接到Arduino板上的8个LED传感器阵列。我正在尝试读取光传感器的状态。我正在使用QTRSensors库,它有一个calibrate方法,当我实例化我的类时,我想从我的类中调用该方法

目前我有以下代码

标题

#ifndef SEDIMENTLOGGER_H
#define SEDIMENTLOGGER_H

#include <QTRSensors.h>
#include <Arduino.h>


#define NUM_SENSORS 8


class sedimentSensor
{
 public:
  QTRSensorsRC sensor1;//(unsigned char [8], int&, int&, int&);
  QTRSensorsRC sensor2;//(unsigned char [8], int&, int&, int&);

  sedimentSensor(); //default constructor
  ~sedimentSensor();
  void  calibrateSensors();
  unsigned int *SensorValues1(){return sensorValues1;};
  unsigned int *SensorValues2(){return sensorValues2;};
  int SampleDelay(){return sampleDelay;};
  int EmitterPin1();
  unsigned int Position1(){return position1;};
  void Position1(unsigned int value){position1 = value;};
  unsigned int Position2(){return position2;};
  void Position2(unsigned int value){position2 = value;};

 private:
  // Map pins to LED numbers
  // first LED array
  int led1;
  int led2;
  int led3;
  int led4;
  int led5;
  int led6;
  int led7;
  int led8;
  int emitterPin1;
  //second Array
  int led9;
  int led10;
  int led11;
  int led12;
  int led13;
  int led14;
  int led15;
  int led16;
  int emitterPin2;

  int  timeout; // waits for 2.5 seconds for sensor outputs to go low
  long sampleDelay; // 1 second
  int numSensors;

  unsigned int sensorValues1[];
  unsigned int sensorValues2[];

  unsigned int position1;
  unsigned int position2;
};
#endif
#如果不使用沉淀物记录器#
#定义沉积学
#包括
#包括
#定义NUM_传感器8
类沉淀物传感器
{
公众:
QTRSensorsRC sensor1;//(无符号字符[8],int&,int&,int&);
QTRSensorsRC sensor2;//(无符号字符[8],int&,int&,int&);
沉淀物传感器();//默认构造函数
~沉淀物传感器();
无效校准传感器();
无符号int*SensorValues1(){返回SensorValues1;};
无符号int*SensorValues2(){return SensorValues2;};
int SampleDelay(){return SampleDelay;};
int EmitterPin1();
无符号int Position1(){return Position1;};
void Position1(无符号int值){Position1=value;};
无符号int Position2(){return Position2;};
void Position2(无符号int值){Position2=value;};
私人:
//将管脚映射到LED编号
//第一个LED阵列
int led1;
int-led2;
int-led3;
int led4;
int led5;
int led6;
int led7;
int led8;
int-emitterPin1;
//第二阵列
int led9;
int led10;
int led11;
int led12;
int led13;
int led14;
int led15;
int led16;
int-emitterPin2;
int timeout;//等待2.5秒,传感器输出变低
长采样延迟;//1秒
整数传感器;
无符号整数传感器值1[];
无符号整数传感器值2[];
无符号整数位置1;
无符号整数位置2;
};
#恩迪夫
我对类实现的尝试

#include "sedimentLogger.h"
#include <Arduino.h>
#include <QTRSensors.h>

sedimentSensor::sedimentSensor() 
{
  //Constructor
  led1 = 24;
  led2 = 26;
  led3 = 28;
  led4 = 30;
  led5 = 32;
  led6 = 34;
  led7 = 36;
  led8 = 38;
  emitterPin1 = 22;
  //second Array
  led9 = 25;
  led10 = 27;
  led11 = 29;
  led12 = 31;
  led13 = 33;
  led14 = 35;
  led15 = 37;
  led16 = 39;
  emitterPin2 = 23;

  timeout = 2500; // waits for 2.5 seconds for sensor outputs to go low
  sampleDelay = 1000; // 1 second

  sensorValues1[NUM_SENSORS];  
  sensorValues2[NUM_SENSORS];
};

sedimentSensor::~sedimentSensor()
{ 
};

int sedimentSensor::EmitterPin1()
{return emitterPin1;};

void sedimentSensor::calibrateSensors()
{
  sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);
  sensor2((unsigned char[]) {led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2);


  unsigned int _delay = 500;
  delay(_delay);
  pinMode(13,OUTPUT);
  for(int i = 0; i<400; i++)
    {
      sensor1.calibrate();
      sensor2.calibrate();
    }
  digitalWrite(13,LOW);

  //TODO WRITE MAX AND MIN VALS TO FILE
  Serial.print("Array 1 Min :: ");
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print (sensor1.calibratedMinimumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.print("Array 2 Min :: ");
  for (int i = 0;i< NUM_SENSORS; i++)
  {
    Serial.print (sensor2.calibratedMinimumOn[i]);
    Serial.print(' ');
  }

  Serial.println();
  Serial.print("array 1 Max :: ");
  // print the calibration maximum values measured when emitters were on
  for (int i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(sensor1.calibratedMaximumOn[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.print("array 2 Max :: ");
  // print the calibration maximum values measured when emitters were on
  for (int 
  i = 0; i < NUM_SENSORS; i++)
  {
    Serial.print(sensor2.calibratedMaximumOn[i]);
    Serial.print(' ');
  }

  Serial.println();
  Serial.println();
  delay(_delay); 
};
#包括“sedimentLogger.h”
#包括
#包括
沉淀物传感器::沉淀物传感器()
{
//建造师
led1=24;
led2=26;
led3=28;
led4=30;
led5=32;
led6=34;
led7=36;
led8=38;
发射器pin1=22;
//第二阵列
led9=25;
led10=27;
led11=29;
led12=31;
led13=33;
led14=35;
led15=37;
led16=39;
发射极pin2=23;
超时=2500;//等待2.5秒,传感器输出变低
sampleDelay=1000;//1秒
传感器值1[传感器数量];
传感器值2[传感器数量];
};
沉淀物传感器::~沉淀物传感器()
{ 
};
int沉淀物传感器::EmitterPin1()
{返回发射器pin1;};
孔隙沉淀物传感器::校准传感器()
{
传感器1((无符号字符[]){led1、led2、led3、led4、led5、led6、led7、led8},numSensors,超时,emitterPin1);
传感器2((无符号字符[]){led9、led10、led11、led12、led13、led14、led15、led16},numSensors,超时,emitterPin2);
无符号整数延迟=500;
延迟;
pinMode(13,输出);

对于(int i=0;i,您似乎试图调用
sensor1
sensor2
的构造函数,但在代码中,它们已经被构造。请尝试使用它们的
init
函数:

sensor1.init(
    (unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},
    numSensors,
    timeout,
    emitterPin1);

sensor2.init(
    (unsigned char[]){led9,led10,led11,led12,led13,led14,led15,led16},
    numSensors,
    timeout,
    emitterPin2);

似乎您正在尝试调用
sensor1
sensor2
的构造函数,但此时在代码中它们已经被构造。请尝试使用它们的
init
函数:

sensor1.init(
    (unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},
    numSensors,
    timeout,
    emitterPin1);

sensor2.init(
    (unsigned char[]){led9,led10,led11,led12,led13,led14,led15,led16},
    numSensors,
    timeout,
    emitterPin2);

我假设第47行和第48行是以下两行:

sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);
sensor2((unsigned char[]) {led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2);
问题是您试图将对象作为函数调用。对象需要在构造函数中初始化,如下所示:

sedimentSensor::sedimentSensor() 
    : led1(24), led2(26), /* other variables needing initialization */
      sensor1(/*arguments*/), sensor2(/*arguments*/)
{
    /* .... */
}

为了实现上述功能,您需要更改类成员变量声明的顺序,因为成员变量的初始化顺序与声明顺序相同。换句话说,您应该将
sensor1
sensor2
的声明放在用于初始化它们的变量之后。

第47行和第48行是以下两行:

sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);
sensor2((unsigned char[]) {led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2);
问题是您试图将对象作为函数调用。对象需要在构造函数中初始化,如下所示:

sedimentSensor::sedimentSensor() 
    : led1(24), led2(26), /* other variables needing initialization */
      sensor1(/*arguments*/), sensor2(/*arguments*/)
{
    /* .... */
}

为了实现上述功能,您需要更改类成员变量声明的顺序,因为成员变量的初始化顺序与声明顺序相同。换句话说,您应该将
sensor1
sensor2
的声明放在用于初始化它们的变量之后。

哪个是
sedimentLogger.cpp
中的第47行?抱歉,我从编译器中获取的行号实际上与文件中的行不一致。但我非常确定这是CalibleSensors()函数中的前两行。即sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);sensor2((无符号字符[]){led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2)您是否尝试中断
(无符号字符[]){led1,led2,led3,led4,led5,led6,led7,led8}
使用
新的
运算符还有很长的路要走吗?哪一行是
sedimentLogger.cpp
中的第47行?对不起,我从编译器中得到的行号实际上与文件中的行不一致。但我很确定这是calibleSensors()函数的前两行。即sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);sensor2((unsigned char[]){led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2)你有没有尝试突破
(unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8}
使用
新的
操作符还有很长的路要走吗?谢谢,我相信这会奏效,但上面的解决方案要求我更改更少的代码。谢谢,我相信这会奏效,但上面的解决方案要求我更改更少的代码。