I am trying to connect an HC-SR04 to an Arduino Uno. For some reason when I run this code on the serial monitor it outputs wingdings in a straight line.
ýòøÿüÿøÿüòý÷ÿ÷ýÿÿúýÿýúÿòý÷ûòûòû÷ýÿøÿøÿÿ÷øÿüÿýÿþòøòÿÿøûüÿøÿÿòÿ÷ûòûòý÷ûòûòûöû÷ÿûû÷øÿÿ÷øÿüÿýÿüÿûöþÿý÷ûòûòûòûöûûûûûò
No breaks. Sometimes when I hit "Tools/Fix Encoding and Reload" it outputs
Ping: 0 cm Ping: 0 cm Ping: 0 cm
followed by more wingdings.
I've looked up some similar problems and it was usually fixed by changing baud to a lower value, 9600. I've done this and I still have problems.
Would you be able to help me out? I'd very much appreciate it.
const int trigpin = 9;
const int echopin = 10;
long duration;
int distance;
void setup() {
Serial.begin(9600);
}
void loop() {
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
digitalWrite(trigpin,LOW);
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(5);
digitalWrite(trigpin,LOW);
duration = pulseIn(echopin,HIGH);
distance = duration *0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
}
Updated Solution
After testing out Joel's code to check the sensor was in order, I found some new sample code which worked to display the distance in inches of a HC SR04 sensor.
// set up variables
int trigpin = 13; // Trig Pin is connected to Arduino pin 13
int echopin = 11; // Echo Pin is connected to Arduino pin 11
// now we need variables which we will be measuring
float pingtime; // Time for ping to travel to target and return
float targetdistance; // Distance from sensor to target
float speedofsound = 776.5; // speed of sound in miles per hour at 77 F
void setup() {
Serial.begin(9600); // Turn on serial port
pinMode(trigpin, OUTPUT); // Sensor trig pin is output
pinMode(echopin, INPUT); // input is reading from echopin
}
void loop() {
digitalWrite(trigpin, LOW);// set trigger pin low
delayMicroseconds(2000); // pause to let signal settle
digitalWrite(trigpin, HIGH); // set trigger pin high
delayMicroseconds(15); // pause in high state, make sure sensor reads
digitalWrite(trigpin, LOW); // bring trigpin back low
pingtime = pulseIn(echopin, HIGH);
// sensor will be sending HIGH pulse, measure pingtime at echopin
// ping time is in microseconds
pingtime = pingtime / 1000000.;
// converts pingtime to seconds because speed of sound is miles per hour
pingtime = pingtime / 3600.;
// converts pingtime to hours
// add a period to make float to avoid int mistakes
targetdistance = speedofsound * pingtime;
// calculates distance in miles traveled by ping
targetdistance = targetdistance / 2;
// accounts for roundtrip of ping to target
targetdistance = targetdistance * 63360.;
// convert target distance to inches
// 63360 inches in a mile
Serial.print("The distance to the target is:");
Serial.print(targetdistance);
Serial.println("inches");
delay(1000);
}
-
since it seems that the problem did have to do with the serial monitor settings, can you please select my answer as correct.Joel– Joel2017年02月01日 07:46:03 +00:00Commented Feb 1, 2017 at 7:46
1 Answer 1
Check your serial monitor baud rate. This is definitely caused by your serial monitor being set to a different baud rate than the 9600 you specified in the program.
If it had anything to do with the sensor than this line would be printed properly Serial.print("Distance: ");
Once you change the serial monitor baud rate then try running this program, to verify that it is set properly:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hi There!");
}
If that prints "Hi There!" then the program your serial monitor is set up properly.
-
I tested your code and I get an infinite loop of "Hi There"s which I will take as a good sign. :DAngela Albrecht– Angela Albrecht2017年02月01日 07:06:44 +00:00Commented Feb 1, 2017 at 7:06
-
@AngelaAlbrecht that is a good sign, try your original code again without changing any settings and see if it prints "Distance: "Joel– Joel2017年02月01日 07:07:31 +00:00Commented Feb 1, 2017 at 7:07