Mercurial > ~darius > hgwebdir.cgi > splitbrain
view shore/shore.ino @ 1:6f1cd84f8e23
Remove debugging from sea unit
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Sat, 11 Jul 2015 15:20:40 +0930 |
parents | fe0a2f223e10 |
children | 7d4ec58da1d8 |
line wrap: on
line source
#include <avr/pgmspace.h> #include <Servo.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include "log_lookup.h" // DFRobot I/O Expansion Shield V7 - http://www.dfrobot.com/wiki/index.php/IO_Expansion_Shield_for_Arduino_V7_SKU:DFR0265 // 2xPS3 joysticks connected like so // Joy 1 Horizontal - Left/right - AD0 // Joy 1 Vertical - Forward/back - AD1 // Joy 1 Button - Unused - D2 // Joy 2 Horizontal - Unused - AD2 // Joy 2 Vertical - Up/down - AD3 // Joy 2 Button - Unused - D3 // LCD panel LiquidCrystal_I2C lcd(0x27, 16, 2); // I/O expander is at 0x27, LCD is 16x2 void setup() { int byte; Serial.begin(115200); // Set joystick button pins as inputs pinMode(7, INPUT); pinMode(8, INPUT); lcd.init(); lcd.backlight(); lcd.print("Hello world!"); } void loop() { int joy1X, joy1Y, joy2X, joy2Y, but1, but2; int lint, rint, vint, ldir, rdir, vdir, ethrot; float k, l, r, v, x, y; char lcdbuf[16 + 1]; // Buffer 1 line k = 1.5; joy1X = analogRead(A0); joy1Y = analogRead(A1); but1 = !digitalRead(7); // Buttons are active low joy2X = analogRead(A2); joy2Y = analogRead(A3); but2 = !digitalRead(8); #if 0 Serial.print("Joy 1 X: "); Serial.print(joy1X); Serial.print(" "); Serial.print("Y: "); Serial.print(joy1Y); Serial.print(" Button: "); Serial.println(but1); Serial.print("Joy 2 X: "); Serial.print(joy2X); Serial.print(" "); Serial.print("Y: "); Serial.print(joy2Y); Serial.print(" Button: "); Serial.println(but2); #endif // Create deadband in the centre because they don't sit at 512 if (joy1X > 500 && joy1X < 510) // Sits at 505 joy1X = 512; if (joy1Y > 516 && joy1Y < 526) // Sits at 521 joy1Y = 512; if (joy2X > 500 && joy2X < 510) // Sits at 505 joy2X = 512; if (joy2Y > 520 && joy2Y < 530) // Sits at 525 joy2Y = 512; // Mix 'joystick' input to left/right thrust (elevon mixing) // http://eastbay-rc.blogspot.com.au/2011/05/elevon-v-tail-mixing-calculations.html x = (joy1X - 512.0) / 512.0; // More positive = right y = (joy1Y - 512.0) / 512.0; // More positive = forward, convert to -1..1 l = 1 * (x / 2 + y / 2); r = -1 * (x / 2 - y / 2); v = ((float)(joy2Y - 512) / 512.0); // Apply some gain l *= 2.2; r *= 2.2; // Limit if (l > 1) l = 1; if (l < -1) l = -1; if (r > 1) r = 1; if (r < -1) r = -1; if (v < -1) v = -1; if (v > 1) v = 1; // Map values to -255..255 lint = l * 255; rint = r * 255; vint = v * 255; // Apply log transfer function ldir = lint < 0 ? 0 : 1; // 0 = reverse, 1 = forward lint = pgm_read_byte_near(log_lookup + abs(lint)); rdir = rint < 0 ? 0 : 1; rint = pgm_read_byte_near(log_lookup + abs(rint)); vdir = vint < 0 ? 0 : 1; vint = pgm_read_byte_near(log_lookup + abs(vint)); #if 0 Serial.print("l = "); Serial.print(l); Serial.print(" "); Serial.print(lint); Serial.print(" "); Serial.print(ldir); Serial.print(" r = "); Serial.print(r); Serial.print(" "); Serial.print(rint); Serial.print(" "); Serial.print(r); Serial.print(" v = "); Serial.print(vint); Serial.print(" "); Serial.println(vdir); #else Serial.print("L:"); Serial.print(lint * (ldir == 0 ? -1 : 1)); Serial.print(" R:"); Serial.print(rint * (rdir == 0 ? -1 : 1)); Serial.print(" V:"); Serial.print(vint * (vdir == 0 ? -1 : 1)); Serial.println(); #endif snprintf(lcdbuf, sizeof(lcdbuf) - 1, "L%c%3dR%c%3dV%c%3d", ldir == 0 ? '-' : '+', lint, rdir == 0 ? '-' : '+', rint, vdir == 0 ? '-' : '+', vint); lcd.setCursor(0, 0); lcd.print(lcdbuf); snprintf(lcdbuf, sizeof(lcdbuf) - 1, " B1: %d B2: %d ", but1, but2); lcd.setCursor(0, 1); lcd.print(lcdbuf); delay(200); } /* * Local variables: * mode: c++ * End: */