I am using a Python-Arduino API to do a mobile project (GitHub - thearn/Python-Arduino-Command-API: A Python library for communicating with Arduino microcontroller boards).
It is a pain in the ass to make an Ultrasonic sensor (HC-SR04, 4 pins) work through this API. So I made an Ultrasonic class and add a little code to the protptype.ino. And it works!
First you have to copy the ultrasonic library into your arduino libraries folder. You can find the library here:
http://imall.iteadstudio.com/im120628012.html --> download
In arduino.py, I add:
class Ultrasonic(object):
def init(self,board,trigPin=13,echoPin=12):
self.board=board;
self.sr=board.sr;
self.trigPin=trigPin;
self.echoPin=echoPin;
def distanceMeasure(self):
return values are in centimeters
cmd_str = build_cmd_str("us", (self.trigPin, self.echoPin))
self.sr.write(cmd_str)
self.sr.flush()
rd = self.sr.readline().replace("\r\n", "")
if rd.isdigit():
return int(rd)
In prototype.ino, I did:
-
include the header file
#include <Ultrasonic.h> //have to add to the beginning of the file -
add a function
void ultrasonicDistance(String data) {
String sdata[2];
split(sdata, 2, data, '%');
int trigPin = sdata[0].toInt();
int echoPin = sdata[1].toInt();
Ultrasonic ultrasonic(trigPin,echoPin);
Serial.println(ultrasonic.Ranging(CM));
}
- in function SerialParser(void), add one more option:
else if (cmd == "us") {
ultrasonicDistance(data);
}
======================================
Example:
from arduino import Arduino
from arduino import Ultrasonic
import time
ar = Arduino()
distance sensor
us1=Ultrasonic(ar,13,12) #13, trigPin; 12, echoPin
while True:
dis=us1.distanceMeasure()
if type(dis) is int:
print 'Distance= %d cm' % dis
time.sleep(0.5)