#pragma once #if DISPLAY_TYPE > 0 #if SUPPORT_POINTS_OF_INTEREST == 1 struct PointOfInterest { const char *pDisplay; byte hourRA; byte minRA; byte secRA; int degreeDEC; byte minDEC; byte secDEC; }; // Points of interest are sorted by DEC // Note that you cannot add any points of interest between 0 and -1 degree Declination (don't ask). PointOfInterest pointOfInterest[] = { // Name (15chars) RA (hms) DEC (dms) //0123456789012345 {">Polaris", POLARIS_RA_HOUR, POLARIS_RA_MINUTE, POLARIS_RA_SECOND, 89, 21, 6}, {">a Centauri", 14,41,39,-60,56,34}, {">Achernar", 1,38,37,-57,6,37}, {">Al nair", 22,9,47,-46,50,12}, {">Aldebaran", 4,37,22,16,33,41}, {">Algieba", 10,21,22,19,42,52}, {">Algol", 3,9,48,41,3,12}, {">Alkaid grB", 13,48,35,49,11,3}, {">Alnitak", 5,42,2,-1,55,51}, {">Alnilam", 5,37,30,-1,11,15}, {">Altair", 19, 51, 45, 8, 55, 15}, {">Antares", 16,30,58,-26,29,17}, {">Arcturus", 14, 16, 37, 19, 5, 21}, {">Bellatrix", 5,26,29,6,22,18}, {">Beteigeuze", 5,56,32,7,24,39}, {">Big Dipper", 12, 16, 26, 56, 55, 7}, {">Bodes gal", 9,57,40,68,57,2}, {">Calif neb", 4,2,48,36,31,56}, {">Canopus", 6,24,31,-52,42,48}, {">Capella", 5,18,33,46,1,46}, {">Carina neb", 10,46,06,-60,0,07}, {">Castor", 7,36,13,31,50,6}, {">Cat paw neb", 17,21,56,35,58,5}, {">Cederblad 214", 0, 5, 46, 67, 16, 45}, {">Com Berenices", 12,23,48,25,42,11}, {">Deneb Kaitos", 0,44,50,-17,51,1}, {">Deneb (Cygnus)", 20, 42, 7, 45, 21, 12}, {">Dubhe grD", 11,5,20,61,36,58}, {">Eagle neb", 18,20,11,-13,47,24}, {">Elephant Trunk", 21, 39, 44, 57, 35, 31}, {">Elnath", 5,27,53,28,37,52}, {">Fomalhaut", 22,59,01,-29,29,18}, {">Fl star neb", 5,17,58,34,20,32}, {">Grus", 22,35,29,44,32,59}, {">Gum2", 7,6,24,-10,58,37}, {">Hadar", 14,5,39,-60,29,38}, {">Hamal", 2,8,34,23,34,55}, {">IC1396 neb", 21,41,5,57,40,24}, {">Witchhead neb", 5,6,7,-7,13,2}, {">Heart Nebula", 2, 34, 57, 61, 31, 17}, {">Kaus austr", 18,25,51,-34,22,14}, {">Kochab", 14,50,45,74,2,49}, {">Lagoon Nebula", 18, 5, 2, -24, 22, 52}, {">Maggelan cl gr", 5,23,21,-69,44,12}, {">Maggelan cl sm", 0,53,29,-72,39,50}, {">Menkar", 3,3,35,4,11,16}, {">Mintaka", 5,33,18,0,16,55}, {">Mirfak", 3,26,6,49,57,9}, {">Mizar", 13,24,59,54,47,29}, {">M31 Andromeda", 0, 43, 52, 41, 22, 53}, {">M33 Triangulum", 1, 35, 02, 30, 46, 5}, {">M42 Orion Neb", 5, 36, 18, -5, 22, 44}, {">M51 Whirlpool", 13, 30, 45, 47, 5, 21}, {">M63 Sunflower", 13, 16, 45, 41, 55, 14}, {">M81 Bodes Galxy", 9, 57, 13, 68, 58, 1}, {">M101 Pinwheel", 14, 3, 56, 54, 15, 0}, {">Navi", 0, 57, 57, 60, 49, 33}, {">NGC2175", 6,11,9,20,29,30}, {">NGC6823", 19,44,14,23,21,18}, {">NGC7000 NAm nb", 21,0,11,44,36,34}, {">o Centauri", 13,28,20,-47,36,47}, {">o neb", 18,22,15,-16,9,43}, {">pac man neb", 0,54,20,56,45,41}, {">Peacock", 20,27,37,-56,39,1}, {">Perseides", 3,13,55,57,41,50}, {">Pleiades 7Sistr", 3, 48, 15, 24, 10, 54}, {">Pollux", 67,46,54,27,57,59}, {">Regulus", 10,9,45,11,50,33}, {">Rigel", 5,15,45,-8,10,28}, {">Rosetta neb", 6,33,2,4,57,5}, {">Sadr", 20,23,7,40,19,54}, {">Sculptor gal", 0,48,46,-25,9,6}, {">Sirius", 6,46,17,-16,44,31}, {">Soul Nebula", 2, 52, 47, 60, 30, 56}, {">S +", 12,30,27,-60,15,38}, {">S Pleiades", 10,43,52,-64,31,45}, {">sm Dpg", 7,38,21,5,48,46}, {">Spica", 13,26,33,-11,17,41}, {">Tors helmet", 7,19,42,-13,16,27}, {">Vega", 18, 37, 37, 38, 48, 7}, {">Veil Nebula", 20, 51, 28, 30, 59, 30}, {">Vindemiatrix", 13,3,28,10,49,15}, {">X mas tree", 6,42,22,9,52,17}, // Add new items above here, not below. {">Home", 0, 0, 0, 90, 0, 0}, {">Unpark", 0, 0, 0, 90, 0, 0}, {">Park", 0, 0, 0, 90, 0, 0}, // And definitely don't add here. }; int currentPOI = 0; int parkPOI = sizeof(pointOfInterest) / sizeof(pointOfInterest[0]) - 1; int unparkPOI = sizeof(pointOfInterest) / sizeof(pointOfInterest[0]) - 2; byte homePOI = sizeof(pointOfInterest) / sizeof(pointOfInterest[0]) - 3; bool processPOIKeys() { lcdButton_t key; bool waitForRelease = false; if (lcdButtons.keyChanged(&key)) { waitForRelease = true; switch (key) { case btnSELECT: { mount.stopSlewing(ALL_DIRECTIONS); if (currentPOI == homePOI) { mount.startSlewingToHome(); } else if (currentPOI == parkPOI) { mount.park(); } else if (currentPOI == unparkPOI) { mount.startSlewing(TRACKING); } else { PointOfInterest *poi = &pointOfInterest[currentPOI]; LOG(DEBUG_INFO, "[POI]: Selected %s. RA: %d %d %d", poi->pDisplay, poi->hourRA, poi->minRA, poi->secRA); LOG(DEBUG_INFO, "[POI]: Selected %s. DEC: %d %d %d", poi->pDisplay, poi->degreeDEC, poi->minDEC, poi->secDEC); long targetSeconds = (60L * abs(poi->degreeDEC) + poi->minDEC) * 60L + poi->secDEC; targetSeconds *= (poi->degreeDEC < 0 ? -1 : 1); mount.targetRA().set(poi->hourRA, poi->minRA, poi->secRA); mount.targetDEC() = Declination::FromSeconds(targetSeconds); LOG(DEBUG_INFO, "[POI]: Target RA is %s. %ls", mount.targetRA().ToString(), targetSeconds); LOG(DEBUG_INFO, "[POI]: mount target DEC is %s. %ls", mount.targetDEC().ToString(), mount.targetDEC().getTotalSeconds()); mount.startSlewingToTarget(); } } break; case btnLEFT: case btnDOWN: { currentPOI = adjustWrap(currentPOI, 1, 0, parkPOI); } break; case btnUP: { currentPOI = adjustWrap(currentPOI, -1, 0, parkPOI); } break; case btnRIGHT: { lcdMenu.setNextActive(); } break; default: break; } } return waitForRelease; } void printPOISubmenu() { if (mount.isSlewingIdle()) { lcdMenu.printMenu(pointOfInterest[currentPOI].pDisplay); } } #endif #endif