This is not what I made this thread for;
I was hoping to get direction to someone who's already done something similar...
I CAN code this myself through trial and error, I was hoping for guidance...
//Purpose is to place a camera/monitoring system, could also drop a package multiple MIKES would allow sound triangulation, should be able to record sound
//Debug should both send serial? messages, AND play sound, AND flash signal light colors
//IDeally it can play .wav files for ACTUAL sound effects, especially LOUD HUMAN VOICE (to pretend it's a person) fake security guard sounds
//BINAURAL sounds/frequencies that come from everywhere? /users head or... speaker faces DOWN? even drop a spare speaker to hae 2 points of possible noise
//should stop all motion, and filter out BG sound so it only records or alerts on NEW sound (Also filter patterned sounds, like a machine shops stamping press?
//If noo movement detected, shut down the Trail cam that's it's security camera? thermal camera? dash cam vs gamecam?
//VARIANT 5/12/2021 THis is going to be a wall following room mapper, storing 1'x1' squares in an array I guess?
#include <Servo.h> //standard library for the servo
#include <NewPing.h> //for the Ultrasonic sensor function library.
//L298N motor control pins PWM on 3/5/6/9/10/11
#define ENA 1
#define ENB 2
const int knockSensor = A0, threshold = 10; int knockSensorRead = 0; //Knock sensor needs 1M ohm resistor inbetween leads
int PIRsensor = 13, IRsensor=A4, PIRstate = 0;
const int LeftMotorForward = 5, LeftMotorBackward = 7, RightMotorForward = 6, RightMotorBackward = 3; //I think only the forwards REALLY need PWM... the 2 reverse can be fullpower
boolean goesForward = false; //What is this used for???
int distanceFront = 100;
/*2 LED SIN FADE */ int ledpin = 10, ledpin2 = 11, ledSINUS1, ledSINUS2, periode = 3000, displace = 500; long time=0;
NewPing sonar(A0, A1, 200); Servo servo_motor; //trig,echo,maxdistance FOR some reason these have to be declared OUTSIDE of setup to be referenced in subroutines
void setup() {
/*&%$#@&%$#@&%$#@&%$#@&%$#@&%$#@ BASE CODE FROM ALL PROGRAMS STARTUP SOUND/LIGHTS/DEBUG %$#@&%$#@&%$#@&%$#@
PWM on PINS 3/5/6/9/10/11*/
Serial.begin(9600); Serial.println("BASE ROBOT SKETCH 2020");
Serial.println("PIEZOSPEAKER/KNOCK SENSOR PIN A0, signalLed PIN 13, SINFADE LEDS 10/11 SERVO RUINS PWM on 9/10 TONE ruins 3/11");
//THEN we're also gonna hookup an ultrasonic, the bump sensor(s) and a PIR motion sensor, headlights, Lasers, PCM decoder/RADIO CONTROL
digitalWrite(ENA,HIGH); digitalWrite(ENB,HIGH);
pinMode(RightMotorForward, OUTPUT);pinMode(LeftMotorForward, OUTPUT);pinMode(LeftMotorBackward, OUTPUT);pinMode(RightMotorBackward, OUTPUT);
servo_motor.attach(9); servo_motor.write(115); //Why 115 not 90? why ping it several times?
delay(300); //WHY?
distanceFront = readPing(); Serial.println(distanceFront); Serial.println("DISTANCE 1");delay(100);
distanceFront = readPing(); Serial.println(distanceFront); Serial.println("DISTANCE 2");delay(100);
distanceFront = readPing(); Serial.println(distanceFront); Serial.println("DISTANCE 3");delay(100);
distanceFront = readPing(); Serial.println(distanceFront); Serial.println("DISTANCE 4");delay(100);
Serial.println("INITIALIZED");
/*FLASH LED 3 seconds*/ pinMode(ledpin2, OUTPUT); int i = 0; for (i = 0; i < 29; i++) {delay(random(50,200));if (i % 2 == 0 )digitalWrite(ledpin2, HIGH); else digitalWrite(ledpin2, LOW);}
}
void loop() {
/*VOIDLOOP 2 LED SIN FADE */ time = millis();ledSINUS1 = 128+127*cos(2*PI/periode*time);ledSINUS2 = 128+127*cos(2*PI/periode*(displace-time)); analogWrite(ledpin, ledSINUS1); analogWrite(ledpin2, ledSINUS2);
int distanceRight = 0, distanceLeft = 0; distanceFront = 0; //Reset distances
// lookLeft (); // Looks Left (Which it should already be facing after Lookforwards for wall following purposes
//lookRight ();
// lookForwards (); //Ret to LEFT after
//Save Map/grid position as Array? or x4 binary?
//moveForward(); //MOVE 12" at a time Should be ok to move without looking Right, tunnel is unlikely and we're just expecting to follow a wall until CORNER!
//WHen look forwards, if there's an object(Corner)LOG IT, turn right, rescan all directions and save a variant of that same corner? needs to change heading datatype (NO LONGER FACING NORTH)
if (distanceFront <= 20){ //if OBJECT DETECTED
moveStop();
Serial.println("OBJECT DETECTED IN FRONT (FRONT ONLY?)DISTANCE:");Serial.println(distanceFront);
delay(300);moveBackward(); delay(400); //I believe this isn't actually a move backwards, just a "BRAKEing movement"
moveStop();delay(300);
distanceRight = lookRight();delay(300); //Set distance right to LookRIGHT
distanceLeft = lookLeft();delay(300);
if (distanceFront >= distanceLeft){ //If left is EVEN CLOSER THAN FRONT,(***CORNER***) turn right
Serial.println("Turn RIGHT");turnRight();moveStop();}
else{
Serial.println("Turn LEFT"); turnLeft();moveStop();} //else turn left, because Front is <20, and Left is <20.... there is no movebackward if ALL distances are <20
}
else{
moveForward(); //Base movement is to continue forwards and scan, until object detected
}
distanceFront = readPing(); //This is the deafualt movement and reading
}
//||||||&&&&&&&&&&&||||END OF LOOP|||&&&&&&&&&&&7|||||||||||||&&&&&&&&&&&&&|||||||||||||||||||||||||||&&&&&&&&&&&&&&&||||||||||||||||||||||&&&&&&&&&&&&7||||||||||||||||||
int lookLeft(){servo_motor.write(170);delay(500);int woohoo = readPing();delay(100);servo_motor.write(115);Serial.println("LEFT DISTANCE:");Serial.println(woohoo);return woohoo;delay(100); //WHYwthfuck is this delay here? instead of the main code body??? this wont ever get used, it returns BEFORE THIS
}
int lookRight(){ servo_motor.write(50); //Look left, ping, return forwards, Int lookRight, returns distance
delay(500);int fuckshit = readPing(); //Delay is to stop wiggling
delay(100); //this delay should be pointless
servo_motor.write(115);Serial.println("RIGHT DISTANCE:");Serial.println(fuckshit);return fuckshit;}
int lookForwards(){}
int readPing(){delay(70); int cm = sonar.ping_cm(); if (cm==0){ cm=250;} return cm;} //if reads 0, read as 250, error will show as super high and continue movement
void moveStop(){
digitalWrite(RightMotorForward, LOW);digitalWrite(LeftMotorForward, LOW);digitalWrite(RightMotorBackward, LOW);digitalWrite(LeftMotorBackward, LOW);}
void moveForward(){ if(!goesForward){goesForward=true;
//if Motion was STOPPED/object detected, (goesForward starts out false) THEN move forwards.... move backwards also sets it to false
analogWrite (LeftMotorForward, 220);analogWrite(RightMotorForward, 255);digitalWrite(LeftMotorBackward, LOW);digitalWrite(RightMotorBackward, LOW); }}
void moveBackward(){ goesForward=false; //why bother with the boolean?
digitalWrite(LeftMotorBackward, HIGH);digitalWrite(RightMotorBackward, HIGH);digitalWrite(LeftMotorForward, LOW);digitalWrite(RightMotorForward, LOW); }
void turnRight(){
digitalWrite(LeftMotorForward, HIGH);digitalWrite(RightMotorBackward, HIGH);digitalWrite(LeftMotorBackward, LOW);digitalWrite(RightMotorForward, LOW);
delay(500); //since these use DELAY, it cannot scan sensors while turning
digitalWrite(LeftMotorForward, HIGH);digitalWrite(RightMotorForward, HIGH);digitalWrite(LeftMotorBackward, LOW);digitalWrite(RightMotorBackward, LOW);}
void turnLeft(){
digitalWrite(LeftMotorBackward, HIGH);digitalWrite(RightMotorForward, HIGH);digitalWrite(LeftMotorForward, LOW);digitalWrite(RightMotorBackward, LOW);
delay(500);
digitalWrite(LeftMotorForward, HIGH);digitalWrite(RightMotorForward, HIGH);digitalWrite(LeftMotorBackward, LOW);digitalWrite(RightMotorBackward, LOW);}