Vector:
Vision Enabled Cellphone Tricycle Oriented Robot
#include <Servo.h> const byte MOTOR_PORT = 11; // port to drive motor (pwm) const byte SERVO_PORT = 9; // port to drive servo const int SERVO_MIN = 700; const int SERVO_MAX = 2400; char commandValue = '\0';// holds the command code, sent over serial int dataValue = 0;// holds the data, sent over serial Servo servo1; // void setup() { Serial.begin(9600); // setup pins for output pinMode(MOTOR_PORT, OUTPUT); // using a HS422 servo, was able to get 180 deg. // might have to tweak SERVO_MIN, SERVO_MAX to get proper rotation. servo1.attach(SERVO_PORT, SERVO_MIN, SERVO_MAX); } // void loop() { // priority is for commands coming over serial if (Serial.available()) { char incomingChar = Serial.read(); if ('\n' == incomingChar) { // eol recvd, so process command and value collected so far processCommand(commandValue, dataValue); Serial.print("(");Serial.print(commandValue);Serial.print(dataValue); Serial.println(") ok >");// reply back to calling device commandValue = '\0'; // reset dataValue = 0; // reset } else if (isDigit(incomingChar)) { dataValue = (dataValue * 10) + (incomingChar - '0'); // accumulate the data value } else { // non-digit, so consider as a command code commandValue = incomingChar; // set the current command } } } // void processCommand(char commandValue, int dataValue) { if ('m' == commandValue) {// set motor speed analogWrite(MOTOR_PORT, normalize(dataValue, 0, 255)); } else if ('s' == commandValue) {// set steering servo position servo1.write(normalize(dataValue, 0, 180)); } } // returns true if 'digit' represents an ascii digit between 0 and 9 boolean isDigit (char digit) { return (digit >= '0' && digit <= '9'); } // chops off valueToNormalize to be between minValue and maxValue int normalize(int valueToNormalize, int minValue, int maxValue) { if (valueToNormalize < minValue) return minValue; else if (valueToNormalize > maxValue) return maxValue; else return valueToNormalize; }
#!/usr/bin/python from bluetooth import * server_address = "00:12:05:11:90:32" port = 1 print "connecting to \"%s\" on %s" % (server_address, port) sock = BluetoothSocket( RFCOMM ) sock.connect((server_address, port)) print "connected. ready for input..." while True: data = raw_input() # read stdin, stripping the trailing newline if data == 'x': break data = data + '\n' print 'sending', data sock.send(data) sock.close()