为什么Serial.begin(9600)不能删除
本帖最后由 pumpitup 于 2015-6-24 20:57 编辑做了个遥控的车,使用nRF24L01收发信号,接收端(小车)代码如下。
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
// 一下定义接298的端口
int leftPwm = 3;
int leftForwardPin = 2;
int leftBackwardPin = 4;
int rightPwm = 6;
int rightForwardPin = 7;
int rightBackwardPin = 8;
// 记录之前的速度
int prelspd, prerspd;
// 原来使用298上的In1到In4,但后来发现pwm口不够用。于是改了,需要加工的说。
void moto(int lspd, int rspd)
{
int lf, lb, rf, rb;
if (lspd>0) {lf=1; lb=0; }
else if (lspd<0) {lf=0; lb=1; }
else {lf=0; lb=0;}
if (rspd>0) {rf=1; rb=0; }
else if (rspd<0) {rf=0; rb=1; }
else {rf=0; rb=0;}
digitalWrite(leftForwardPin, lf); digitalWrite(leftBackwardPin, lb);
analogWrite(leftPwm, abs(lspd));
digitalWrite(rightForwardPin, rf); digitalWrite(rightBackwardPin, rb);
analogWrite(rightPwm, abs(rspd));
}
void setup() {
Mirf.cePin = 9;
Mirf.csnPin = 10;
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"Rec01");
Mirf.payload = sizeof(unsigned int);
Mirf.channel = 3;
Mirf.config();
pinMode(leftPwm, OUTPUT);
pinMode(leftForwardPin, OUTPUT);
pinMode(leftBackwardPin, OUTPUT);
pinMode(rightPwm, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightBackwardPin, OUTPUT);
Serial.begin(9600);
//Serial.println("I'm Receiver...");
}
unsigned int adata = 0, oldadata = 0;
void loop() {
int x, y;
signed char lspd, rspd;
byte data;
if(Mirf.dataReady()) //等待接收数据准备好
{
Mirf.getData(data); //接收数据到data数组
//data<左移8位与data并,重组数据。
adata = (unsigned int)((data << 8) | data);
//与上一次结果比较,避免相同结果刷屏,降低串口流量
if(adata != oldadata)
{
oldadata = adata; //本次结果作为历史结果。
lspd = data;
rspd = data;
//Serial.print("L");Serial.print(lspd);Serial.print(" R");Serial.println(rspd);
moto(lspd, rspd);
}
}
}
问题是这样。接在电脑上的时候,可以遥控。
但是拔下usb线,就不动了!
以为是Serial的问题,想全部删掉,结果begin(9600)删了后下载就会报错。说是ld.exe应用程序错误。
什么情况啊,要连线我还用个什么遥控啊啊。 刚试了一下,只要接到一台usb有电的电脑上就可以,都不用进系统啊。
页:
[1]