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
Arduino 如果声明了“角度未在此范围内声明”,如何修复_Arduino - Fatal编程技术网

Arduino 如果声明了“角度未在此范围内声明”,如何修复

Arduino 如果声明了“角度未在此范围内声明”,如何修复,arduino,Arduino,这不是我的代码,但我不明白为什么它不工作。define函数用于声明NUM ANGLES,但它表示未声明ANGLES 我曾尝试在所有范围内定义,但没有成功 #define NUM ANGLES 7 当我只声明角度或其他东西时,它有帮助吗。这是我第一次使用arduino汽车套件2wd,这相当困难 /* * Firmware for the ”2WD Ultrasonic Motor Robot Car Kit” * * Stephen A. Edwards * * Hardware configu

这不是我的代码,但我不明白为什么它不工作。define函数用于声明NUM ANGLES,但它表示未声明ANGLES

我曾尝试在所有范围内定义,但没有成功

#define NUM ANGLES 7
当我只声明角度或其他东西时,它有帮助吗。这是我第一次使用arduino汽车套件2wd,这相当困难

/*
* Firmware for the ”2WD Ultrasonic Motor Robot Car Kit”
*
* Stephen A. Edwards
*
* Hardware configuration :
* A pair of DC motors driven by an L298N H bridge motor driver
* An HC−SR04 ultrasonic range sensor mounted atop a small hobby servo
*/
#include <Servo.h>

Servo servo;
// Ultrasonic Module pins
const int trigPin = 13; // 10 microsecond high pulse causes chirp , wait 50 us
const int echoPin = 12; // Width of high pulse indicates distance
// Servo motor that aims ultrasonic sensor .
const int servoPin = 11; // PWM output for hobby servo
// Motor control pins : L298N H bridge
const int enAPin = 6; // Left motor PWM speed control
const int in1Pin = 7; // Left motor Direction 1
const int in2Pin = 5; // Left motor Direction 2
const int in3Pin = 4; // Right motor Direction 1
const int in4Pin = 2; // Right motor Direction 2
const int enBPin = 3; // Right motor PWM speed control

enum Motor { LEFT, RIGHT };
// Set motor speed: 255 full ahead, −255 full reverse , 0 stop
void go( enum Motor m, int speed)
{
digitalWrite (m == LEFT ? in1Pin : in3Pin , speed > 0 ? HIGH : LOW );
digitalWrite (m == LEFT ? in2Pin : in4Pin , speed <= 0 ? HIGH : LOW );
analogWrite(m == LEFT ? enAPin : enBPin, speed < 0 ? -speed : speed );
}

// Initial motor test :
// left motor forward then back
// right motor forward then back
void testMotors ()
{
static int speed[8] = { 128, 255, 128, 0 , -128, -255, -128, 0 };
go(RIGHT, 0);
for (unsigned char i = 0 ; i < 8 ; i++)
go(LEFT, speed[i ]), delay (200);
for (unsigned char i = 0 ; i < 8 ; i++)
go(RIGHT, speed[i ]), delay (200);
}

// Read distance from the ultrasonic sensor , return distance in mm
//
// Speed of sound in dry air , 20C is 343 m/s
// pulseIn returns time in microseconds (10ˆ−6)
// 2d = p * 10ˆ−6 s * 343 m/s = p * 0.00343 m = p * 0.343 mm/us
unsigned int readDistance ()
{
digitalWrite ( trigPin , HIGH );
delayMicroseconds (10);
digitalWrite ( trigPin , LOW );
unsigned long period = pulseIn ( echoPin, HIGH );
return period * 343 / 2000;
}

#define NUM ANGLES 7
unsigned char sensorAngle[NUM ANGLES] = { 60, 70, 80, 90, 100, 110, 120 };
unsigned int distance [NUM ANGLES];
// Scan the area ahead by sweeping the ultrasonic sensor left and right
// and recording the distance observed. This takes a reading , then
// sends the servo to the next angle. Call repeatedly once every 50 ms or so.


void readNextDistance ()
{

static unsigned char angleIndex = 0;
static signed char step = 1;
distance [angleIndex ] = readDistance ();
angleIndex += step ;
if (angleIndex == NUM ANGLES - 1) step = -1;
else if (angleIndex == 0) step = 1;
servo . write ( sensorAngle[angleIndex ] );
}


// Initial configuration
//
// Configure the input and output pins
// Center the servo
// Turn off the motors
// Test the motors
// Scan the surroundings once
//
void setup () {
pinMode(trigPin , OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite ( trigPin , LOW);
pinMode(enAPin, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);
pinMode(enBPin, OUTPUT);
servo . attach ( servoPin );
servo . write (90);
go(LEFT, 0);
go(RIGHT, 0);
testMotors ();
// Scan the surroundings before starting
servo . write ( sensorAngle[0] );
delay (200);
for (unsigned char i = 0 ; i < NUM ANGLES ; i ++)
readNextDistance (), delay (200);
}

// Main loop:
//
// Get the next sensor reading
// If anything appears to be too close , back up
// Otherwise, go forward
//
void loop () {
readNextDistance ();
// See if something is too close at any angle
unsigned char tooClose = 0;
for (unsigned char i = 0 ; i < NUM ANGLES ; i++)
if ( distance [ i ] < 300)
tooClose = 1;
if (tooClose) {
// Something's nearby: back up left
go(LEFT, -180);
go(RIGHT, -80);
} 
 else {
// Nothing in our way: go forward
go(LEFT, 255);
go(RIGHT, 255);
}
// Check the next direction in 50 ms
delay (50);
} 

无法在“定义”的第一部分中使用空格

#define NUM_ANGLES 7

Define只不过是一个文本替换,它用行的其余部分替换第一个标记。

使用Define替换常量时,不能使用空格。这是因为定义由and使用。 你写了:

#define NUM ANGLES 7
...
for (unsigned char i = 0 ; i < NUM ANGLES ; i ++)
然后预处理器结果将如下所示:

for (unsigned char i = 0 ; i < 7 ; i ++)
这确实是可编译的代码

这一切都是因为定义的格式如下所示:


定义标识符标记字符串换行符

,并请缩进代码。它将用于未签名字符i=0;i<7角;我++
#define NUM_ANGLES 7
for (unsigned char i = 0 ; i < 7 ; i ++)