Immutable Page History Attachments

Diff for "fire/m0wb0t"

Page name: Diff for "fire / m0wb0t"
Differences between revisions 18 and 19
Revision 18 as of 2013-08-09 22:35:51
Size: 319
Editor: fire
Comment:
Revision 19 as of 2013-08-13 13:58:23
Size: 5074
Editor: fire
Comment:
Deletions are marked like this. Additions are marked like this.
Line 13: Line 13:
{{{#!highlight cpp
#define USBSERIAL 9600
#define BTGPSRATE 38400

#define SPDA 5 //Speed Control
#define DIR1A 9 //Direction
#define DIR2A 8 //Direction
#define SPDB 3 //Speed Control
#define DIR1B 12 //Direction
#define DIR2B 11 //Direction
#define STANDBY 10 //Standby Pin
#define STATUS_LED 13 //Led Pin

#define HAXXXOR 6 //spinning wheel of death ^^ macfags
#define HAX0RSPEEDMIN 0
#define HAX0RSPEEDMAX 90

#define MOTA 0
#define MOTB 3

#define FORWARD 1
#define BACKWARD 2
#define STOP 3

#define CMD_DRIVE 'c'
#define CMD_STOP 's'

#include <Servo.h>


char MOTs[] = {SPDA, DIR1A, DIR2A, SPDB, DIR1B, DIR2B};
char x,y,z;
char status = CMD_STOP;
Servo myservo; // create servo object to control a servo
int hax0rspeed=0;
int oldmillis;

char readBT() { while(!Serial1.available()) delay(20); return (char)Serial1.read(); }

void sendBT(char command[]) {
    Serial1.println();
    delay(250);
    Serial1.print(command);
    delay(250);
    Serial1.println();
    Serial1.flush();
    delay(250);
}

void setupBT(int setupdelay) {
    sendBT("+STWMOD=0"); // client mode
    sendBT("+STNA=m0wb0t"); // device name
    sendBT("+STAUTO=0"); // auto connect forbidden
    sendBT("+STOAUT=1"); // permit paired device to connect me
    sendBT("+STPIN=1337"); // bluetooth pin
    delay(setupdelay); // This delay is required.
    sendBT("+INQ=1"); // enable inqure the device
    delay(setupdelay); // This delay is required.
}

void stopMotor(char mot) { setMotor(mot, STOP, 0); }

void setMotor(char mot, char dir, int spd) {
    analogWrite (MOTs[mot + 0], spd);
    digitalWrite(MOTs[mot + 1], dir & 0x01);
    digitalWrite(MOTs[mot + 2], dir & 0x02);
}

void fullStop() {
    digitalWrite(STANDBY, LOW);
    digitalWrite(STATUS_LED, LOW); // indicate status
    stopMotor(MOTA);
    stopMotor(MOTB);
    status = CMD_STOP;
}

void servoup() {
    int pos = 0;
    for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
  { // in steps of 1 degree
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(20);
  }
}
void servodown() {
  int pos = 180;
  for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
  {
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(20);
  }
}


  
void initservo() {
  servoup();
  delay(50);
  servodown();
}

void setup() {
    pinMode( SPDA , OUTPUT );
    pinMode( SPDB , OUTPUT );
    pinMode( STANDBY , OUTPUT );
    pinMode( STATUS_LED , OUTPUT );
    pinMode( DIR1A , OUTPUT );
    pinMode( DIR2A , OUTPUT );
    pinMode( DIR1B , OUTPUT );
    pinMode( DIR2B , OUTPUT );
                         
    myservo.attach(6); // attaches the servo on pin 6 to the servo object
    initservo();
    
    fullStop(); //init's all previous outputs
    
    Serial.begin(USBSERIAL); // init USB Serial (console)
    Serial1.begin(BTGPSRATE); // init pin0/1 Serial (bluetooth)
    delay(1234);
    setupBT(3210);
    while(readBT() != CMD_STOP); // safety frist? ¯\(°_o)/¯ I DUNNO LOL
}

int runDelay = 0;
void loop() {
    Serial1.print('r'); // request data from droid
    char bt = readBT();
    if(bt == CMD_STOP)
        {
        fullStop();
        }
    else if(bt == CMD_DRIVE) {
        if(status == CMD_STOP) {
            status = CMD_DRIVE;
            digitalWrite(STANDBY, HIGH);
            digitalWrite(STATUS_LED, HIGH); // indicate status
        }
        x = readBT(); y = readBT(); z = readBT();
        int l = z + y, r = z - y;
        int L = (l < 0 ? -l : l)<<1;
        int R = (r < 0 ? -r : r)<<1;
        L = L > 255 ? 255 : L < 0 ? 0 : L;
        R = R > 255 ? 255 : R < 0 ? 0 : R;
        
        setMotor(MOTA, -l > 0 ? FORWARD : BACKWARD, L);
        setMotor(MOTB, -r > 0 ? FORWARD : BACKWARD, R);
    }
    if (millis()-oldmillis >20) {
      oldmillis=millis();
      if (status==CMD_DRIVE && hax0rspeed<HAX0RSPEEDMAX){
        hax0rspeed+=2;
      }
      if (status==CMD_STOP && hax0rspeed>HAX0RSPEEDMIN){
        hax0rspeed--;
      }
      myservo.write(hax0rspeed);

    }
}

}}}

