- #1
ParticleGinger6
- 32
- 5
- Homework Statement
- So I am in Advance Physics Lab II at my university and we are building a mars rover that will follow a black line on the ground. I have gotten that to work. I also have gotten the Rover to be able to avoid objects.
However, I also have to make the Mars Rover be able to sense gas (alcohol) and when the Rover goes by the gas the first time take in the readings and the second time, stop at the gas. I am having trouble with this section.
The Mars Rover is also supposed to sense a light source. Again the rover will drive the track and read in the light sensor value and on the second trip back will stop at the max value of the Rover
I have attached my three libraries of code but every time I try and fix one aspect of the code the parts that I have gotten to work tend to want to not work anymore.
I have been working on this project for a few weeks now. I am looking for some help because I seem to fix one problem just to create another 2 problems.
- Relevant Equations
- Arduino c++
Mentor note: I have removed author information and have enclosed the code below in code tags.
First library:
MarsRover_lineFinder2.ino
The Second Library:
MRlinelib.cpp
The Third library:
MRlinelib.h
First library:
MarsRover_lineFinder2.ino
C:
#include <ZumoShield.h>
#include "MRlinelib.h"
#include <QTRSensors.h>
#include <Pushbutton.h>
#include <ZumoReflectanceSensorArray.h>
#include <ZumoMotors.h>
#include <ZumoBuzzer.h>
#define LED 11
MRlinelib motorControl;
Pushbutton button(ZUMO_BUTTON);
const int ProxiSensor = 6;
void setup() {
Serial.begin(9600);
button.waitForButton();
motorControl.sensorCalibrate();
pinMode(ProxiSensor, INPUT);
button.waitForButton();
}
void loop() {
if (digitalRead(ProxiSensor) == HIGH) {
motorControl.followLine();
motorControl.gasSensor();
motorControl.lightSensor();
}
else {
motorControl.proximitySensor();
}
}
The Second Library:
MRlinelib.cpp
C:
#include "Arduino.h"
#include "MRlineLib.h"
#include <QTRSensors.h>
#include <Pushbutton.h>
#include <ZumoReflectanceSensorArray.h>
#include <ZumoMotors.h>
MRlinelib::MRlinelib(){};\
ZumoReflectanceSensorArray reflectanceSensors;
ZumoMotors motors;
ZumoMotors motorStop;
ZumoBuzzer buzzer;
int sensorPin = A0;
int lightSensorPin = A1;
int lightSensorValue;
int maxSpeed = 300;
int lastError = 0;
int maxSensor = 0;
int MRlinelib::sensorCalibrate(){
reflectanceSensors.init();
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
delay(1000);
int i;
for (i=0; i<80; i++){
if ((i>10 && i <= 30)||(i>50 && i<=70))
motors.setSpeeds(-200,200);
else
motors.setSpeeds(200,-200);
reflectanceSensors.calibrate();
delay(20);
}
motors.setSpeeds(0,0);
digitalWrite(13, LOW);
buzzer.play(">g32>>c32");
buzzer.play("L16 cdegreg4");
while(buzzer.isPlaying());
}
int MRlinelib::followLine(){
unsigned int sensors[6];
int position = reflectanceSensors.readLine(sensors);
int error = position - 2500;
int speedDifference = error / 4 + 6 * (error - lastError);
lastError = error;
int m1Speed = maxSpeed + speedDifference;
int m2Speed = maxSpeed - speedDifference;
if (m1Speed < 0)
m1Speed = 0;
if (m2Speed < 0)
m2Speed = 0;
if (m1Speed > maxSpeed)
m1Speed = maxSpeed;
if (m2Speed > maxSpeed)
m2Speed = maxSpeed;
motors.setSpeeds(m1Speed, m2Speed);
}
int MRlinelib::proximitySensor(){
delay(50);
motors.setSpeeds(0,0);
delay(500);
motors.setSpeeds(-100,100);
delay(660);
motors.setSpeeds(0,0);
delay(100);
motors.setSpeeds(100, 100);
delay(1000);
motors.setSpeeds(100, -100);
delay(660);
motors.setSpeeds(0,0);
delay(100);
motors.setSpeeds(100, 100);
delay(1500);
motors.setSpeeds(100, -100);
delay(660);
motors.setSpeeds(0,0);
delay(100);
motors.setSpeeds(100, 100);
delay(1000);
motors.setSpeeds(0,0);
delay(100);
motors.setSpeeds(-100,100);
delay(660);
motors.setSpeeds(0,0);
delay(50);
}
int MRlinelib::gasSensor(){
int maxSensor =0;
int k = 0;
int sensorValue = analogRead(sensorPin);
Serial.print("The sensor value is ");
Serial.println(sensorValue);
Serial.print("The k value is ");
Serial.println(k);
while(sensorValue > maxSensor){
sensorValue = maxSensor;
}
if(sensorValue < maxSensor){
k++;
if(k >= 4){
if(sensorValue == maxSensor){
motors.setSpeeds(0,0);
}
}
}
}
int MRlinelib::lightSensor(){
int maxLightSensor;
int j = 0;
lightSensorValue = analogRead(lightSensorPin);
while(lightSensorValue >= maxLightSensor){
lightSensorValue = maxLightSensor;
}
if(lightSensorValue < maxLightSensor) {
j++;
if (j >=4){
if(lightSensorValue == maxLightSensor) {
motors.setSpeeds(0,0);
delay(30000);
}
}
}
}
The Third library:
MRlinelib.h
C:
#ifndef MRlinelib_h
#define MRlinelib_h
#include "Arduino.H"
#include <QTRSensors.h>
#include <Pushbutton.h>
#include <ZumoReflectanceSensorArray.h>
#include <ZumoMotors.h>
#include <ZumoBuzzer.h>
class MRlinelib {
public: MRlinelib();
int sensorCalibrate();
int followLine();
int proximitySensor();
int gasSensor();
int lightSensor();
private:
};
#endif
Last edited by a moderator: