I was writing a script for the ardunio so that it would print how far away something was, and I was trying to make it so that if it was equal to the default length (when the script first started) it would not work, and if the distance between the two numbers is greater than 3 inches to print again. Not sure why it isn’t working. At first I tried to make it so that it would not print, also, if it was the same as the last printed length, so if anyone could figure that out instead, that would be amazing. Also, sorry if I sound stressed, I’ve been working on this probably super-simple script for at least 3 hours now.
#include <Ping.h>
Ping ping = Ping(13,0,0);
int defaultlength = 0;
int length = 0;
int afterlength = 0;
void setup(){
Serial.begin(9600);
ping.fire();
defaultlength = ping.inches();
}
void loop(){
ping.fire();
length = ping.inches();
delay(100);
afterlength = length - defaultlength;
sqrt(afterlength^2);
if (afterlength >= 3) {
Serial.print(afterlength);
ping.fire();
Serial.print("Inches: ");
Serial.print(ping.inches());
Serial.print(" | Centimeters: ");
Serial.print(ping.centimeters());
Serial.print(" | Light: ");
if (analogRead(A0) >= 1000) {
Serial.print("ON");
Serial.println();
}
else {
Serial.print("OFF");
Serial.println();
}
}
delay(1000);
}
Also, It is not printing anything at all ever. I’m not sure if its not going through the loop or what.
Your line
sqrt(afterlength^2);doesn’t do anything useful. Did you mean to take the absolute value by writingThe ^ operator is the bitwise XOR — not at all what you were trying to do.
Does that make it better?
As for your other question:
“At first I tried to make it so that it would not print, also, if it was the same as the last printed length, so if anyone could figure that out instead, that would be amazing.” – here is what you can do:
1) define another variable in the head of the script – call it
lastlengthand initialize it to defaultlength (right after you did your first ping insetup())2) in the loop, change the if statement to
3) finally, at the end of your if{} statement, add:
The reason to put that in the
if{}block is to make sure that you only update it if things have changed sufficiently – otherwise, you keep the same “don’t tell me again until it’s different than the number you told me before” value. Of course, the> 0.1value can be replaced with whatever tolerance you want. Note also use of abs() – a bit more compact than the square root of the square.