Components and supplies
78S12
heatsinks
Switch
7812
Arduino UNO
1 L293D motor driver
battery connector for 8 1v5 AA batteries with 9V battery plug
XBOX360 Receiver
XBOX360 Wireless Controller
Power Plug
Arduino USB Host Shield
Project description
Code
Github
https://github.com/felis/USB_Host_Shield_2.0
Github
https://github.com/felis/USB_Host_Shield_2.0
Code snippet #1
arduino
1/* 2 Example sketch for the Xbox Wireless Reciver library - developed by Kristian Lauszus 3 It supports up to four controllers wirelessly 4 For more information see the blog post: http://blog.tkjelectronics.dk/2012/12/xbox-360-receiver-added-to-the-usb-host-library/ or 5 send me an e-mail: kristianl@tkjelectronics.com 6 */ 7 8#include <XBOXRECV.h> 9// Satisfy IDE, which only needs to see the include statment in the ino. 10#ifdef dobogusinclude 11#include <spi4teensy3.h> 12#endif 13 14USB Usb; 15XBOXRECV Xbox(&Usb); 16 17#define motorPinOne 5 //The chosen pin must have PWM 18#define motorPinTwo 6 //The chosen pin must have PWM 19 20#define motor2PinOne 4 21#define motor2PinTwo 7 22#define BRAKE 2 23 24/* Define the rotational speed of the motor. MUST be between 0 and 255. */ 25int pulse = 0; 26int forward = 0; 27int brake_on = 0; 28 29 30void setup() { 31 TCCR1B = TCCR1B & 0b11111000 | 0x02; 32 Serial.begin(115200); 33 if (Usb.Init() == -1) { 34 Serial.print(F("\ \ 35OSC did not start")); 36 while(1); //halt 37 motors_stop(); 38 center(); 39 } 40 Serial.print(F("\ \ 41Xbox Wireless Receiver Library Started")); 42 pinMode (motorPinOne, OUTPUT); 43 pinMode (motorPinTwo, OUTPUT); 44 pinMode (motor2PinOne, OUTPUT); 45 pinMode (motor2PinTwo, OUTPUT); 46 pinMode (BRAKE, OUTPUT); 47 48 digitalWrite (BRAKE, LOW); 49} 50 51void loop() { 52 Usb.Task(); 53 if(Xbox.XboxReceiverConnected) 54 { 55 for(uint8_t i=0;i<4;i++) 56 { 57 if(Xbox.getButtonPress(L2, i)) 58 { 59 Serial.print("L2: "); 60 Serial.print(Xbox.getButtonPress(L2, i)); 61 pulse = Xbox.getButtonPress(L2, i); 62 forward = 0; 63 clockwise(); 64 } 65 66 if(Xbox.getButtonPress(R2, i)) 67 { 68 Serial.print("R2: "); 69 Serial.println(Xbox.getButtonPress(R2, i)); 70 pulse = Xbox.getButtonPress(R2, i); 71 forward = 1; 72 counterClockwise(); 73 } 74 75 if(Xbox.getAnalogHat(LeftHatX, i) > 7500 || Xbox.getAnalogHat(LeftHatX, i) < -7500 || Xbox.getAnalogHat(LeftHatY, i) > 7500 || Xbox.getAnalogHat(LeftHatY, i) < -7500 || Xbox.getAnalogHat(RightHatX, i) > 7500 || Xbox.getAnalogHat(RightHatX, i) < -7500 || Xbox.getAnalogHat(RightHatY, i) > 7500 || Xbox.getAnalogHat(RightHatY, i) < -7500) 76 { 77 if(Xbox.getAnalogHat(LeftHatX, i) > 7500) 78 { 79 Serial.print(F("LeftHatX: ")); 80 Serial.print(Xbox.getAnalogHat(LeftHatX, i)); 81 Serial.print("\ "); 82 83 if (Xbox.getAnalogHat(LeftHatX, i) > 26000) 84 turn_right(); 85 else 86 center(); 87 } 88 89 if (Xbox.getAnalogHat(LeftHatX, i) < -7500) 90 { 91 Serial.print(F("LeftHatX: ")); 92 Serial.print(Xbox.getAnalogHat(LeftHatX, i)); 93 Serial.print("\ "); 94 95 if (Xbox.getAnalogHat(LeftHatX, i) < -26000) 96 turn_left(); 97 else 98 center(); 99 } 100 101 if(Xbox.getAnalogHat(LeftHatY, i) > 7500 || Xbox.getAnalogHat(LeftHatY, i) < -7500) 102 { 103 Serial.print(F("LeftHatY: ")); 104 Serial.print(Xbox.getAnalogHat(LeftHatY, i)); 105 Serial.print("\ "); 106 } 107 108 if(Xbox.getAnalogHat(RightHatX, i) > 7500) 109 { 110 Serial.print(F("RightHatX: ")); 111 Serial.print(Xbox.getAnalogHat(RightHatX, i)); 112 Serial.print("\ "); 113 } 114 115 if (Xbox.getAnalogHat(RightHatX, i) < -7500) 116 { 117 Serial.print(F("RightHatX: ")); 118 Serial.print(Xbox.getAnalogHat(RightHatX, i)); 119 Serial.print("\ "); 120 } 121 122 if(Xbox.getAnalogHat(RightHatY, i) > 7500 || Xbox.getAnalogHat(RightHatY, i) < -7500) { 123 Serial.print(F("RightHatY: ")); 124 Serial.print(Xbox.getAnalogHat(RightHatY, i)); 125 } 126 Serial.println(); 127 } 128 129 if(Xbox.getButtonClick(UP, i)) 130 { 131 Serial.println(F("Up")); 132 } 133 134 if(Xbox.getButtonClick(DOWN, i)) 135 { 136 Serial.println(F("Down")); 137 } 138 139 if(Xbox.getButtonClick(LEFT, i)) 140 { 141 Serial.println(F("Left")); 142 } 143 144 if(Xbox.getButtonClick(RIGHT, i)) 145 { 146 Serial.println(F("Right")); 147 } 148 149 if(Xbox.getButtonClick(START, i)) 150 { 151 Serial.println(F("Start")); 152 } 153 154 if(Xbox.getButtonClick(BACK, i)) 155 { 156 Serial.println(F("Back")); 157 } 158 159 if(Xbox.getButtonClick(L3, i)) 160 Serial.println(F("L3")); 161 162 if(Xbox.getButtonClick(R3, i)) 163 Serial.println(F("R3")); 164 165 if(Xbox.getButtonClick(L1, i)) 166 Serial.println(F("L1")); 167 168 if(Xbox.getButtonClick(R1, i)) 169 Serial.println(F("R1")); 170 171 if(Xbox.getButtonClick(XBOX, i)) 172 { 173 Xbox.setLedMode(ROTATING, i); 174 Serial.println(F("Xbox")); 175 } 176 177 if(Xbox.getButtonClick(A, i)) 178 { 179 Serial.println(F("A")); 180 } 181 182 if(Xbox.getButtonClick(B, i)) 183 { 184 Serial.println(F("B")); 185 digitalWrite(BRAKE, HIGH); 186 brake_on = 1; 187 pulse = 100; 188 189 if (forward) 190 clockwise(); 191 else 192 counterClockwise(); 193 } 194 195 if(Xbox.getButtonClick(X, i)) 196 Serial.println(F("X")); 197 198 if(Xbox.getButtonClick(Y, i)) 199 { 200 Serial.println(F("Y")); 201 motors_stop(); 202 } 203 } 204 } 205 delay(1); 206} 207 208void clockwise() 209{ 210 Serial.print("Rotation is clockwise and speed is "); 211 Serial.println(pulse); 212 analogWrite(motorPinOne,pulse); // set leg 1 of the H-bridge low 213 analogWrite(motorPinTwo,0); 214 215 if (brake_on) 216 { 217 delay(600); 218 digitalWrite(BRAKE, LOW); 219 brake_on = 0; 220 pulse = 0; 221 } 222} 223 224void counterClockwise() 225{ 226 Serial.print("Rotation is counter-clockwise and speed is "); 227 Serial.println(pulse); 228 analogWrite(motorPinOne,0); // set leg 1 of the H-bridge low 229 analogWrite(motorPinTwo,pulse); 230 231 if (brake_on) 232 { 233 delay(600); 234 digitalWrite(BRAKE, LOW); 235 brake_on = 0; 236 pulse = 0; 237 } 238 239 240} 241 242void turn_left() 243{ 244 digitalWrite(motor2PinOne,HIGH); // set leg 1 of the H-bridge low 245 digitalWrite(motor2PinTwo,LOW); 246} 247 248void turn_right() 249{ 250 digitalWrite(motor2PinOne,LOW); // set leg 1 of the H-bridge low 251 digitalWrite(motor2PinTwo,HIGH); 252} 253 254void motors_stop() 255{ 256 analogWrite(motorPinOne,0); 257 analogWrite(motorPinTwo,0); 258 pulse = 0; 259} 260 261void center() 262{ 263 digitalWrite(motor2PinOne, LOW); 264 digitalWrite(motor2PinTwo, LOW); 265}
Comments
Only logged in users can leave comments