SHOW:
|
|
- or go back to the newest paste.
| 1 | - | #include <EEPROM.h> |
| 1 | + | #include <Stepper.h> |
| 2 | - | char RamArray[]="1234"; |
| 2 | + | #include <NewPing.h> |
| 3 | ||
| 4 | - | void setup() |
| 4 | + | #define STEPS 100 // number of steps per revolution |
| 5 | ||
| 6 | - | // write a 0 to all 512 bytes of the EEPROM |
| 6 | + | |
| 7 | - | for (int i = 0; i < 4; i++) |
| 7 | + | |
| 8 | - | EEPROM.write(i, RamArray[i]); // mindah isi ram ke eeprom |
| 8 | + | const int pingPin = 13; |
| 9 | int inPin = 12; | |
| 10 | - | // turn the LED on when we're done |
| 10 | + | int safeZone = 5; |
| 11 | - | digitalWrite(13, HIGH); |
| 11 | + | |
| 12 | ||
| 13 | Stepper motor(STEPS, 8, 9, 10, 11); | |
| 14 | //NewPing sodar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); | |
| 15 | int ping_delay = 50; | |
| 16 | long last_ping_time = 0; | |
| 17 | long duration; // duration of return pulse | |
| 18 | ||
| 19 | boolean new_reading = false; | |
| 20 | const int max_write_delay = 50; | |
| 21 | long last_write_time = 0; | |
| 22 | ||
| 23 | ||
| 24 | ||
| 25 | boolean stopMotor = false; | |
| 26 | int rpm = 45; // default RPM | |
| 27 | ||
| 28 | void setup() {
| |
| 29 | motor.setSpeed(rpm); | |
| 30 | // initialize serial communication | |
| 31 | Serial.begin(9600); | |
| 32 | } | |
| 33 | ||
| 34 | void loop() | |
| 35 | {
| |
| 36 | long duration, cm; | |
| 37 | pinMode(pingPin, OUTPUT); | |
| 38 | digitalWrite(pingPin, LOW); | |
| 39 | delayMicroseconds(2); | |
| 40 | digitalWrite(pingPin, HIGH); | |
| 41 | delayMicroseconds(5); | |
| 42 | digitalWrite(pingPin, LOW); | |
| 43 | ||
| 44 | pinMode(inPin, INPUT); | |
| 45 | duration = pulseIn(inPin, HIGH); | |
| 46 | cm = microsecondsToCentimeters(duration); | |
| 47 | ||
| 48 | if(millis() - last_ping_time >= ping_delay) {
| |
| 49 | last_ping_time = millis(); | |
| 50 | ||
| 51 | // trigger the pulse and interrupt on response | |
| 52 | // sodar.ping_timer(checkPing); | |
| 53 | } | |
| 54 | ||
| 55 | if(new_reading) {
| |
| 56 | new_reading = false; | |
| 57 | last_write_time = millis(); | |
| 58 | ||
| 59 | // convert the time into a distance | |
| 60 | // cm = microsecondsToCentimeters(duration); | |
| 61 | // cm = random(1, 300); | |
| 62 | ||
| 63 | writeData(cm, motor.getAngle()); | |
| 64 | } else if(millis() - last_write_time >= max_write_delay) {
| |
| 65 | last_write_time = millis(); | |
| 66 | ||
| 67 | // cm = 0; | |
| 68 | writeData(cm, motor.getAngle()); | |
| 69 | } | |
| 70 | ||
| 71 | if(!stopMotor) {
| |
| 72 | motor.step(1); | |
| 73 | } | |
| 74 | } | |
| 75 | ||
| 76 | void writeData(float cm, float angle) | |
| 77 | {
| |
| 78 | ||
| 79 | Serial.print(cm); | |
| 80 | Serial.print(" cm @ ");
| |
| 81 | ||
| 82 | ||
| 83 | Serial.print(angle); | |
| 84 | Serial.println(" degrees");
| |
| 85 | } | |
| 86 | ||
| 87 | ||
| 88 | ||
| 89 | long microsecondsToCentimeters(long microseconds) | |
| 90 | {
| |
| 91 | return microseconds / 29 / 2; | |
| 92 | } |