//Title: quad_trans //Programmer: Joe MOrrow //Date: June 14, 2011 //Contact: jmmorrow@mit.edu //Description: Code for pilot's transmitter (and receiver) #include LiquidCrystal lcd(12,11,7,6,5,4); int throttlePin = A0; int rollPin = A1; int pitchPin = A2; int yawPin = A3; int ctrlPin = A4; int killPin = A5; float throttle; float roll; float pitch; float yaw; //float throttleOld = 0.0; //float rollOld = 0.0; //float pitchOld = 0.0; //float yawOld = 0.0; // //float dT = 0.01; //float pole = 4; float deg = 180.0/3.14159; void setup() { pinMode(throttlePin, INPUT); pinMode(rollPin, INPUT); pinMode(pitchPin, INPUT); pinMode(yawPin, INPUT); pinMode(ctrlPin, INPUT); pinMode(killPin, INPUT); lcd.begin(16,2); lcd.clear(); Serial.begin(9600); } void loop() { // delay(5); int setting1 = digitalRead(killPin); float setting2 = digitalRead(ctrlPin); if (setting1 == HIGH) { throttle = analogRead(throttlePin); throttle = mapf(throttle,216.0,1010.0,400.0,700.0); } else { throttle = 0.0; } roll = analogRead(rollPin); pitch = analogRead(pitchPin); yaw = analogRead(yawPin); roll = mapf(roll,167.0,1023.0,-0.1,0.1); pitch = mapf(pitch,186.0,942.0,-0.1,0.1); yaw = mapf(yaw,1023.0,120.0,-0.1,0.1); // (throttle*2 + throttleOld/dT)/((1/dT) + 2); // (roll*pole + rollOld/dT)/((1/dT) + pole); // (pitch*pole + pitchOld/dT)/((1/dT) + pole); // (yaw*pole + yawOld/dT)/((1/dT) + pole); //allocate 5 characters per float Serial.print(";"); Serial.print(throttle/100,3); Serial.print(","); if (roll < 0.0) { Serial.print(roll*10,2); } else { Serial.print(roll*10,3); } Serial.print(","); if (pitch < 0.0) { Serial.print(pitch*10,2); } else { Serial.print(pitch*10,3); } Serial.print(","); if (yaw < 0.0) { Serial.print(yaw*10,2); } else { Serial.print(yaw*10,3); } Serial.print(","); Serial.print(setting2,3); Serial.print(","); Serial.print(setting2,3); Serial.println(); lcd.clear(); lcd.setCursor(0,0); lcd.print(throttle/10.0,2); if (roll >= 0.0) { lcd.setCursor(1,1); } else { lcd.setCursor(0,1); } lcd.print(roll*180.0/3.14159,2); if (pitch >= 0.0) { lcd.setCursor(11,0); } else { lcd.setCursor(10,0); } lcd.print(pitch*10*110,2); if (yaw >= 0.0) { lcd.setCursor(11,1); } else { lcd.setCursor(10,1); } lcd.print(yaw*10*110,2); // throttleOld = throttle; // rollOld = roll; // pitchOld = pitch; // yawOld = yaw; // delay(10); } ///////////////////////////////////////////////////// float mapf(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }