极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11029|回复: 2

为什么Serial.begin(9600)不能删除

[复制链接]
发表于 2015-6-24 17:24:46 | 显示全部楼层 |阅读模式
本帖最后由 pumpitup 于 2015-6-24 20:57 编辑

做了个遥控的车,使用nRF24L01收发信号,接收端(小车)代码如下。


  1. #include <SPI.h>
  2. #include <Mirf.h>
  3. #include <nRF24L01.h>
  4. #include <MirfHardwareSpiDriver.h>

  5. // 一下定义接298的端口
  6. int leftPwm = 3;
  7. int leftForwardPin = 2;
  8. int leftBackwardPin = 4;
  9. int rightPwm = 6;
  10. int rightForwardPin = 7;
  11. int rightBackwardPin = 8;

  12. // 记录之前的速度
  13. int prelspd, prerspd;

  14. // 原来使用298上的In1到In4,但后来发现pwm口不够用。于是改了,需要加工的说。
  15. void moto(int lspd, int rspd)
  16. {
  17.   int lf, lb, rf, rb;
  18.   if (lspd>0) {lf=1; lb=0; }
  19.   else if (lspd<0) {lf=0; lb=1; }
  20.   else {lf=0; lb=0;}
  21.   if (rspd>0) {rf=1; rb=0; }
  22.   else if (rspd<0) {rf=0; rb=1; }
  23.   else {rf=0; rb=0;}
  24.   
  25.   digitalWrite(leftForwardPin, lf); digitalWrite(leftBackwardPin, lb);
  26.   analogWrite(leftPwm, abs(lspd));
  27.   digitalWrite(rightForwardPin, rf); digitalWrite(rightBackwardPin, rb);
  28.   analogWrite(rightPwm, abs(rspd));
  29. }

  30. void setup() {
  31.   Mirf.cePin = 9;
  32.   Mirf.csnPin = 10;  
  33.   Mirf.spi = &MirfHardwareSpi;
  34.   Mirf.init();
  35.   Mirf.setRADDR((byte *)"Rec01");
  36.   Mirf.payload = sizeof(unsigned int);
  37.   Mirf.channel = 3;
  38.   Mirf.config();
  39.   pinMode(leftPwm, OUTPUT);
  40.   pinMode(leftForwardPin, OUTPUT);
  41.   pinMode(leftBackwardPin, OUTPUT);
  42.   pinMode(rightPwm, OUTPUT);
  43.   pinMode(rightForwardPin, OUTPUT);
  44.   pinMode(rightBackwardPin, OUTPUT);
  45.   Serial.begin(9600);
  46. //  Serial.println("I'm Receiver...");
  47. }

  48. unsigned int adata = 0, oldadata = 0;
  49. void loop() {
  50.     int x, y;
  51.     signed char lspd, rspd;
  52.     byte data[Mirf.payload];
  53.     if(Mirf.dataReady())    //等待接收数据准备好
  54.     {
  55.         Mirf.getData(data);    //接收数据到data数组
  56.         //data[1]<左移8位与data[0]并,重组数据。
  57.         adata = (unsigned int)((data[1] << 8) | data[0]);
  58.         //与上一次结果比较,避免相同结果刷屏,降低串口流量
  59.         if(adata != oldadata)
  60.         {
  61.             oldadata = adata; //本次结果作为历史结果。
  62.             lspd = data[0];
  63.             rspd = data[1];
  64.             //Serial.print("L");Serial.print(lspd);Serial.print(" R");Serial.println(rspd);
  65.             moto(lspd, rspd);
  66.         }
  67.     }
  68. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-6-24 17:31:12 | 显示全部楼层
问题是这样。接在电脑上的时候,可以遥控。
但是拔下usb线,就不动了!

以为是Serial的问题,想全部删掉,结果begin(9600)删了后下载就会报错。说是ld.exe应用程序错误。

什么情况啊,要连线我还用个什么遥控啊啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-24 17:33:31 | 显示全部楼层
刚试了一下,只要接到一台usb有电的电脑上就可以,都不用进系统啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 02:26 , Processed in 0.039831 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表