質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

解決済

variable or field '' declared void

gajumaru
gajumaru

総合スコア13

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

2回答

0評価

0クリップ

554閲覧

投稿2019/10/09 13:13

arduinoで開発をしているのですが、

error

ballSensor:53:17: error: variable or field 'sendVector' declared void void sendVector(vectorRT_t vectorRTa, vectorXY_t vectorXYa){ ^ ballSensor:53:17: error: 'vectorRT_t' was not declared in this scope ballSensor:53:39: error: 'vectorXY_t' was not declared in this scope void sendVector(vectorRT_t vectorRTa, vectorXY_t vectorXYa){ ^ ballSensor:74:39: error: 'ballCtrl' was not declared in this scope void printPulseWidth(float pulseWidth[ballCtrl.numberOfBallSensors]){ ^ exit status 1 variable or field 'sendVector' declared void

とエラーが出てしまいます。
どなたか解決法を教えていただけるとありがたいです。

code

arduino

//in ballSensor.ino #include "BallSensorCtrl.hpp" constexpr unsigned long baud = 115200; BallSensorCtrl ballCtrl; void setup(){ Serial.begin(baud); } float pulseWidth[ballCtrl.numberOfBallSensors] = {}; int i = 0; unsigned long long previoustTime = millis(); //vectorRT_t previousVectorRT = {}; //vectorXY_t previousVectorXY = {}; void loop(){ float currentPulseWidth[ballCtrl.numberOfBallSensors] = {}; ballCtrl.getPulseWidth(currentPulseWidth); static float rate = 0.05; for(int i = 0;i<12;i++){ pulseWidth[i] = currentPulseWidth[i] * rate + pulseWidth[i] * (1 - rate); } vectorXY_t vectorXY = ballCtrl.CaluculateVectorXY(pulseWidth); vectorRT_t vectorRT = ballCtrl.CaluculateVectorRT(pulseWidth); //10msごと if(millis() - previoustTime > 10){ //sendVectorRTIntBySerial(vectorRTInt); Serial.print("radius : "); Serial.print(vectorRT.radius); Serial.print(" theta : "); Serial.print(vectorRT.theta); //printVectorRTIntBySerial(vectorRTInt, deltaVectorXYInt); //printPulseWidth(pulseWidth); previoustTime = millis(); //previousVectorRT = vectorRT; //previousVectorXY = vectorXY; } //受け取った時 if (Serial.available()){ char header = Serial.read(); if(header == 'b'){ //int a = sendVector(vectorXY,vectorRT); //printVectorRTIntBySerial(vectorRTInt, deltaVectorXYInt); //printPulseWidth(pulseWidth); //previousVectorRT = vectorRT; //previousVectorXY = vectorXY; } } //printPulseWidth(pulseWidth); } void sendVector(vectorRT_t vectorRTa, vectorXY_t vectorXYa){ float x = vectorXYa.x; float y = vectorXYa.y; float radius = vectorRTa.radius; float theta = vectorRTa.theta; /*Serial.write('B'); Serial.write(lowByte(radius)); Serial.write(highByte(radius)); Serial.write(lowByte(theta)); Serial.write(highByte(theta)); Serial.write(lowByte(x)); Serial.write(highByte(x)); Serial.write(lowByte(y)); Serial.write(highByte(y));*/ //return; } void printPulseWidth(float pulseWidth[ballCtrl.numberOfBallSensors]){ Serial.print(" 0 : "); Serial.print(pulseWidth[0]); Serial.print(" 1 : "); Serial.print(pulseWidth[1]); Serial.print(" 2 : "); Serial.print(pulseWidth[2]); Serial.print(" 3 : "); Serial.print(pulseWidth[3]); Serial.print(" 4 : "); Serial.print(pulseWidth[4]); Serial.print(" 5 : "); Serial.print(pulseWidth[5]); Serial.print(" 6 : "); Serial.print(pulseWidth[6]); Serial.print(" 7 : "); Serial.print(pulseWidth[7]); Serial.print(" 8 : "); Serial.print(pulseWidth[8]); Serial.print(" 9 : "); Serial.print(pulseWidth[9]); Serial.print(" 10 : "); Serial.print(pulseWidth[10]); Serial.print(" 11 : "); Serial.print(pulseWidth[11]); Serial.println(); }
//in BallSensorCtrl.cpp #include <digitalWriteFast.h> #include "BallSensorCtrl.hpp" void BallSensorCtrl::setupSensors(){ pinMode(BallSensorPins[0],INPUT); pinMode(BallSensorPins[1],INPUT); pinMode(BallSensorPins[2],INPUT); pinMode(BallSensorPins[3],INPUT); pinMode(BallSensorPins[4],INPUT); pinMode(BallSensorPins[5],INPUT); pinMode(BallSensorPins[6],INPUT); pinMode(BallSensorPins[7],INPUT); pinMode(BallSensorPins[8],INPUT); pinMode(BallSensorPins[9],INPUT); pinMode(BallSensorPins[10],INPUT); pinMode(BallSensorPins[11],INPUT); } void BallSensorCtrl::getPulseWidth(float pulseWidth[numberOfBallSensors]){ uint16_t timeLimit = IRBallWaveformModeA; unsigned long startTime_us = micros(); do{ //全センサを同時読み for (int i = 0; i < numberOfBallSensors/2; i++){ if (digitalReadFast(BallSensorPins[i]) == false) { pulseWidth[i] += deltaPulseWidth; } } } while ((micros() - startTime_us) < timeLimit); startTime_us = micros(); do{ //全センサを同時読み for (int i = numberOfBallSensors/2; i < numberOfBallSensors; i++){ if (digitalReadFast(BallSensorPins[i]) == false) { pulseWidth[i] += deltaPulseWidth; } } } while ((micros() - startTime_us) < timeLimit); return; } vectorXY_t BallSensorCtrl::CaluculateVectorXY(float pulseWidth[numberOfBallSensors]){ vectorXY_t result; result.x = 0; result.y = 0; for(int i = 0;i<numberOfBallSensors;i++){ result.x += pulseWidth[i] * UnitVectorX[i]; result.y += pulseWidth[i] * UnitVectorY[i]; } /*if(result.x != 0 || result.y != 0){ float squared = result.x * result.x + result.y * result.y; float root = sqrt(squared); result.x /= root; result.y /= root; }*/ return result; } vectorRT_t BallSensorCtrl::CaluculateVectorRT(float pulseWidth[numberOfBallSensors]){ vectorRT_t returnValue; vectorXY_t result; result.x = 0; result.y = 0; float pulseWidthSum = 0; for(int i = 0;i<numberOfBallSensors;i++){ result.x += pulseWidth[i] * UnitVectorX[i]; result.y += pulseWidth[i] * UnitVectorY[i]; pulseWidthSum += pulseWidth[i]; } float sqrtRadius = sqrt(pulseWidthSum); float cube = pulseWidthSum * sqrtRadius; float rate; if (cube > 0.0001) rate = 1 / cube * 500; else rate = 0; result.x *= rate; result.y *= rate; returnValue.theta = atan2(result.x,result.y); returnValue.radius = result.x * result.x + result.y * result.y; returnValue.radius /= 100; return returnValue; }
//in BallSensorCtrl.hpp #ifndef BallCtrl_h #define BallCtrl_h typedef struct{ float radius; float theta; } vectorRT_t; typedef struct{ float x; float y; } vectorXY_t; class BallSensorCtrl{ public: static constexpr int numberOfBallSensors = 12; void setupSensors(); void getPulseWidth(float pulseWidth[numberOfBallSensors]); vectorXY_t CaluculateVectorXY(float pulseWidth[numberOfBallSensors]); vectorRT_t CaluculateVectorRT(float pulseWidth[numberOfBallSensors]); //センサーのピン番号 今 //uint8_t BallSensorPins[numberOfBallSensors] = {9, 8, 7, 6, 5, 4, 3, 2, A2, A1, A0, 10}; //昔 uint8_t BallSensorPins[numberOfBallSensors] = {A2, A1, 9, A0, 8, 5, 4, 3, 2, A5, A4, A3}; private: static constexpr uint16_t IRBallWaveformModeA = 833; static constexpr float deltaPulseWidth = 1.0; float UnitVectorX[numberOfBallSensors] = {0.000, 0.500, 0.866, 1.000, 0.866, 0.500, 0.000, -0.500, -0.866, -1.000, -0.866, -0.500}; float UnitVectorY[numberOfBallSensors] = {1.000, 0.866, 0.500, 0.000, -0.500, -0.866, -1.000, -0.866, -0.500, 0.000, 0.500, 0.866}; }; #endif

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。