void loop() { // Process AI if (Settings[S_ENABLEADC]){ //temperature=(analogRead(temperaturePin)-102)/2.048; // Does someone use this ATM?? if (!Settings[S_MAINVOLTAGE_VBAT]){ static uint16_t ind = 0; static uint32_t voltageRawArray[8]; voltageRawArray[(ind++)%8] = analogRead(voltagePin); uint16_t voltageRaw = 0; for (uint16_t i=0;i<8;i++) voltageRaw += voltageRawArray[i]; voltage = float(voltageRaw) * Settings[S_DIVIDERRATIO] /1023; } if (!Settings[S_VIDVOLTAGE_VBAT]) { static uint16_t ind = 0; static uint32_t voltageRawArray[8]; voltageRawArray[(ind++)%8] = analogRead(vidvoltagePin); uint16_t voltageRaw = 0; for (uint16_t i=0;i<8;i++) voltageRaw += voltageRawArray[i]; vidvoltage = float(voltageRaw) * Settings[S_VIDDIVIDERRATIO] /1023; } if (!Settings[S_MWRSSI] && !Settings[S_PWMRSSI]) { rssiADC = analogRead(rssiPin)/4; // RSSI Readings, rssiADC=0 to 1023/4 (avoid a number > 255) } if (!Settings[S_MWAMPERAGE]) { int16_t currsensOffSet=(Settings[S_CURRSENSOFFSET_L] | (Settings[S_CURRSENSOFFSET_H] << 8)); // Read OffSetH/L amperageADC = analogRead(amperagePin); if (amperageADC > currsensOffSet) amperageADC=((amperageADC-currsensOffSet)*4.8828)/Settings[S_CURRSENSSENSITIVITY]; // [A] Positive Current flow (512...1023) or Unidir (0...1023) else amperageADC=((currsensOffSet-amperageADC)*4.8828)/Settings[S_CURRSENSSENSITIVITY]; // [A] Negative Current flow (0...512) } } if (Settings[S_MWAMPERAGE]) { amperagesum = MW_ANALOG.pMeterSum; amperage = MW_ANALOG.Amperage /100; } if (Settings[S_MWRSSI]) { rssiADC = MW_ANALOG.Rssi/4; // RSSI from MWii, rssiADC=0 to 1023/4 (avoid a number > 255) } if (Settings[S_PWMRSSI] && !Settings[S_MWRSSI]){ rssiADC = pulseIn(PWMrssiPin, HIGH,15000)/Settings[S_PWMRSSIDIVIDER]; // Reading W/time out (microseconds to wait for pulse to start: 15000=0.015sec) } // Blink Basic Sanity Test Led at 1hz - this stuff introduces strange behavior on my system if(tenthSec>10) digitalWrite(7,HIGH); else digitalWrite(7,LOW); //--------------- Start Timed Service Routines --------------------------------------- uint16_t currentMillis = millis(); if((currentMillis - previous_millis_low) >= lo_speed_cycle) // 10 Hz (Executed every 100ms) { previous_millis_low = currentMillis; tenthSec++; TempBlinkAlarm++; Blink10hz=!Blink10hz; if(!fontMode) blankserialRequest(MSP_ATTITUDE); if(Settings[L_RSSIPOSITIONDSPL]) calculateRssi(); } // End of slow Timed Service Routine (100ms loop) if((currentMillis - previous_millis_high) >= hi_speed_cycle) // 20 Hz (Executed every 50ms) { previous_millis_high = currentMillis; calculateTrip(); // Speed integration on 50msec if (!Settings[S_MWAMPERAGE]) calculateAmperage(); // Amperage and amperagesum integration on 50msec uint8_t MSPcmdsend; if(queuedMSPRequests == 0) queuedMSPRequests = modeMSPRequests; uint32_t req = queuedMSPRequests & -queuedMSPRequests; queuedMSPRequests &= ~req; switch(req) { case REQ_MSP_IDENT: MSPcmdsend = MSP_IDENT; break; case REQ_MSP_STATUS: MSPcmdsend = MSP_STATUS; break; case REQ_MSP_RAW_IMU: MSPcmdsend = MSP_RAW_IMU; break; case REQ_MSP_RC: MSPcmdsend = MSP_RC; break; case REQ_MSP_RAW_GPS: MSPcmdsend = MSP_RAW_GPS; break; case REQ_MSP_COMP_GPS: MSPcmdsend = MSP_COMP_GPS; break; case REQ_MSP_ATTITUDE: MSPcmdsend = MSP_ATTITUDE; break; case REQ_MSP_ALTITUDE: MSPcmdsend = MSP_ALTITUDE; break; case REQ_MSP_ANALOG: MSPcmdsend = MSP_ANALOG; break; case REQ_MSP_RC_TUNING: MSPcmdsend = MSP_RC_TUNING; break; case REQ_MSP_PID: MSPcmdsend = MSP_PID; break; case REQ_MSP_BOX: MSPcmdsend = MSP_BOXIDS; break; case REQ_MSP_FONT: MSPcmdsend = MSP_OSD; break; } if(!fontMode) blankserialRequest(MSPcmdsend); //MAX7456_DrawScreen(); if( allSec < 6 ){ displayIntro(KVTeamVersionPosition); lastCallSign = onTime; } else { if(armed){ previousarmedstatus=1; } if(previousarmedstatus && !armed){ configPage=9; ROW=10; COL=1; configMode=1; setMspRequests(); } if(fontMode) { displayFontScreen(); } else if(configMode) { displayConfigScreen(); } else { displayVoltage(); displayVidVoltage(); displayRSSI(); displayTime(); displaySensor(); displayGPSMode(); displayMode(); //if((temperature<Settings[S_TEMPERATUREMAX])||(BlinkAlarm)) displayTemperature(); displayAmperage(); displaypMeterSum(); displayArmed(); displayCurrentThrottle(); displayautoPilot(); if ( (onTime > (lastCallSign+300)) || (onTime < (lastCallSign+4))) { // Displays 4 sec every 5min (no blink during flight) if ( onTime > (lastCallSign+300))lastCallSign = onTime; displayCallsign(); } if(MW_STATUS.sensorPresent&ACCELEROMETER) displayHorizon(MW_ATT.Angle[0],MW_ATT.Angle[1]); if(MW_STATUS.sensorPresent&MAGNETOMETER) { displayHeadingGraph(); displayHeading(); } if(MW_STATUS.sensorPresent&BAROMETER) { displayAltitude(); displayClimbRate(); } if(MW_STATUS.sensorPresent&GPSSENSOR) if(Settings[S_DISPLAYGPS]){ displayNumberOfSat(); displayDirectionToHome(); displayDistanceToHome(); displayAngleToHome(); displayGPS_speed(); displayGPSPosition(); //displayGPS_altitude(); // Do not remove yet } } } MAX7456_DrawScreen(); } // End of fast Timed Service Routine (50ms loop) //--------------------- End of Timed Service Routine --------------------------------------- if(TempBlinkAlarm >= Settings[S_BLINKINGHZ]) { // selectable alarm blink freq TempBlinkAlarm = 0; BlinkAlarm =!BlinkAlarm; // 10=1Hz, 9=1.1Hz, 8=1.25Hz, 7=1.4Hz, 6=1.6Hz, 5=2Hz, 4=2.5Hz, 3=3.3Hz, 2=5Hz, 1=10Hz } if(tenthSec >= 10) // this execute 1 time a second { onTime++; tenthSec=0; if(!armed) { flyTime=0; } else { flyTime++; flyingTime++; configMode=0; setMspRequests(); } allSec++; if((accCalibrationTimer==1)&&(configMode)) { blankserialRequest(MSP_ACC_CALIBRATION); accCalibrationTimer=0; } if((magCalibrationTimer==1)&&(configMode)) { blankserialRequest(MSP_MAG_CALIBRATION); magCalibrationTimer=0; } if((eepromWriteTimer==1)&&(configMode)) { blankserialRequest(MSP_EEPROM_WRITE); eepromWriteTimer=0; } if(accCalibrationTimer>0) accCalibrationTimer--; if(magCalibrationTimer>0) magCalibrationTimer--; if(eepromWriteTimer>0) eepromWriteTimer--; if((rssiTimer==1)&&(configMode)) { Settings[S_RSSIMIN]=rssiADC; // set MIN RSSI signal received (tx off?) rssiTimer=0; } if(rssiTimer>0) rssiTimer--; } serialMSPreceive(); } // End of main loop
void LogDetail::Event( bz_EventData *eventData ) { bz_ChatEventData_V1 *chatData = (bz_ChatEventData_V1 *) eventData; bz_ServerMsgEventData_V1 *serverMsgData = (bz_ServerMsgEventData_V1 *) eventData; bz_SlashCommandEventData_V1 *cmdData = (bz_SlashCommandEventData_V1 *) eventData; bz_PlayerJoinPartEventData_V1 *joinPartData = (bz_PlayerJoinPartEventData_V1 *) eventData; bz_PlayerAuthEventData_V1 *authData = (bz_PlayerAuthEventData_V1 *) eventData; bz_MessageFilteredEventData_V1 *filteredData = (bz_MessageFilteredEventData_V1 *) eventData; char temp[9] = {0}; if (eventData) { switch (eventData->eventType) { case bz_eSlashCommandEvent: // Slash commands are case insensitive // Tokenize the stream and check the first word // /report -> MSG-REPORT // anything -> MSG-COMMAND strncpy(temp, cmdData->message.c_str(), 8); if (strcasecmp( temp, "/REPORT ") == 0) { bz_debugMessagef(0, "MSG-REPORT %s %s", displayCallsign( cmdData->from ).c_str(), cmdData->message.c_str()+8); } else { bz_debugMessagef(0, "MSG-COMMAND %s %s", displayCallsign( cmdData->from ).c_str(), cmdData->message.c_str()+1); } break; case bz_eRawChatMessageEvent: if ((chatData->to == BZ_ALLUSERS) && (chatData->team == eNoTeam)) { bz_debugMessagef(0, "MSG-BROADCAST %s %s", displayCallsign( chatData->from ).c_str(), chatData->message.c_str()); } else if (chatData->to == BZ_NULLUSER) { if (chatData->team == eAdministrators) { bz_debugMessagef(0, "MSG-ADMIN %s %s", displayCallsign( chatData->from ).c_str(), chatData->message.c_str()); } else { bz_debugMessagef(0, "MSG-TEAM %s %s %s", displayCallsign( chatData->from ).c_str(), displayTeam( chatData->team ).c_str(), chatData->message.c_str()); } } else { bz_debugMessagef(0, "MSG-DIRECT %s %s %s", displayCallsign( chatData->from ).c_str(), displayCallsign( chatData->to ).c_str(), chatData->message.c_str()); } break; case bz_eMessageFilteredEvent: bz_debugMessagef(0, "MSG-FILTERED %s %s", displayCallsign( filteredData->playerID ).c_str(), filteredData->filteredMessage.c_str()); break; case bz_eServerMsgEvent: if ((serverMsgData->to == BZ_ALLUSERS) && (serverMsgData->team == eNoTeam)) { bz_debugMessagef(0, "MSG-BROADCAST 6:SERVER %s", serverMsgData->message.c_str()); } else if (serverMsgData->to == BZ_NULLUSER) { if (serverMsgData->team == eAdministrators) { bz_debugMessagef(0, "MSG-ADMIN 6:SERVER %s", serverMsgData->message.c_str()); } else { bz_debugMessagef(0, "MSG-TEAM 6:SERVER %s %s", displayTeam( serverMsgData->team ).c_str(), serverMsgData->message.c_str()); } } else { bz_debugMessagef(0, "MSG-DIRECT 6:SERVER %s %s", displayCallsign( serverMsgData->to ).c_str(), serverMsgData->message.c_str()); } break; case bz_ePlayerJoinEvent: { if (joinPartData->record) { bz_debugMessagef(0, "PLAYER-JOIN %s #%d%s %s %s", displayCallsign( joinPartData->playerID).c_str(), joinPartData->playerID, displayBZid( joinPartData->playerID ).c_str(), displayTeam( joinPartData->record->team ).c_str(), displayPlayerPrivs( joinPartData->playerID ).c_str()); listPlayers( join, joinPartData); } } break; case bz_ePlayerPartEvent: bz_debugMessagef(0, "PLAYER-PART %s #%d%s %s", displayCallsign( joinPartData->playerID ).c_str(), joinPartData->playerID, displayBZid( joinPartData->playerID ).c_str(), joinPartData->reason.c_str()); listPlayers( part, joinPartData); break; case bz_ePlayerAuthEvent: bz_debugMessagef(0, "PLAYER-AUTH %s %s", displayCallsign( authData->playerID ).c_str(), displayPlayerPrivs( authData->playerID ).c_str()), listPlayers( join, joinPartData); break; default : break; } } }
void loop() { // Process AI static uint16_t ind = 0; static uint32_t voltageRawArray[8]; voltageRawArray[(ind++)%8] = analogRead(voltagePin); uint16_t voltageRaw = 0; for (uint16_t i=0;i<8;i++) voltageRaw += voltageRawArray[i]; voltage = float(voltageRaw) * 100 / 1020; //--------------- Start Timed Service Routines --------------------------------------- unsigned long currentMillis = millis(); //enable high speed if((currentMillis - previous_millis_sync) >= sync_speed_cycle) // (Executed > NTSC/PAL hz 33ms) { previous_millis_sync = previous_millis_sync+sync_speed_cycle; } if((currentMillis - previous_millis_low) >= lo_speed_cycle) // 10 Hz (Executed every 100ms) { previous_millis_low = previous_millis_low+lo_speed_cycle; timer.tenthSec++; timer.halfSec++; timer.Blink10hz=!timer.Blink10hz; } // End of slow Timed Service Routine (100ms loop) if((currentMillis - previous_millis_high) >= hi_speed_cycle) // 20 Hz (Executed every 50ms) { previous_millis_high = previous_millis_high+hi_speed_cycle; //if statements to define what to show on screen. //this should be moved to proper c++ code, not if statements if(showVoltage == 1){ displayVoltage(); } if(showTimer == 1){ displayTime(); } if(showCallsign == 1){ displayCallsign(); } if(showCrosshair == 1){ displayCrosshair(); } MAX7456_DrawScreen(); } // End of fast Timed Service Routine (50ms loop) //--------------------- End of Timed Service Routine --------------------------------------- if(millis() > timer.seconds+1000) // this execute 1 time a second { timer.seconds+=1000; timer.tenthSec=0; onTime++; //check to see if the MAX chip crashed MAX7456Stalldetect(); allSec++; } } // End of main loop