Beispiel #1
0
void Com::loop(int time) {
    while(Serial.available()>0) {
        char cmd = Serial.read();
        switch(cmd) {
        case 't':
            temp = readLong();
            sendOk();
            Serial.print("temp = ");
            Serial.println(temp);
            break;

        case 's': // read settings
            sendSettings();
            break;

        case 'P': // write PID
            updatePid();
            break;
        case 'G': // write Gain
            updateFloat(&g_userControlGain);
            break;
        case 'W': // write Windup Guard
            updateFloat(&g_pidWindupGuard);
            break;
        default:
            sendError();
            break;
        }
    }

    {
        Telem telem;
        sendPacketStart(PACKET_TELEMETRY);
        telem.Yaw = g_telemetryCom.Yaw;
        telem.Pitch = g_telemetryCom.Pitch;
        telem.Roll = g_telemetryCom.Roll;
        telem.MotorL = g_motorLeft.get();
        telem.MotorR = g_motorRight.get();
        telem.MotorF = g_motorFront.get();
        telem.MotorB = g_motorBack.get();
        telem.BatteryLevel = g_batteryManager.getLastReading();
        telem.UserElev = g_receiverCom.pos[RECEIVER_Throttle];
        telem.UserPitch = g_receiverCom.pos[RECEIVER_Elevator];
        telem.UserRoll = g_receiverCom.pos[RECEIVER_Aileron];
        telem.UserYaw = g_receiverCom.pos[RECEIVER_Rudder];
        telem.loopCount = g_loopCount;
        Serial.write((byte*)&telem, sizeof(Telem));
    }

    if(time - _lastSlowTime > 1000) {
        _lastSlowTime = time;

        Serial.print("RECV: ");
        Serial.print(g_receiverCom.hasSignal ? "HAS SIGNAL " : "NO SIGNAL  ");
        for(int i=0; i<SERVO_INPUT_CHANNELS; i++) {
            if(i != 0) {
                Serial.print(", ");
            }
            Serial.print(g_receiverCom.pos[i]);
        }

        Serial.print(" TELEM: ");
        Serial.print(g_telemetryCom.Yaw);
        Serial.print(", ");
        Serial.print(g_telemetryCom.Pitch);
        Serial.print(", ");
        Serial.print(g_telemetryCom.Roll);

        Serial.print(" MOTOR: ");
        Serial.print(g_motorFront.get());
        Serial.print(", ");
        Serial.print(g_motorBack.get());
        Serial.print(", ");
        Serial.print(g_motorLeft.get());
        Serial.print(", ");
        Serial.print(g_motorRight.get());

        Serial.print(" PID: ");
        Serial.print(g_rollPid.getLastPosition());
        Serial.print(", ");
        Serial.print(g_pitchPid.getLastPosition());
        Serial.print(", ");
        Serial.print(g_yawPid.getLastPosition());

        Serial.print(" BAT: ");
        Serial.print(g_batteryManager.getLastReading());
        Serial.println(g_batteryManager.getIsWarning() ? " warning" : " ");
    }
}