Skip to content

Commit 890bd3f

Browse files
authored
Add files via upload
1 parent fc2bb36 commit 890bd3f

File tree

1 file changed

+164
-0
lines changed

1 file changed

+164
-0
lines changed

ROS_TopicF.ino.ino

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
#include <ros.h>
2+
3+
#include <std_msgs/Float64.h>
4+
5+
// LEFT motor connection pins
6+
int LMpin1 = 9;
7+
int LMpin2 = 12;
8+
// RIGHT motor connection pins
9+
int RMpin1 = 10;
10+
int RMpin2 = 11;
11+
//Pins for ultrasonic sensor
12+
int echoPin = A0;
13+
int trigPin = A1;
14+
// Ultrasonic sensor variables with float decimal point
15+
float distance, duration, cm;
16+
//Starting variables of motor speeds
17+
int motRspeed = 0;
18+
int motLspeed = 0;
19+
//Creating value for motors
20+
int motState = 0;
21+
22+
// LED pins connections
23+
int ledPinG = 5;
24+
int ledPinB = 6;
25+
26+
int x;
27+
float pub;
28+
int forward;
29+
int halt;
30+
31+
ros::NodeHandle nh;
32+
33+
void messageCb(std_msgs::Float64 & msg){
34+
35+
36+
x = msg.data;
37+
38+
pub = x;
39+
Serial.print(x,pub);
40+
41+
}
42+
43+
void Stop () {// STOP function
44+
digitalWrite(LMpin1, LOW);
45+
digitalWrite(LMpin2, LOW);
46+
digitalWrite(RMpin1, LOW);
47+
digitalWrite(RMpin2, LOW);
48+
digitalWrite(ledPinB,HIGH);
49+
digitalWrite(ledPinG,HIGH);
50+
delay(2000);
51+
digitalWrite(ledPinB,LOW);
52+
digitalWrite(ledPinG,LOW);
53+
}
54+
void Ahead () {// AHEAD only function
55+
digitalWrite(LMpin1, LOW);
56+
digitalWrite(LMpin2, HIGH);
57+
digitalWrite(RMpin1, LOW);
58+
digitalWrite(RMpin2, HIGH);
59+
digitalWrite(ledPinB,HIGH);
60+
digitalWrite(ledPinG,HIGH);
61+
delay(2000);
62+
}
63+
void TurnL () { //Powering(Controling) Right motor
64+
65+
digitalWrite(LMpin1, LOW);
66+
digitalWrite(LMpin2, HIGH);
67+
digitalWrite(RMpin1, LOW);
68+
digitalWrite(RMpin2, LOW);
69+
digitalWrite(ledPinB,HIGH);
70+
digitalWrite(ledPinG,LOW);
71+
delay(1000);
72+
digitalWrite(ledPinB,LOW);
73+
}
74+
75+
void TurnR () { // Powering(Controling) Left motor
76+
77+
digitalWrite(LMpin1, LOW);
78+
digitalWrite(LMpin2, LOW);
79+
digitalWrite(RMpin1, LOW);
80+
digitalWrite(RMpin2, HIGH);
81+
digitalWrite(ledPinG,LOW);
82+
digitalWrite(ledPinB,LOW);
83+
delay(1000);
84+
digitalWrite(ledPinG,HIGH);
85+
}
86+
87+
void Base(){
88+
digitalWrite(LMpin1, LOW);
89+
digitalWrite(LMpin2, LOW);
90+
digitalWrite(RMpin1, LOW);
91+
digitalWrite(RMpin2, LOW);
92+
digitalWrite(ledPinG,LOW);
93+
digitalWrite(ledPinB,LOW);
94+
}
95+
96+
void Move() { // Function combining all functions responsible for robot movement
97+
if ((distance > 30)&&(pub==34)) {
98+
TurnL();
99+
}
100+
else if ((distance > 30) && (pub == 33)) {
101+
TurnR();
102+
}
103+
else if ((distance > 30) && (pub==35)) {
104+
Ahead();
105+
}
106+
else if (pub==14){
107+
Stop();
108+
}
109+
else if (pub!=34,33,35,14) {
110+
Base();
111+
}
112+
}
113+
114+
// Declare a Subscribers object
115+
ros::Subscriber<std_msgs::Float64> sub("ROS_Topic", &messageCb);
116+
117+
118+
119+
120+
void setup() {
121+
122+
Serial.begin(9600);
123+
// Set all the motor control pins to outputs
124+
pinMode(LMpin1, OUTPUT);
125+
pinMode(LMpin2, OUTPUT);
126+
pinMode(RMpin1, OUTPUT);
127+
pinMode(RMpin2, OUTPUT);
128+
129+
pinMode(ledPinG, OUTPUT);
130+
pinMode(ledPinB, OUTPUT);
131+
132+
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
133+
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
134+
135+
// Motors at start
136+
digitalWrite(LMpin1, LOW);
137+
digitalWrite(LMpin2, LOW);
138+
digitalWrite(RMpin1, LOW);
139+
digitalWrite(RMpin2, LOW);
140+
141+
nh.getHardware()->setBaud(57600);
142+
nh.initNode();
143+
nh.subscribe(sub);
144+
145+
146+
}
147+
148+
void loop() {
149+
digitalWrite(trigPin, LOW);
150+
delayMicroseconds(2);
151+
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
152+
digitalWrite(trigPin, HIGH);
153+
delayMicroseconds(10);
154+
digitalWrite(trigPin, LOW);
155+
// Reads the echoPin, returns the sound wave travel time in microseconds
156+
duration = pulseIn(echoPin, HIGH);
157+
// Calculating the distance
158+
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
159+
Serial.println(x);
160+
nh.spinOnce();
161+
162+
Move();
163+
164+
}

0 commit comments

Comments
 (0)