以下のコードを実行しようとしたところコンパイルエラーが起きてしまいます。
arduino
1/* 2 * Sigfox Accelerometerサンプル 3 * UnaShieldの加速度センサが一定の動作を検知したらメッセージをSigfoxで送信します 4 * ライブラリマネージャ(スケッチ_ライブラリのインクルード_ライブラリを管理)で 5 * Adafruit Unified Sensor と Adafruit MMA8451 Library 6 * をインストールしておく必要があります。 7 * Copyright (c) 2018 Kyocera Communication Systems, Co,. Ltd. 8 * Callback - Custom Payload Config : acc::float:32 orientation::char:3 9 */ 10#include "SIGFOX.h" 11#include <Wire.h> 12#include <Adafruit_Sensor.h> 13#include <Adafruit_MMA8451.h> 14//必要に応じ書き換えてください 15//************************************ 16static const bool isDebug = true; 17static const float ACC_THRESHOLD = 1; //移動判定閾値 18//************************************ 19Adafruit_MMA8451 mma = Adafruit_MMA8451(); 20// IMPORTANT: Check these settings with UnaBiz to use the SIGFOX library correctly. 21static const String device = "NOTUSED"; // Set this to your device name if you're using UnaBiz Emulator. 22static const bool useEmulator = false; // Set to true if using UnaBiz Emulator. 23static const bool echo = true; // Set to true if the SIGFOX library should display the executed commands. 24static const Country country = COUNTRY_JP; // Set this to your country to configure the SIGFOX transmission frequencies. 25static UnaShieldV2S transceiver(country, useEmulator, device, echo); // Uncomment this for UnaBiz UnaShield V2S Dev Kit 26static String response; // Will store the downlink response from SIGFOX. 27// IMPORTANT: Check these settings with UnaBiz to use the SIGFOX library correctly. 28void setup() 29{ 30 Serial.begin(9600); // Arduinoハードウェアシリアルを起動(Arduino <-> PC) 31 Serial.println("==========================="); 32 Serial.println("Sigfox UnaShield Accelerometer Sample"); 33 Serial.println("Send a message when the UnaShield is moved."); 34 Serial.println("==========================="); 35 //Sigfoxモジュールを起動 36 if (!transceiver.begin()) stop(F("Unable to init SIGFOX module, may be missing")); // Will never return. 37 //加速度センサ(Adafruit MMA8451)を起動 38 if (! mma.begin(0x1c)) { //// // NOTE: Must use 0x1c for UnaShield V2S 39 Serial.println("Couldnt start"); 40 while (1); 41 } 42 Serial.println("MMA8451 found!"); 43 mma.setRange(MMA8451_RANGE_2_G); 44 Serial.print("Range = "); Serial.print(2 << mma.getRange()); 45 Serial.println("G"); 46} 47void loop() 48{ 49 //加速度センサのRawデータ(14-bit)を取得する 50 mma.read(); 51 if (isDebug) displayMM8451RawData(); 52 //加速度センサイベントを取得する 53 sensors_event_t event; 54 mma.getEvent(&event); 55 if (isDebug) displayMM8451AccData(event); 56 //加速度センサから方向を取得する 57 uint8_t o = mma.getOrientation(); 58 if (isDebug) displayMM8451Orientation(o); 59 //加速度を計算 60 float acc = calcAcc(event.acceleration.x, event.acceleration.y, event.acceleration.z); 61 //所定の加速度以上であれば、Sigfoxメッセージ送信 62 if (abs(acc - 9.8) >= ACC_THRESHOLD) 63 { 64 sendSigfoxMessage(acc, o); 65 delay(2000); 66 } 67 delay(500); 68} 69//ボタン押下をSigfoxメッセージで送信する 70void sendSigfoxMessage(float acc, uint8_t orientation) 71{ 72 Serial.println("\n*****SEND SIGFOX MESSAGE*****"); 73 String sAcc = convertFloatToHex(acc); 74 String sOrientation = convertOrientationToHex(orientation); 75 Serial.print("ACC: "); Serial.print(acc); Serial.print(" -> 0x"); Serial.println(sAcc); 76 Serial.print("Orientation: "); Serial.print(orientation); Serial.print(" -> 0x"); Serial.println(sOrientation); 77 Serial.print("Payload: "); Serial.println(sAcc + sOrientation); 78 transceiver.sendMessage(sAcc + sOrientation); 79 Serial.println("*****************************"); 80} 81//XYZ値から加速度を計算 82float calcAcc(float x, float y, float z) 83{ 84 float acc = sqrt(x * x + y * y + z * z); 85 Serial.print("ACC: "); Serial.print(acc); 86 Serial.print("\tX: "); Serial.print(x); 87 Serial.print("\tY: "); Serial.print(y); 88 Serial.print("\tZ: "); Serial.println(z); 89 return acc; 90} 91//加速度センサのRawデータ(14-bit)を表示する 92void displayMM8451RawData() 93{ 94 Serial.print("X:\t"); Serial.print(mma.x); 95 Serial.print("\tY:\t"); Serial.print(mma.y); 96 Serial.print("\tZ:\t"); Serial.print(mma.z); 97 Serial.println(); 98} 99//加速度センサのXYZ値を表示する 100void displayMM8451AccData(sensors_event_t event) 101{ 102 /* Display the results (acceleration is measured in m/s^2) */ 103 Serial.print("X: \t"); Serial.print(event.acceleration.x); Serial.print("\t"); 104 Serial.print("Y: \t"); Serial.print(event.acceleration.y); Serial.print("\t"); 105 Serial.print("Z: \t"); Serial.print(event.acceleration.z); Serial.print("\t"); 106 Serial.println("m/s^2 "); 107} 108//加速度センサの方向を表示する 109void displayMM8451Orientation(uint8_t o) 110{ 111 switch (o) { 112 case MMA8451_PL_PUF: 113 Serial.println("Portrait Up Front"); 114 break; 115 case MMA8451_PL_PUB: 116 Serial.println("Portrait Up Back"); 117 break; 118 case MMA8451_PL_PDF: 119 Serial.println("Portrait Down Front"); 120 break; 121 case MMA8451_PL_PDB: 122 Serial.println("Portrait Down Back"); 123 break; 124 case MMA8451_PL_LRF: 125 Serial.println("Landscape Right Front"); 126 break; 127 case MMA8451_PL_LRB: 128 Serial.println("Landscape Right Back"); 129 break; 130 case MMA8451_PL_LLF: 131 Serial.println("Landscape Left Front"); 132 break; 133 case MMA8451_PL_LLB: 134 Serial.println("Landscape Left Back"); 135 break; 136 } 137 Serial.println(); 138} 139String convertOrientationToHex(uint8_t o) 140{ 141 String sOrientation = ""; 142 switch (o) { 143 case MMA8451_PL_PUF: 144 sOrientation = "505546"; 145 break; 146 case MMA8451_PL_PUB: 147 sOrientation = "505542"; 148 break; 149 case MMA8451_PL_PDF: 150 sOrientation = "504446"; 151 break; 152 case MMA8451_PL_PDB: 153 sOrientation = "504442"; 154 break; 155 case MMA8451_PL_LRF: 156 sOrientation = "4C5246"; 157 break; 158 case MMA8451_PL_LRB: 159 sOrientation = "4C5242"; 160 break; 161 case MMA8451_PL_LLF: 162 sOrientation = "4C4C46"; 163 break; 164 case MMA8451_PL_LLB: 165 sOrientation = "4C4C42"; 166 break; 167 } 168 return sOrientation; 169} 170//Float型変数をIEEE754に準拠した16進文字列へ変換する 171String convertFloatToHex(float val) 172{ 173 union { 174 uint32_t B32; 175 float Float; 176 } floatb32; 177 floatb32.Float = val; 178 return String(floatb32.B32, HEX); 179} 180
エラー内容は以下の通りです、主にスコープが有効範囲外といっているようにみえます。
error
1NewTes:100:27: error: variable or field 'displayMM8451AccData' declared void 2 3NewTes:100:27: error: 'sensors_event_t' was not declared in this scope 4 5c:\Users\UserName\Desktop\開発\VScode\TESTproject\TEST\NewTes.ino: In function 'void loop()': 6 7NewTes:55:16: error: 'displayMM8451AccData' was not declared in this scope 8 9c:\Users\UserName\Desktop\開発\VScode\TESTproject\TEST\NewTes.ino:55:16: note: suggested alternative: 'displayMM8451RawData'
以下はcpp propertiesの内容です。
{ "configurations": [ { "name": "Win32", "includePath": [ "C:\Users\UserName\Documents\Arduino\libraries\Adafruit_Unified_Sensor", "C:\Users\UserName\Documents\Arduino\libraries\Adafruit_MMA8451_Library", "C:\Program Files (x86)\Arduino\tools\**", "C:\Program Files (x86)\Arduino\hardware\arduino\avr\**", "C:\Program Files (x86)\Arduino\hardware\tools\**", "C:\Users\UserName\Documents\Arduino\libraries\sigfox-shield-arduino-master" ], "forcedInclude": [ "C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h" ], "intelliSenseMode": "msvc-x64" } ], "version": 4 }
エラーの解決方法をおしえてください。
よろしくお願いいたします。
Arduino IDEでコンパイルするとどうなりますか?
回答3件
あなたの回答
tips
プレビュー