m0wbot

m0wbot@OHM2013:

m0wb0t_2013.ino

   1 #define USBSERIAL 9600
   2 #define BTGPSRATE 38400
   3 
   4 #define SPDA             5          //Speed Control
   5 #define DIR1A            9          //Direction
   6 #define DIR2A            8          //Direction
   7 #define SPDB             3          //Speed Control
   8 #define DIR1B           12          //Direction
   9 #define DIR2B           11          //Direction
  10 #define STANDBY         10          //Standby Pin
  11 #define STATUS_LED      13          //Led Pin
  12 
  13 #define HAXXXOR          6          //spinning wheel of death ^^ macfags
  14 #define HAX0RSPEEDMIN    0          
  15 #define HAX0RSPEEDMAX    90
  16 
  17 #define MOTA             0
  18 #define MOTB             3
  19 
  20 #define FORWARD          1
  21 #define BACKWARD         2
  22 #define STOP             3
  23 
  24 #define CMD_DRIVE       'c'
  25 #define CMD_STOP        's'
  26 
  27 #include <Servo.h> 
  28 
  29 
  30 char MOTs[] = {SPDA, DIR1A, DIR2A, SPDB, DIR1B, DIR2B};
  31 char x,y,z;
  32 char status = CMD_STOP;
  33 Servo myservo;  // create servo object to control a servo 
  34 int hax0rspeed=0;
  35 int oldmillis;
  36 
  37 char readBT() { while(!Serial1.available()) delay(20); return (char)Serial1.read(); }
  38 
  39 void sendBT(char command[]) {
  40     Serial1.println();
  41     delay(250);
  42     Serial1.print(command);
  43     delay(250);
  44     Serial1.println();
  45     Serial1.flush();
  46     delay(250);
  47 }
  48 
  49 void setupBT(int setupdelay) {
  50     sendBT("+STWMOD=0");            // client mode
  51     sendBT("+STNA=m0wb0t");         // device name
  52     sendBT("+STAUTO=0");            // auto connect forbidden
  53     sendBT("+STOAUT=1");            // permit paired device to connect me
  54     sendBT("+STPIN=1337");          // bluetooth pin 
  55     delay(setupdelay);              // This delay is required.
  56     sendBT("+INQ=1");               // enable inqure the device 
  57     delay(setupdelay);              // This delay is required.
  58 }
  59 
  60 void stopMotor(char mot) { setMotor(mot, STOP, 0); }
  61 
  62 void setMotor(char mot, char dir, int spd) {
  63     analogWrite (MOTs[mot + 0], spd);
  64     digitalWrite(MOTs[mot + 1], dir & 0x01);
  65     digitalWrite(MOTs[mot + 2], dir & 0x02);
  66 }
  67 
  68 void fullStop() {
  69     digitalWrite(STANDBY,    LOW);
  70     digitalWrite(STATUS_LED, LOW); // indicate status
  71     stopMotor(MOTA);
  72     stopMotor(MOTB);
  73     status = CMD_STOP;
  74 }
  75 
  76 void servoup() {
  77     int pos = 0;   
  78     for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  79   {                                  // in steps of 1 degree 
  80     myservo.write(pos);              // tell servo to go to position in variable 'pos' 
  81     delay(20);
  82   } 
  83 }
  84 void servodown() {
  85   int pos = 180;
  86   for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  87   {                                
  88     myservo.write(pos);              // tell servo to go to position in variable 'pos' 
  89     delay(20);
  90   }
  91 }
  92 
  93 
  94   
  95 void initservo() {
  96   servoup();
  97   delay(50);
  98   servodown(); 
  99 }
 100 
 101 void setup() {
 102     pinMode( SPDA       , OUTPUT );
 103     pinMode( SPDB       , OUTPUT );
 104     pinMode( STANDBY    , OUTPUT );
 105     pinMode( STATUS_LED , OUTPUT );
 106     pinMode( DIR1A      , OUTPUT );
 107     pinMode( DIR2A      , OUTPUT );
 108     pinMode( DIR1B      , OUTPUT );
 109     pinMode( DIR2B      , OUTPUT );
 110                          
 111     myservo.attach(6);  // attaches the servo on pin 6 to the servo object 
 112     initservo();
 113     
 114     fullStop(); //init's all previous outputs
 115     
 116     Serial.begin(USBSERIAL);        // init USB Serial (console)
 117     Serial1.begin(BTGPSRATE);       // init pin0/1 Serial (bluetooth)
 118     delay(1234); 
 119     setupBT(3210);
 120     while(readBT() != CMD_STOP);    // safety frist? ¯\(°_o)/¯ I DUNNO LOL
 121 }
 122 
 123 int runDelay = 0;
 124 void loop() {
 125     Serial1.print('r');             // request data from droid
 126     char bt = readBT();
 127     if(bt == CMD_STOP)
 128         {
 129         fullStop();
 130         }
 131     else if(bt == CMD_DRIVE) {
 132         if(status == CMD_STOP) {
 133             status = CMD_DRIVE;
 134             digitalWrite(STANDBY,    HIGH);
 135             digitalWrite(STATUS_LED, HIGH); // indicate status
 136         }
 137         x = readBT(); y = readBT(); z = readBT();
 138         int l = z + y, r = z - y;
 139         int L = (l < 0 ? -l : l)<<1;
 140         int R = (r < 0 ? -r : r)<<1;
 141         L = L > 255 ? 255 : L < 0 ? 0 : L;
 142         R = R > 255 ? 255 : R < 0 ? 0 : R;
 143         
 144         setMotor(MOTA, -l > 0 ? FORWARD : BACKWARD, L);
 145         setMotor(MOTB, -r > 0 ? FORWARD : BACKWARD, R);
 146     }
 147     if (millis()-oldmillis >20) {
 148       oldmillis=millis();
 149       if (status==CMD_DRIVE && hax0rspeed<HAX0RSPEEDMAX){
 150         hax0rspeed+=2;
 151       }    
 152       if (status==CMD_STOP && hax0rspeed>HAX0RSPEEDMIN){
 153         hax0rspeed--;
 154       }    
 155       myservo.write(hax0rspeed);
 156 
 157     }
 158 }

13 images
(fire/m0wb0t)
IMG_0005.JPG
2013-08-01 16:07:46


CategoryProjects TagArduino