cs131014
5 years ago
2 changed files with 189 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||||
|
// these constants describe the pins. They won't change:
|
||||
|
const int xpin = A1; // x-axis of the accelerometer
|
||||
|
const int ypin = A2; // y-axis
|
||||
|
const int zpin = A3; // z-axis (only on 3-axis models)
|
||||
|
//
|
||||
|
int sampleDelay = 500; //number of milliseconds between readings
|
||||
|
void setup() |
||||
|
{ |
||||
|
// initialize the serial communications:
|
||||
|
Serial.begin(9600); |
||||
|
//
|
||||
|
//Make sure the analog-to-digital converter takes its reference voltage from
|
||||
|
// the AREF pin
|
||||
|
pinMode(xpin, INPUT); |
||||
|
pinMode(ypin, INPUT); |
||||
|
pinMode(zpin, INPUT); |
||||
|
} |
||||
|
void loop() |
||||
|
{ |
||||
|
int x = analogRead(xpin); |
||||
|
//
|
||||
|
//add a small delay between pin readings. I read that you should
|
||||
|
//do this but haven't tested the importance
|
||||
|
delay(1); |
||||
|
//
|
||||
|
int y = analogRead(ypin); |
||||
|
//
|
||||
|
//add a small delay between pin readings. I read that you should
|
||||
|
//do this but haven't tested the importance
|
||||
|
delay(1); |
||||
|
//
|
||||
|
int z = analogRead(zpin); |
||||
|
//
|
||||
|
//zero_G is the reading we expect from the sensor when it detects
|
||||
|
//no acceleration. Subtract this value from the sensor reading to
|
||||
|
//get a shifted sensor reading.
|
||||
|
float zero_G =512; |
||||
|
//
|
||||
|
//scale is the number of units we expect the sensor reading to
|
||||
|
//change when the acceleration along an axis changes by 1G.
|
||||
|
//Divide the shifted sensor reading by scale to get acceleration in Gs.
|
||||
|
float scale =102.3; |
||||
|
//
|
||||
|
Serial.print(((float)x - zero_G)/scale); |
||||
|
Serial.print("\t"); |
||||
|
//
|
||||
|
Serial.print(((float)y - zero_G)/scale); |
||||
|
Serial.print("\t"); |
||||
|
//
|
||||
|
Serial.print(((float)z - zero_G)/scale); |
||||
|
Serial.print("\n"); |
||||
|
//
|
||||
|
// delay before next reading:
|
||||
|
delay(sampleDelay); |
||||
|
} |
@ -0,0 +1,134 @@ |
|||||
|
// Setup Motor A (front and rear) pins
|
||||
|
int enableA = 1; |
||||
|
int pinA1 = 3; |
||||
|
int pinA2 = 2; |
||||
|
|
||||
|
// Setup Motor B (front and rear) pins
|
||||
|
int enableB = 6; |
||||
|
int pinB1 = 5; |
||||
|
int pinB2 = 4; |
||||
|
|
||||
|
void setup() { |
||||
|
// The setup code goes here and runs once only
|
||||
|
// Configure the pin modes for each drive motor
|
||||
|
pinMode (enableA, OUTPUT); |
||||
|
pinMode (pinA1, OUTPUT); |
||||
|
pinMode (pinA2, OUTPUT); |
||||
|
pinMode (enableB, OUTPUT); |
||||
|
pinMode (pinB1, OUTPUT); |
||||
|
pinMode (pinB2, OUTPUT); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
void loop() { |
||||
|
// Main code goes here and will run repeatedly:
|
||||
|
car(); // function keeps moving car forward while distance of objects in front are > 15cm away
|
||||
|
avoid(); // function makes car go back, turn slightly right to move forward in new direction
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
// Create motor functions
|
||||
|
void motorAforward() { |
||||
|
digitalWrite (pinA1, HIGH); |
||||
|
digitalWrite (pinA2, LOW); |
||||
|
} |
||||
|
void motorBforward() { |
||||
|
digitalWrite (pinB1, LOW); |
||||
|
digitalWrite (pinB2, HIGH); |
||||
|
} |
||||
|
void motorAbackward() { |
||||
|
digitalWrite (pinA1, LOW); |
||||
|
digitalWrite (pinA2, HIGH); |
||||
|
} |
||||
|
void motorBbackward() { |
||||
|
digitalWrite (pinB1, HIGH); |
||||
|
digitalWrite (pinB2, LOW); |
||||
|
} |
||||
|
void motorAstop() { |
||||
|
digitalWrite (pinA1, HIGH); |
||||
|
digitalWrite (pinA2, HIGH); |
||||
|
} |
||||
|
void motorBstop() { |
||||
|
digitalWrite (pinB1, HIGH); |
||||
|
digitalWrite (pinB2, HIGH); |
||||
|
} |
||||
|
void motorAcoast() { |
||||
|
digitalWrite (pinA1, LOW); |
||||
|
digitalWrite (pinA2, LOW); |
||||
|
} |
||||
|
void motorBcoast() { |
||||
|
digitalWrite (pinB1, LOW); |
||||
|
digitalWrite (pinB2, LOW); |
||||
|
} |
||||
|
void motorAon() { |
||||
|
digitalWrite (enableA, HIGH); |
||||
|
} |
||||
|
void motorBon() { |
||||
|
digitalWrite (enableB, HIGH); |
||||
|
} |
||||
|
void motorAoff() { |
||||
|
digitalWrite (enableA, LOW); |
||||
|
} |
||||
|
void motorBoff() { |
||||
|
digitalWrite (enableB, LOW); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// Setup movement functions
|
||||
|
void forward (int duration) { |
||||
|
motorAforward(); |
||||
|
motorBforward(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void backward (int duration) { |
||||
|
motorAbackward(); |
||||
|
motorBbackward(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void right (int duration) { |
||||
|
motorAbackward(); |
||||
|
motorBforward(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void left (int duration) { |
||||
|
motorAforward(); |
||||
|
motorBbackward(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void coast (int duration) { |
||||
|
motorAcoast(); |
||||
|
motorBcoast(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void breakRobot (int duration) { |
||||
|
motorAstop(); |
||||
|
motorBstop(); |
||||
|
delay (duration); |
||||
|
} |
||||
|
void disableMotors() { |
||||
|
motorAoff(); |
||||
|
motorBoff(); |
||||
|
} |
||||
|
void enableMotors() { |
||||
|
motorAon(); |
||||
|
motorBon(); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
// Setup the main car function
|
||||
|
void car() { |
||||
|
int distance_0; |
||||
|
distance_0 = distance(); |
||||
|
// Keep moving forward in a straight line while distance of objects in front > 15cm away
|
||||
|
while(distance_0 > 15) |
||||
|
{ |
||||
|
motorAon(); |
||||
|
motorBon(); |
||||
|
forward(1); |
||||
|
distance_0 = distance(); |
||||
|
} |
||||
|
breakRobot(0); |
||||
|
} |
Loading…
Reference in new issue