Advertisement
UnaClocker

Kartbot Steering Wheel

Mar 11th, 2012
643
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.69 KB | None | 0 0
  1. // Kartbot Steering Wheel Controller
  2. // Teensy MCU in a Logitech Momo wheel with paddles and buttons
  3. // 6 buttons, 2 paddles, 2 LED's.
  4. // Buttons numbered top to bottom
  5. // Communicates via i2c with Teensy++ controller in the back of the electric go-kart.
  6.  
  7. #include <Wire.h>
  8.  
  9. #define leftOne 21
  10. #define leftTwo 20
  11. #define leftThree 19
  12. #define rightOne 18
  13. #define rightTwo 17
  14. #define rightThree 16
  15. #define leftLED 15
  16. #define rightLED 14
  17. #define leftPaddle 13
  18. #define rightPaddle 12
  19. byte buttonStates=1;
  20.  
  21. void setup() {
  22.   Serial.begin(9600);
  23.   Wire.begin(2);
  24.   Wire.onRequest(sendData);
  25.   Wire.onReceive(receiveData);
  26.   pinMode(leftOne, INPUT);
  27.   pinMode(leftTwo, INPUT);
  28.   pinMode(leftThree, INPUT);
  29.   pinMode(rightOne, INPUT);
  30.   pinMode(rightTwo, INPUT);
  31.   pinMode(rightThree, INPUT);
  32.   pinMode(leftLED, OUTPUT);
  33.   pinMode(rightLED, OUTPUT);
  34.   pinMode(leftPaddle, INPUT);
  35.   pinMode(rightPaddle, INPUT);
  36.   digitalWrite(leftOne, HIGH);
  37.   digitalWrite(leftTwo, HIGH);
  38.   digitalWrite(leftThree, HIGH);
  39.   digitalWrite(rightOne, HIGH);
  40.   digitalWrite(rightTwo, HIGH);
  41.   digitalWrite(rightThree, HIGH);
  42.   digitalWrite(leftPaddle, HIGH);
  43.   digitalWrite(rightPaddle, HIGH);
  44. }
  45.  
  46.  
  47. void loop() {
  48.   if (!digitalRead(rightPaddle)) {
  49.     buttonStates |= 0x1;
  50.     buttonStates &= ~0x2;
  51. //    Serial.println(buttonStates);
  52.   }
  53.   if (!digitalRead(leftPaddle)) {
  54.     buttonStates |= 0x2;
  55.     buttonStates &= ~0x1;
  56. //    Serial.println(buttonStates);
  57.   }
  58.   if (!digitalRead(rightOne)) {
  59.     buttonStates |= 0x4;
  60.     } else {
  61.       buttonStates &= ~0x4;
  62.       }
  63.   if (!digitalRead(rightTwo)) {
  64.     buttonStates |= 0x8;
  65.     } else {
  66.       buttonStates &= ~0x8;
  67.     }      
  68.   if (!digitalRead(rightThree)) {
  69.     buttonStates |= 0x10;
  70.     } else {
  71.       buttonStates &= ~0x10;
  72.     }
  73.   if (!digitalRead(leftOne)) {
  74.     buttonStates |= 0x20;
  75.     } else {
  76.       buttonStates &= ~0x20;
  77.     }
  78.   if (!digitalRead(leftTwo)) {
  79.     buttonStates |= 0x40;
  80.     } else {
  81.       buttonStates &= ~0x40;
  82.     }
  83.   if (!digitalRead(leftThree)) {
  84.     buttonStates |= 0x80;
  85.     } else {
  86.       buttonStates &= ~0x80;
  87.     }
  88. //    Serial.println(buttonStates);
  89. }
  90.  
  91. void sendData() {
  92.   Wire.write(buttonStates); // Seriously, it's THAT simple! Send a number between 1 and 254 to indicate which buttons are pressed.
  93. }
  94.  
  95. void receiveData(int howMany) { // Rear controller will control LED's to indicate forward or backward operation.
  96.   while (Wire.available())
  97.   {
  98.     byte x = Wire.read();
  99.     if (x) { // True for forward, false for reverse
  100.        digitalWrite(leftLED, LOW);
  101.        digitalWrite(rightLED, HIGH);
  102.     } else {
  103.       digitalWrite(leftLED, HIGH);
  104.       digitalWrite(rightLED, LOW);
  105.   }
  106. }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement