Explorar o código

Initial commit

from sparkfun example
Etienne Landon %!s(int64=6) %!d(string=hai) anos
achega
6006e39777
Modificáronse 1 ficheiros con 99 adicións e 0 borrados
  1. 99 0
      CG_MarioKart.ino

+ 99 - 0
CG_MarioKart.ino

@@ -0,0 +1,99 @@
+/*
+ RC PulseIn Joystick Servo Control
+ By: Nick Poole
+ SparkFun Electronics
+ Date: 5
+ License: CC-BY SA 3.0 - Creative commons share-alike 3.0
+ use this code however you'd like, just keep this license and
+ attribute. Let me know if you make hugely, awesome, great changes.
+ */
+
+const int ch1_pin = 10 ;
+const int ch2_pin = 11 ;
+
+int ch1; // Here's where we'll keep our channel values
+int ch2;
+int ch3;
+
+int move; // Forward/Back speed
+int turn; // Turning Factor
+
+int pwm_a = 4;  //PWM control for motor outputs
+int pwm_b = 7;  //PWM control for motor outputs
+int dir_a = 5;  //direction control for motor outputs
+int dir_b = 6;  //direction control for motor outputs
+
+int threshold = 30 ;
+
+
+int middleThreshold (int RCvalue, int threshold) {  // 
+
+  if ( (RCvalue < 1500 + threshold) && (RCvalue > 1500 - threshold) ) { RCvalue = 1500;}
+  return RCvalue ;
+  
+}
+
+void setup() {
+
+pinMode(ch1_pin, INPUT); // Set our input pins as such
+pinMode(ch2_pin, INPUT);
+
+Serial.begin(9600); // Pour a bowl of Serial (for debugging)
+
+  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
+  pinMode(pwm_b, OUTPUT);
+  pinMode(dir_a, OUTPUT);
+  pinMode(dir_b, OUTPUT);
+
+  analogWrite(pwm_a, 0);  
+  analogWrite(pwm_b, 0);
+}
+
+
+void loop() {
+  
+  ch1 = pulseIn(ch1_pin, HIGH, 25000); // Read the pulse width of  
+  ch2 = pulseIn(ch2_pin, HIGH, 25000); // each channel
+
+  ch1 = middleThreshold(ch1, threshold);
+  ch2 = middleThreshold(ch2, threshold);
+  
+
+  move = map(ch2, 1000,2000, -255, 255); //center over zero
+  move = constrain(move, -255, 255); //only pass values whose absolutes are
+                                   //valid pwm values
+
+  /*What we're doing here is determining whether we want to move
+  forward or backward*/
+  if(move>0){digitalWrite(dir_a, 1);digitalWrite(dir_b, 1);};
+  if(move<0){digitalWrite(dir_a, 0);digitalWrite(dir_b, 0); move=abs(move);};
+  
+  /*Here we're determining whether a left or a right turn is being 
+  executed*/
+  turn = map(ch1,1000,2000,-255,255);
+  turn = constrain(turn, -255, 255);
+  
+  /*This is where we do some mixing, by subtracting our "turn" 
+  variable from the appropriate motor's speed we can execute
+  a turn in either direction*/
+  if(turn>=0){analogWrite(pwm_b, move-turn); analogWrite(pwm_a, move);};
+  if(turn<0){turn=abs(turn); analogWrite(pwm_a, move-turn); analogWrite(pwm_b, move);};
+  
+  
+  Serial.print("move:"); //Serial debugging stuff
+  Serial.println(move);
+  
+  Serial.print("turn:"); //Serial debugging stuff
+  Serial.println(turn);
+  
+  Serial.print("move-turn:"); //Serial debugging stuff
+  Serial.println(move-turn);
+  
+  Serial.println(); //Serial debugging stuff
+  Serial.println();
+  Serial.println();
+
+}
+
+
+