|
|
本帖最后由 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[Mirf.payload];
- if(Mirf.dataReady()) //等待接收数据准备好
- {
- Mirf.getData(data); //接收数据到data数组
- //data[1]<左移8位与data[0]并,重组数据。
- adata = (unsigned int)((data[1] << 8) | data[0]);
- //与上一次结果比较,避免相同结果刷屏,降低串口流量
- if(adata != oldadata)
- {
- oldadata = adata; //本次结果作为历史结果。
- lspd = data[0];
- rspd = data[1];
- //Serial.print("L");Serial.print(lspd);Serial.print(" R");Serial.println(rspd);
- moto(lspd, rspd);
- }
- }
- }
复制代码 |
|