-
Notifications
You must be signed in to change notification settings - Fork 0
/
CharRC.c
150 lines (123 loc) · 2.25 KB
/
CharRC.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// Recepteur
#include <SPI.h>
#include "RF24.h"
#define CSN_nRF 10
#define CE_nRF A0
#ifndef OLD_VERSION
#define A_PH 8
#define A_EN 6
#define B_PH 7
#define B_EN 5
#define BUZZER A4
#else
#define A_PH 8
#define A_EN 7
#define B_PH 6
#define B_EN 5
#define BUZZER A4
#endif
RF24 radio(CE_nRF, CSN_nRF);
void setup()
{
// Serial.begin (9600);
radio.begin();
radio.setPALevel(RF24_PA_LOW);
radio.openReadingPipe(1, (const uint8_t*)"SUMOA");
radio.openWritingPipe((const uint8_t*)"REMOA");
pinMode (BUZZER, OUTPUT);
pinMode (A_PH, OUTPUT);
pinMode (A_EN, OUTPUT);
pinMode (B_PH, OUTPUT);
pinMode (B_EN, OUTPUT);
Serial.begin (9600);
radio.startListening();
}
/*
UP = 0
DOWN = 1023
LEFT = 1023
RIGHT = 0
*/
#define FORWARD 0
#define BACKWARD 1
#define RIGHT 1
#define LEFT 0
void cmdMotor (uint16_t n)
{
boolean sens, dir;
int16_t speedL, speedR;
uint8_t x = highByte (n);
uint8_t y = lowByte (n);
if (x > 128 - 10 && x < 128 + 10)
x = 128;
if (y > 128 - 10 && y < 128 + 10)
y = 128;
if (x > 128)
{
sens = BACKWARD;
x = x - 128;
}
else
{
x = 128 - x;
sens = FORWARD;
}
if (y > 128)
{
dir = RIGHT;
y = y - 128;
}
else
{
y = 128 - y;
dir = LEFT;
}
Serial.print (x);
Serial.print (" ");
Serial.println (y);
if (dir == LEFT)
{
speedL = 2*x - y*2;
speedR = 2*x + y*2;
}
else
{
speedL = 2*x + y*2;
speedR = 2*x - y*2;
}
if (sens == FORWARD)
{
digitalWrite (A_PH, HIGH);
digitalWrite (B_PH, HIGH);
}
else
{
digitalWrite (A_PH, LOW);
digitalWrite (B_PH, LOW);
}
if (speedL < 0)
{
digitalWrite (A_PH, LOW);
speedL = speedL*-1;
}
if (speedR < 0)
{
digitalWrite (B_PH, LOW);
speedR = speedR *-1;
}
if (speedL > 255)
speedL = 255;
if (speedR > 255)
speedR = 255;
analogWrite (A_EN, speedL);
analogWrite (B_EN, speedR);
}
void loop()
{
uint32_t n;
if (radio.available())
{
radio.read(&n, 4);
cmdMotor(n);
}
}