Advertisement
otakus

Untitled

Oct 23rd, 2012
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.03 KB | None | 0 0
  1. #include <XBOXUSB.h>
  2. #include <PS3BT.h>
  3. #include <Wire.h>
  4. #include <LCD.h>
  5. #include <LiquidCrystal_I2C.h>
  6.  
  7. #define LCD_UPDATE 50
  8. #define TX_INTERVAL 10
  9.  
  10. #define deadzone_xbox 15
  11. #define offset_xbox 7
  12. #define deadzone_ps3 7
  13. #define offset_ps3 2
  14.  
  15. LiquidCrystal_I2C   lcd(0x27,2,1,0,4,5,6,7);
  16.  
  17. USB Usb;
  18.  
  19. XBOXUSB Xbox(&Usb);
  20. PS3BT PS3(&Usb,0x00,0x10,0x60,0x57,0xA0,0x48);
  21.  
  22. int vals[4];
  23. int pos, negOff, posOff, l2, r2;
  24.  
  25. String buffout="";
  26. String oldbuffout="";
  27.  
  28. String inStr;
  29. char buff[15];
  30. char inChar;
  31.  
  32. float batt[4];
  33. boolean cutoff=false;
  34. int temp;
  35.  
  36. int index;
  37. int nextIndex;
  38.  
  39. int lcdTimer;
  40. double old_tx;
  41.  
  42. void initLCD(){
  43.   lcd.begin (16,2);
  44.   lcd.setBacklightPin(3,POSITIVE);
  45.   lcd.setBacklight(HIGH);
  46.   lcd.print("Starting...");
  47. }
  48.  
  49. /*----------------------------------------Main loop--------------------------------------*/
  50.  
  51. void setup() {
  52.   initLCD();
  53.   Serial.begin(115200);
  54.   Serial1.begin(57600);
  55.   if (Usb.Init() == -1) {
  56.     Serial.print(F("\r\nOSC did not start"));
  57.     while(1);
  58.   }  
  59. }
  60.  
  61. void loop() {
  62.   Usb.Task();
  63.   getControllerInputs();
  64.   sendData();
  65.   parseData();
  66.   displayLCD();
  67.   //delay(10);
  68. }
  69.  
  70. /*------------------------------------Main Functions-----------------------------------------*/
  71.  
  72. void getControllerInputs(){
  73.   if(Xbox.Xbox360Connected) {
  74.     calcXboxInput();
  75.   }else if(PS3.PS3Connected) {
  76.     calcPs3Input();
  77.   }
  78.   else{
  79.     vals[0]=127;vals[1]=0;vals[2]=0,vals[3]=0;
  80.   }
  81. }
  82.  
  83. void sendData(){
  84.   if(millis()>=(old_tx+TX_INTERVAL)){
  85.     oldbuffout=buffout;
  86.     buffout="";
  87.     buffout+=pad(vals[0]);
  88.     buffout+=pad(vals[1]);
  89.     buffout+=pad(vals[2],2);
  90.     buffout+=vals[3];
  91.     buffout+="\n";
  92.     if(oldbuffout!=buffout){
  93.       Serial.print(buffout);
  94.     }    
  95.     Serial1.print(buffout);
  96.     old_tx=millis();
  97.   }
  98. }
  99.  
  100. /*-------------------------------------Sub functions--------------------------------------*/
  101.  
  102. void calcXboxInput(){
  103.   pos=Xbox.getAnalogHat(LeftHatX_XBOX)>>8;
  104.   negOff=offset_xbox-deadzone_xbox;
  105.   posOff=offset_xbox+deadzone_xbox;
  106.   l2=Xbox.getButton(L2_XBOX);
  107.   r2=Xbox.getButton(R2_XBOX);
  108.  
  109.   vals[0]=map(min(pos,negOff),negOff,-128,127,0)+map(max(pos,posOff),posOff,127,0,128);
  110.   vals[1]=((l2>0)? l2: r2);
  111.   vals[2]=((l2>0)? 1: 0);
  112.   vals[3]=Xbox.getButton(B);
  113. }
  114.  
  115. void calcPs3Input(){
  116.   pos=PS3.getAnalogHat(LeftHatX)-128;
  117.   negOff=offset_ps3-deadzone_ps3;
  118.   posOff=offset_ps3+deadzone_ps3;
  119.   l2=PS3.getAnalogButton(L2_ANALOG);
  120.   r2=PS3.getAnalogButton(R2_ANALOG);
  121.  
  122.   vals[0]=map(min(pos,negOff),negOff,-128,127,0)+map(max(pos,posOff),posOff,127,0,128);
  123.   vals[1]=((l2>0)? l2: r2);
  124.   vals[2]=((l2>0)? 1: 0);
  125.   vals[3]=PS3.getButton(CIRCLE);
  126. }
  127.  
  128. String pad(int number){
  129.   return pad(number,3);
  130. }
  131. String pad(int number,int digits){
  132.   String ret="";
  133.   for(int i=0; i < (digits-1) - byte(log10(number)); i++)
  134.     ret+='0';
  135.   ret+=number;
  136.   return ret;
  137. }
  138.  
  139.  
  140. void parseData(){
  141.   if(Serial1.available()>17){
  142.     inStr="";
  143.     do{
  144.       inChar=Serial1.read();
  145.       inStr+=inChar;
  146.     }while(inChar!='\n');
  147.     if(inStr.length()==18){
  148.       inStr.substring(0,3).toCharArray(buff,4);
  149.       batt[0]=atoi(buff)/100.00;
  150.       inStr.substring(3,6).toCharArray(buff,4);
  151.       batt[1]=atoi(buff)/100.00;
  152.       inStr.substring(6,9).toCharArray(buff,4);
  153.       batt[2]=atoi(buff)/100.00;
  154.       inStr.substring(9,12).toCharArray(buff,4);
  155.       batt[3]=atoi(buff)/100.00;
  156.       inStr.substring(12,13).toCharArray(buff,2);
  157.       cutoff=atoi(buff);
  158.       inStr.substring(13,17).toCharArray(buff,5);
  159.       temp=atoi(buff);
  160.     }
  161.   }
  162. }
  163.  
  164. void displayLCD(){
  165.   //Serial.println(lcdTimer);
  166.   if(lcdTimer==LCD_UPDATE){
  167.     lcd.clear();
  168.     //lcd.home();
  169.     lcd.setCursor( 0, 0);
  170.     lcd.print(batt[0]);
  171.     lcd.setCursor( 5, 0);
  172.     lcd.print(batt[1]);
  173.     lcd.setCursor( 0, 1);
  174.     lcd.print(batt[2]);
  175.     lcd.setCursor( 5, 1);
  176.     lcd.print(batt[3]);
  177.     lcd.setCursor( 10, 0);
  178.     lcd.print(temp);  
  179.     lcd.setCursor( 10, 1);
  180.     lcd.print(((cutoff)? "STOP!!":"Safe"));
  181.     lcdTimer=0;
  182.   }
  183.   lcdTimer++;
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement