Version 1.12

Rasp.Pi Pico switch
GP11 & GP12
This commit is contained in:
Trevor Beaton 2021-05-27 16:05:51 -04:00
parent f440dd0c2f
commit 52bee9817a
43 changed files with 1279 additions and 376 deletions

View file

@ -9,6 +9,10 @@
/* Begin PBXBuildFile section */
290439F02292E34200979BAD /* BoardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290439EF2292E34200979BAD /* BoardViewController.swift */; };
2917003925858C3900E39853 /* BoardViewController+Audio.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2917003825858C3900E39853 /* BoardViewController+Audio.swift */; };
293EC85925E8092C008EB6CA /* Teensy41BoardOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 293EC85825E8092C008EB6CA /* Teensy41BoardOverlay.swift */; };
2948B61A25E6D82D0013781D /* CircleLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2948B61925E6D82D0013781D /* CircleLabel.swift */; };
295049AC25E6996D003E7484 /* CurvedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295049AB25E6996D003E7484 /* CurvedText.swift */; };
295049AE25E69AB0003E7484 /* BLMBoardOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 295049AD25E69AB0003E7484 /* BLMBoardOverlay.swift */; };
29546B5B2585B51000002715 /* BoardViewController+HostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29546B5A2585B51000002715 /* BoardViewController+HostingController.swift */; };
297574E025A612E4001991E7 /* SwiftUITarotCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 297574DF25A612E4001991E7 /* SwiftUITarotCardView.swift */; };
29897A482569E8330080F4BF /* ARScenes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29897A472569E8330080F4BF /* ARScenes.swift */; };
@ -16,6 +20,7 @@
298FD3F62270B4D9007E2F4C /* QRViewController+GestureRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298FD3F52270B4D9007E2F4C /* QRViewController+GestureRec.swift */; };
298FD3F82270B7A5007E2F4C /* QRViewController+Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298FD3F72270B7A5007E2F4C /* QRViewController+Video.swift */; };
29A07E9725C0CB9F006219C9 /* PICOBoardOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A07E9625C0CB9F006219C9 /* PICOBoardOverlay.swift */; };
29A83D2525EEC3F60018BEAB /* Pi400Overlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29A83D2425EEC3F60018BEAB /* Pi400Overlay.swift */; };
29AA121D25A9717E0037003B /* ListOfTexts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29AA121C25A9717E0037003B /* ListOfTexts.swift */; };
29B109C922933CE9004D6D58 /* BoardViewController+Gesture Recognizers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B109C822933CE9004D6D58 /* BoardViewController+Gesture Recognizers.swift */; };
29D096292559C71D0032654B /* ClickableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29D096282559C71D0032654B /* ClickableView.swift */; };
@ -40,16 +45,6 @@
D5F2F4EE208E190E00B0790B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = D5F2F4EC208E190E00B0790B /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
D516FD8F222482DD004D151B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = D5F2F4D6208E190D00B0790B /* Project object */;
proxyType = 1;
remoteGlobalIDString = D5F2F4DD208E190D00B0790B;
remoteInfo = "Adafruit AR";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
D53C6F1A20D2B93C0051A030 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
@ -66,6 +61,10 @@
/* Begin PBXFileReference section */
290439EF2292E34200979BAD /* BoardViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoardViewController.swift; sourceTree = "<group>"; };
2917003825858C3900E39853 /* BoardViewController+Audio.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BoardViewController+Audio.swift"; sourceTree = "<group>"; };
293EC85825E8092C008EB6CA /* Teensy41BoardOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Teensy41BoardOverlay.swift; sourceTree = "<group>"; };
2948B61925E6D82D0013781D /* CircleLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleLabel.swift; sourceTree = "<group>"; };
295049AB25E6996D003E7484 /* CurvedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurvedText.swift; sourceTree = "<group>"; };
295049AD25E69AB0003E7484 /* BLMBoardOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BLMBoardOverlay.swift; sourceTree = "<group>"; };
29546B5A2585B51000002715 /* BoardViewController+HostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BoardViewController+HostingController.swift"; sourceTree = "<group>"; };
297574DF25A612E4001991E7 /* SwiftUITarotCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUITarotCardView.swift; sourceTree = "<group>"; };
29897A472569E8330080F4BF /* ARScenes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ARScenes.swift; sourceTree = "<group>"; };
@ -73,11 +72,11 @@
298FD3F52270B4D9007E2F4C /* QRViewController+GestureRec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "QRViewController+GestureRec.swift"; sourceTree = "<group>"; };
298FD3F72270B7A5007E2F4C /* QRViewController+Video.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "QRViewController+Video.swift"; sourceTree = "<group>"; };
29A07E9625C0CB9F006219C9 /* PICOBoardOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PICOBoardOverlay.swift; sourceTree = "<group>"; };
29A83D2425EEC3F60018BEAB /* Pi400Overlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Pi400Overlay.swift; sourceTree = "<group>"; };
29AA121C25A9717E0037003B /* ListOfTexts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListOfTexts.swift; sourceTree = "<group>"; };
29B109C822933CE9004D6D58 /* BoardViewController+Gesture Recognizers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BoardViewController+Gesture Recognizers.swift"; sourceTree = "<group>"; };
29D096282559C71D0032654B /* ClickableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClickableView.swift; sourceTree = "<group>"; };
D515BAD921FF5826001E7079 /* Highlight SCNNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Highlight SCNNode.swift"; sourceTree = "<group>"; };
D516FD8A222482DC004D151B /* Adafruit ARTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Adafruit ARTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
D54801CB217E118B00170412 /* hallowing_eye.mov */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = hallowing_eye.mov; sourceTree = "<group>"; };
D54E995A20E155DF0021A2E5 /* Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
D55B075A20FF8DD40066976C /* ViewController+Gesture Recognizers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ViewController+Gesture Recognizers.swift"; sourceTree = "<group>"; };
@ -101,13 +100,6 @@
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
D516FD87222482DC004D151B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D5F2F4DB208E190D00B0790B /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@ -157,7 +149,12 @@
290439EF2292E34200979BAD /* BoardViewController.swift */,
297574DF25A612E4001991E7 /* SwiftUITarotCardView.swift */,
29A07E9625C0CB9F006219C9 /* PICOBoardOverlay.swift */,
293EC85825E8092C008EB6CA /* Teensy41BoardOverlay.swift */,
29A83D2425EEC3F60018BEAB /* Pi400Overlay.swift */,
295049AB25E6996D003E7484 /* CurvedText.swift */,
295049AD25E69AB0003E7484 /* BLMBoardOverlay.swift */,
2917003825858C3900E39853 /* BoardViewController+Audio.swift */,
2948B61925E6D82D0013781D /* CircleLabel.swift */,
29546B5A2585B51000002715 /* BoardViewController+HostingController.swift */,
29AA121C25A9717E0037003B /* ListOfTexts.swift */,
29897A472569E8330080F4BF /* ARScenes.swift */,
@ -198,7 +195,6 @@
isa = PBXGroup;
children = (
D5F2F4DE208E190D00B0790B /* Adafruit AR.app */,
D516FD8A222482DC004D151B /* Adafruit ARTests.xctest */,
);
name = Products;
sourceTree = "<group>";
@ -225,24 +221,6 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
D516FD89222482DC004D151B /* Adafruit ARTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = D516FD91222482DD004D151B /* Build configuration list for PBXNativeTarget "Adafruit ARTests" */;
buildPhases = (
D516FD86222482DC004D151B /* Sources */,
D516FD87222482DC004D151B /* Frameworks */,
D516FD88222482DC004D151B /* Resources */,
);
buildRules = (
);
dependencies = (
D516FD90222482DD004D151B /* PBXTargetDependency */,
);
name = "Adafruit ARTests";
productName = "Adafruit ARTests";
productReference = D516FD8A222482DC004D151B /* Adafruit ARTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
D5F2F4DD208E190D00B0790B /* Adafruit AR */ = {
isa = PBXNativeTarget;
buildConfigurationList = D5F2F4F2208E190E00B0790B /* Build configuration list for PBXNativeTarget "Adafruit AR" */;
@ -272,11 +250,6 @@
LastUpgradeCheck = 1200;
ORGANIZATIONNAME = "Vanguard Logic LLC";
TargetAttributes = {
D516FD89222482DC004D151B = {
CreatedOnToolsVersion = 10.1;
LastSwiftMigration = 1010;
ProvisioningStyle = Automatic;
};
D5F2F4DD208E190D00B0790B = {
CreatedOnToolsVersion = 9.2;
ProvisioningStyle = Automatic;
@ -302,19 +275,11 @@
projectRoot = "";
targets = (
D5F2F4DD208E190D00B0790B /* Adafruit AR */,
D516FD89222482DC004D151B /* Adafruit ARTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
D516FD88222482DC004D151B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D5F2F4DC208E190D00B0790B /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@ -347,13 +312,6 @@
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D516FD86222482DC004D151B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
D5F2F4DA208E190D00B0790B /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@ -373,14 +331,19 @@
29897A58256CA76F0080F4BF /* ARWorldAnchor.swift in Sources */,
D515BADA21FF5826001E7079 /* Highlight SCNNode.swift in Sources */,
29A07E9725C0CB9F006219C9 /* PICOBoardOverlay.swift in Sources */,
29A83D2525EEC3F60018BEAB /* Pi400Overlay.swift in Sources */,
295049AC25E6996D003E7484 /* CurvedText.swift in Sources */,
2948B61A25E6D82D0013781D /* CircleLabel.swift in Sources */,
D56ED488213EEC94000E62F0 /* QRViewController.swift in Sources */,
D55B075B20FF8DD40066976C /* ViewController+Gesture Recognizers.swift in Sources */,
290439F02292E34200979BAD /* BoardViewController.swift in Sources */,
29546B5B2585B51000002715 /* BoardViewController+HostingController.swift in Sources */,
298FD3F82270B7A5007E2F4C /* QRViewController+Video.swift in Sources */,
295049AE25E69AB0003E7484 /* BLMBoardOverlay.swift in Sources */,
D55F683120BF2CA4005219D9 /* Utilities.swift in Sources */,
D5F2F4E2208E190D00B0790B /* AppDelegate.swift in Sources */,
D58A102C20FE6C39003B0E93 /* ViewController+Nodes.swift in Sources */,
293EC85925E8092C008EB6CA /* Teensy41BoardOverlay.swift in Sources */,
29B109C922933CE9004D6D58 /* BoardViewController+Gesture Recognizers.swift in Sources */,
D56ED486213EE255000E62F0 /* MainViewController.swift in Sources */,
2917003925858C3900E39853 /* BoardViewController+Audio.swift in Sources */,
@ -389,14 +352,6 @@
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
D516FD90222482DD004D151B /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = D5F2F4DD208E190D00B0790B /* Adafruit AR */;
targetProxy = D516FD8F222482DD004D151B /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
D5F2F4E7208E190D00B0790B /* Main.storyboard */ = {
isa = PBXVariantGroup;
@ -417,44 +372,6 @@
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
D516FD92222482DD004D151B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = "Adafruit ARTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "Adafruit-Industries-LLC.Adafruit-ARTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Adafruit AR/Adafruit ARTests-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
D516FD93222482DD004D151B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 2X94RM7457;
INFOPLIST_FILE = "Adafruit ARTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "Adafruit-Industries-LLC.Adafruit-ARTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Adafruit AR/Adafruit ARTests-Bridging-Header.h";
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
D5F2F4F0208E190E00B0790B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@ -506,7 +423,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -560,7 +477,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
@ -573,16 +490,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = 2X94RM7457;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Frameworks",
);
INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 1.10.4;
MARKETING_VERSION = 1.12;
PRODUCT_BUNDLE_IDENTIFIER = "com.adafruit.adafruit-AR";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
@ -595,16 +512,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
CURRENT_PROJECT_VERSION = 3;
DEVELOPMENT_TEAM = 2X94RM7457;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Frameworks",
);
INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.4;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 1.10.4;
MARKETING_VERSION = 1.12;
PRODUCT_BUNDLE_IDENTIFIER = "com.adafruit.adafruit-AR";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.0;
@ -615,15 +532,6 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
D516FD91222482DD004D151B /* Build configuration list for PBXNativeTarget "Adafruit ARTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
D516FD92222482DD004D151B /* Debug */,
D516FD93222482DD004D151B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D5F2F4D9208E190D00B0790B /* Build configuration list for PBXProject "Adafruit AR" */ = {
isa = XCConfigurationList;
buildConfigurations = (

View file

@ -24,25 +24,29 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
print(#function)
return true
}
func applicationWillResignActive(_ application: UIApplication) {
print(#function)
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
print(#function)
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
print(#function)
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
print(#function)
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

View file

@ -1,9 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="TV4-si-PBW">
<device id="retina5_9" orientation="portrait" appearance="light"/>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="TV4-si-PBW">
<device id="ipad11_0rounded" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@ -13,11 +12,11 @@
<objects>
<viewController id="2cU-fx-wlI" userLabel="QR Mode" customClass="QRViewController" customModule="Adafruit_AR" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="g5D-Fh-qu3">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<arscnView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="FWL-fP-Q4m">
<rect key="frame" x="-44" y="0.0" width="463" height="812"/>
<rect key="frame" x="-44" y="0.0" width="922" height="1208"/>
</arscnView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="QR Scanner" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pjb-dT-HnP">
<rect key="frame" x="16" y="51" width="161" height="31"/>
@ -28,14 +27,14 @@
<color key="shadowColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dxt-9f-ehL" userLabel="Flashlight Button">
<rect key="frame" x="319" y="144" width="35" height="35"/>
<rect key="frame" x="778" y="144" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<connections>
<action selector="torchAction:" destination="2cU-fx-wlI" eventType="touchUpInside" id="aTK-N7-y1S"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFit" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Gpe-cv-516">
<rect key="frame" x="319" y="44" width="35" height="35"/>
<rect key="frame" x="778" y="44" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" image="HomeIcon">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -45,7 +44,7 @@
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PJF-SR-1Br" userLabel="Info Button">
<rect key="frame" x="319" y="94" width="35" height="35"/>
<rect key="frame" x="778" y="94" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" image="?mark_icon"/>
<connections>
@ -53,35 +52,22 @@
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" alpha="0.40000000000000002" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Scan Here" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="HH5-el-Qp1">
<rect key="frame" x="128" y="353" width="117" height="38"/>
<rect key="frame" x="285" y="519" width="260" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Avenir-Heavy" family="Avenir" pointSize="20"/>
<nil key="highlightedColor"/>
</label>
<visualEffectView opaque="NO" contentMode="scaleToFill" misplaced="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lp0-H7-A8R">
<rect key="frame" x="0.0" y="786" width="375" height="49"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="wpv-DE-6SP">
<rect key="frame" x="0.0" y="0.0" width="375" height="49"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
<blurEffect style="light"/>
</visualEffectView>
</subviews>
<viewLayoutGuide key="safeArea" id="QeJ-sR-TtX"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="FWL-fP-Q4m" firstAttribute="bottom" secondItem="QeJ-sR-TtX" secondAttribute="bottom" constant="34" id="5vl-um-jaa"/>
<constraint firstItem="lp0-H7-A8R" firstAttribute="trailing" secondItem="QeJ-sR-TtX" secondAttribute="trailing" id="9gM-QE-lmK"/>
<constraint firstItem="lp0-H7-A8R" firstAttribute="top" secondItem="g5D-Fh-qu3" secondAttribute="top" constant="-23" id="MgC-fa-vVg"/>
<constraint firstAttribute="bottom" secondItem="lp0-H7-A8R" secondAttribute="bottom" constant="-23" id="Rgm-Gq-vXx"/>
<constraint firstItem="FWL-fP-Q4m" firstAttribute="trailing" secondItem="QeJ-sR-TtX" secondAttribute="trailing" constant="44" id="eek-V2-JgP"/>
<constraint firstItem="lp0-H7-A8R" firstAttribute="leading" secondItem="QeJ-sR-TtX" secondAttribute="leading" id="jEZ-8l-2NA"/>
<constraint firstItem="FWL-fP-Q4m" firstAttribute="top" secondItem="g5D-Fh-qu3" secondAttribute="top" id="tGC-DN-RTV"/>
<constraint firstItem="FWL-fP-Q4m" firstAttribute="leading" secondItem="QeJ-sR-TtX" secondAttribute="leading" constant="-44" id="u3Q-a8-1hO"/>
</constraints>
</view>
<connections>
<outlet property="addedBlurEffect" destination="lp0-H7-A8R" id="fDc-23-LaB"/>
<outlet property="homeButton" destination="Gpe-cv-516" id="vL5-p0-RPJ"/>
<outlet property="qrCodeInfoDisplay" destination="VLs-pf-QcC" id="uVa-iw-s0p"/>
<outlet property="qrInfoDisplayButton" destination="Txl-RF-5cA" id="O67-Ol-TnY"/>
@ -151,39 +137,40 @@
</userDefinedRuntimeAttributes>
</view>
</objects>
<point key="canvasLocation" x="2165.5999999999999" y="-1298.2758620689656"/>
<point key="canvasLocation" x="2165.4676258992808" y="-1298.4924623115578"/>
</scene>
<!--Board Info Mode-->
<scene sceneID="nSQ-gb-evL">
<objects>
<viewController id="vvW-nO-QUQ" userLabel="Board Info Mode" customClass="BoardViewController" customModule="Adafruit_AR" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="cTq-J8-T1c">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<arscnView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="UH8-jw-YWj">
<rect key="frame" x="-7" y="-5" width="390" height="821"/>
<rect key="frame" x="-7" y="-5" width="849" height="1203"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</arscnView>
<button opaque="NO" contentMode="scaleAspectFit" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VS0-h9-CUy" userLabel="Home Button">
<rect key="frame" x="319" y="44" width="35" height="35"/>
<rect key="frame" x="778" y="44" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" image="HomeIcon">
<color key="titleColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<segue destination="TV4-si-PBW" kind="presentation" modalPresentationStyle="fullScreen" modalTransitionStyle="flipHorizontal" id="pYP-7V-B9Y"/>
<action selector="homeButtonAction:" destination="vvW-nO-QUQ" eventType="touchUpInside" id="zJw-T5-IjF"/>
<segue destination="TV4-si-PBW" kind="presentation" modalPresentationStyle="fullScreen" modalTransitionStyle="crossDissolve" id="u7e-oD-Y3K"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Scan Here" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zl7-iH-s6c">
<rect key="frame" x="143" y="371" width="90" height="26"/>
<rect key="frame" x="373" y="551" width="90" height="26"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Avenir-Heavy" family="Avenir" pointSize="19"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="0.51961151541095896" colorSpace="custom" customColorSpace="displayP3"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="M1b-X6-ClA" userLabel="Info Button">
<rect key="frame" x="319" y="94" width="35" height="35"/>
<rect key="frame" x="778" y="94" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" image="?mark_icon"/>
<connections>
@ -191,28 +178,23 @@
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Board Scanner" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="soT-Be-nk8">
<rect key="frame" x="6" y="25" width="158" height="45"/>
<rect key="frame" x="19" y="37" width="158" height="45"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="Avenir-Heavy" family="Avenir" pointSize="19"/>
<color key="textColor" name="alternateSelectedControlTextColor" catalog="System" colorSpace="catalog"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="GB5-dl-wU7">
<rect key="frame" x="313" y="152" width="46" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Button"/>
</button>
<visualEffectView opaque="NO" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Hrs-8n-nRU">
<rect key="frame" x="-7" y="0.0" width="390" height="816"/>
<rect key="frame" x="-7" y="0.0" width="849" height="1198"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" id="Yk8-9c-YvN">
<rect key="frame" x="0.0" y="0.0" width="390" height="816"/>
<rect key="frame" x="0.0" y="0.0" width="849" height="1198"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
<blurEffect style="light"/>
</visualEffectView>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RYM-3l-bpr">
<rect key="frame" x="43" y="137" width="292" height="382"/>
<rect key="frame" x="281" y="259" width="292" height="382"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bi5-NN-nXJ">
@ -235,10 +217,11 @@ Works with:
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Scan your Raspberry Pi Pico to display an overlay of it's Pinoutsand Power Pins!(Only Available for iOS 14+)" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="j7N-r2-7EC">
<rect key="frame" x="26" y="223" width="258" height="103"/>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" lineBreakMode="tailTruncation" numberOfLines="4" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="j7N-r2-7EC">
<rect key="frame" x="25" y="212" width="246" height="96"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="AvenirNext-Bold" family="Avenir Next" pointSize="15"/>
<string key="text">Scan your Raspberry Pi Pico, Raspberry Pi 400, and Teensy 4.1 to display an overlay of its Pinouts and Power Pins!(Only Available for iOS 14+)</string>
<fontDescription key="fontDescription" name="AvenirNext-DemiBold" family="Avenir Next" pointSize="24"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
@ -264,30 +247,27 @@ Works with:
</subviews>
<viewLayoutGuide key="safeArea" id="8eE-ts-kY1"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<variation key="default">
<mask key="subviews">
<exclude reference="GB5-dl-wU7"/>
</mask>
</variation>
</view>
<navigationItem key="navigationItem" id="VSu-oy-E0D"/>
<connections>
<outlet property="boardInfoButton" destination="M1b-X6-ClA" id="c6w-Z2-UH6"/>
<outlet property="boardItemView" destination="RYM-3l-bpr" id="nYB-tU-rAW"/>
<outlet property="boardSceneView" destination="UH8-jw-YWj" id="VNq-YM-bid"/>
<outlet property="homeButton" destination="VS0-h9-CUy" id="qd4-BW-beA"/>
<outlet property="scanLabel" destination="Zl7-iH-s6c" id="lWH-do-Abr"/>
<outlet property="visualBoardEffectView" destination="Hrs-8n-nRU" id="afV-qX-qkQ"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="kqJ-3F-tXc" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2165.5999999999999" y="-591.13300492610836"/>
<point key="canvasLocation" x="2367.6258992805756" y="-455.27638190954775"/>
</scene>
<!--Onboarding p1-->
<scene sceneID="sWd-JV-Aqa">
<objects>
<viewController storyboardIdentifier="oneVC" id="xz2-3d-SKg" userLabel="Onboarding p1" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="kVI-hv-JTR">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Adafruit AR" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nXA-oS-Fcu">
@ -299,7 +279,7 @@ Works with:
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="Adabot-Mode-icon-512px" translatesAutoresizingMaskIntoConstraints="NO" id="3Pr-7B-Svr">
<rect key="frame" x="28" y="248" width="317" height="315"/>
<rect key="frame" x="62" y="365" width="705" height="463"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Welcome to" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oIv-ru-hfz">
@ -311,7 +291,7 @@ Works with:
<nil key="highlightedColor"/>
</label>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" contentInsetAdjustmentBehavior="never" editable="NO" text="Adafruit AR has three modes …" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pDm-P7-xWw">
<rect key="frame" x="16" y="629" width="342" height="46"/>
<rect key="frame" x="36" y="925" width="760" height="68"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -332,11 +312,11 @@ Works with:
<objects>
<viewController storyboardIdentifier="twoVC" id="p3Z-Jb-TF3" userLabel="Onboarding p2" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Zdv-4q-pNS">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="test1" translatesAutoresizingMaskIntoConstraints="NO" id="5i7-wJ-8X2" userLabel="Adabot">
<rect key="frame" x="36" y="157" width="300" height="300"/>
<rect key="frame" x="80" y="231" width="667" height="441"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="adabot" translatesAutoresizingMaskIntoConstraints="NO" id="fSX-bs-tx0">
@ -344,7 +324,7 @@ Works with:
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" contentInsetAdjustmentBehavior="never" editable="NO" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="s4z-Yk-nql">
<rect key="frame" x="16" y="452" width="342" height="304"/>
<rect key="frame" x="36" y="665" width="760" height="447"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<string key="text">Meet Adabot, your personal robot assistant!
@ -391,7 +371,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<objects>
<viewController storyboardIdentifier="threeVC" id="8Ju-7z-dYQ" userLabel="Onboarding p3" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="bpi-hr-fH6">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Board Info" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Cde-7o-6y5">
@ -415,11 +395,11 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="cpx1" translatesAutoresizingMaskIntoConstraints="NO" id="e4O-gF-k4I" userLabel="Adabot">
<rect key="frame" x="36" y="174" width="300" height="300"/>
<rect key="frame" x="80" y="256" width="667" height="441"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" contentInsetAdjustmentBehavior="never" editable="NO" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iGf-jB-gh2">
<rect key="frame" x="16" y="495" width="342" height="153"/>
<rect key="frame" x="36" y="728" width="760" height="225"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<string key="text">In Board Info mode, view your own real Adafruit board with an AR overlay describing important details - chips, components, &amp; more! </string>
@ -446,11 +426,11 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<objects>
<viewController storyboardIdentifier="fourVC" id="LE7-Yd-1BJ" userLabel="Onboarding p3" customClass="pageThree" customModule="Adafruit_AR" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="HPO-9H-aZH">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFit" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hxB-7h-VYD">
<rect key="frame" x="102" y="701" width="170" height="42"/>
<rect key="frame" x="227" y="1031" width="378" height="62"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
@ -468,7 +448,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" editable="NO" textAlignment="center" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xbb-c5-i7W">
<rect key="frame" x="16" y="493" width="342" height="187"/>
<rect key="frame" x="36" y="725" width="760" height="275"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<string key="text">While in QR mode, scan the Adafruit QR code on your invoice to display 3D product models, descriptions, videos, and links to helpful tutorials.</string>
@ -477,7 +457,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<imageView opaque="NO" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="QR-Mode-icon-512px" translatesAutoresizingMaskIntoConstraints="NO" id="n19-Bk-a29">
<rect key="frame" x="47" y="167" width="279" height="280"/>
<rect key="frame" x="105" y="246" width="620" height="411"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="QR Codes" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kdp-xp-SKl">
@ -521,23 +501,23 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<!--Mode Slection-->
<scene sceneID="fpm-m4-xnb">
<objects>
<viewController storyboardIdentifier="Main" id="TV4-si-PBW" userLabel="Mode Slection" customClass="MainViewController" customModule="Adafruit_AR" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="3Za-QD-T4W">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<viewController storyboardIdentifier="Main" modalPresentationStyle="fullScreen" id="TV4-si-PBW" userLabel="Mode Slection" customClass="MainViewController" customModule="Adafruit_AR" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="3Za-QD-T4W">
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="i4v-di-Acz">
<rect key="frame" x="120.00000000000001" y="155" width="135.33333333333337" height="135.33333333333337"/>
<rect key="frame" x="317.5" y="111" width="199" height="199"/>
<constraints>
<constraint firstAttribute="width" secondItem="i4v-di-Acz" secondAttribute="height" multiplier="1:1" id="GOQ-tj-cVV"/>
</constraints>
<state key="normal" image="Adabot-Mode-icon-512px"/>
<connections>
<segue destination="BV1-FR-VrT" kind="presentation" modalPresentationStyle="fullScreen" modalTransitionStyle="flipHorizontal" id="XGC-UV-bv7"/>
<segue destination="BV1-FR-VrT" kind="presentation" identifier="" modalPresentationStyle="fullScreen" modalTransitionStyle="flipHorizontal" id="XGC-UV-bv7"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Version" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Xf5-5J-Hvr" userLabel="Version Label">
<rect key="frame" x="150" y="96" width="75" height="20"/>
<rect key="frame" x="379.5" y="52" width="75" height="20"/>
<constraints>
<constraint firstAttribute="height" constant="20" id="Crv-CA-c1G"/>
<constraint firstAttribute="width" constant="75" id="mld-fB-mmo"/>
@ -547,7 +527,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Adafruit AR" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="1" translatesAutoresizingMaskIntoConstraints="NO" id="hrz-cZ-enL" userLabel="Title Label">
<rect key="frame" x="87.666666666666686" y="46" width="200" height="50"/>
<rect key="frame" x="317" y="2" width="200" height="50"/>
<constraints>
<constraint firstAttribute="height" constant="50" id="7Vm-T1-J6i"/>
<constraint firstAttribute="width" constant="200" id="Tnq-jz-oem"/>
@ -557,7 +537,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Board Scanner" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="69X-ph-JvD" userLabel="Board Label">
<rect key="frame" x="97.666666666666686" y="502.33333333333326" width="180" height="28"/>
<rect key="frame" x="327" y="585.5" width="180" height="28"/>
<constraints>
<constraint firstAttribute="width" constant="180" id="YDO-Dj-dEZ"/>
</constraints>
@ -566,7 +546,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Meet Adabot" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GPs-fe-Oq7" userLabel="Adabot Label">
<rect key="frame" x="97.666666666666686" y="298.33333333333331" width="180" height="28"/>
<rect key="frame" x="327" y="318" width="180" height="28"/>
<constraints>
<constraint firstAttribute="width" constant="180" id="vbi-ic-tFI"/>
</constraints>
@ -575,17 +555,17 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="71S-tN-o8i" userLabel="Board Icon">
<rect key="frame" x="120.00000000000001" y="359" width="135.33333333333337" height="135.33333333333337"/>
<rect key="frame" x="317.5" y="378.5" width="199" height="199"/>
<constraints>
<constraint firstAttribute="width" secondItem="71S-tN-o8i" secondAttribute="height" multiplier="1:1" id="Rge-Dd-gQ4"/>
</constraints>
<state key="normal" title="Button" image="Circuit_Playground1-mask2"/>
<connections>
<segue destination="vvW-nO-QUQ" kind="presentation" modalPresentationStyle="fullScreen" modalTransitionStyle="flipHorizontal" id="Ekl-WB-CCK"/>
<segue destination="vvW-nO-QUQ" kind="presentation" identifier="" modalPresentationStyle="fullScreen" modalTransitionStyle="crossDissolve" id="Ekl-WB-CCK"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Scan QR Code" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JoM-op-FvU" userLabel="QR Label">
<rect key="frame" x="97.666666666666686" y="706.33333333333337" width="180" height="27.333333333333371"/>
<rect key="frame" x="327" y="853.5" width="180" height="27.5"/>
<constraints>
<constraint firstAttribute="width" constant="180" id="Lkf-ET-bM9"/>
</constraints>
@ -594,7 +574,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NU1-NZ-3YS" userLabel="QR Icon">
<rect key="frame" x="120.00000000000001" y="563" width="135.33333333333337" height="135.33333333333337"/>
<rect key="frame" x="317.5" y="646.5" width="199" height="199"/>
<constraints>
<constraint firstAttribute="width" secondItem="NU1-NZ-3YS" secondAttribute="height" multiplier="1:1" id="0uH-dD-LiF"/>
</constraints>
@ -603,6 +583,10 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<segue destination="2cU-fx-wlI" kind="presentation" modalPresentationStyle="fullScreen" modalTransitionStyle="flipHorizontal" id="nhd-am-G0o"/>
</connections>
</button>
<arscnView hidden="YES" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="n9p-8U-ZtN">
<rect key="frame" x="0.0" y="1046" width="1" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</arscnView>
</subviews>
<viewLayoutGuide key="safeArea" id="AW5-us-1F3"/>
<color key="backgroundColor" red="0.15781691670417786" green="0.67801815271377563" blue="0.93185180425643921" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
@ -628,9 +612,11 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<constraint firstItem="69X-ph-JvD" firstAttribute="top" secondItem="71S-tN-o8i" secondAttribute="bottom" constant="8" id="xxi-vL-Mg6"/>
</constraints>
</view>
<navigationItem key="navigationItem" id="BHS-Qm-M7o"/>
<connections>
<outlet property="ARLabel" destination="GPs-fe-Oq7" id="0uu-JS-jI1"/>
<outlet property="arModeAdabot" destination="i4v-di-Acz" id="imG-wo-zZB"/>
<outlet property="boardView" destination="n9p-8U-ZtN" id="Es2-lW-ANW"/>
<outlet property="qrLabel" destination="JoM-op-FvU" id="qq2-gj-fB0"/>
<outlet property="qrModeIcon" destination="NU1-NZ-3YS" id="2Bc-I2-dkp"/>
<outlet property="versionNumberLabel" destination="Xf5-5J-Hvr" id="YkT-bR-DRp"/>
@ -638,22 +624,22 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="xBP-Oc-3Qf" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="775.36231884057975" y="-1303.7946428571429"/>
<point key="canvasLocation" x="774.8201438848921" y="-1304.0201005025126"/>
</scene>
<!--Adabot Mode-->
<scene sceneID="tXr-a1-R10">
<objects>
<viewController id="BV1-FR-VrT" userLabel="Adabot Mode" customClass="ViewController" customModule="Adafruit_AR" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="KUk-eV-fls">
<rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1194"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<arscnView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="MgE-aG-4qB">
<rect key="frame" x="0.0" y="0.0" width="375" height="811"/>
<rect key="frame" x="0.0" y="0.0" width="834" height="1193"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</arscnView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="MOVE AROUND TO SCAN A SURFACE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cBD-LG-gQT">
<rect key="frame" x="7" y="173" width="363" height="25.666666666666657"/>
<rect key="frame" x="7" y="129" width="822" height="26"/>
<fontDescription key="fontDescription" name="AvenirNext-DemiBold" family="Avenir Next" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
@ -661,14 +647,14 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<size key="shadowOffset" width="1" height="1"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uLI-mV-Wox">
<rect key="frame" x="278" y="716" width="66" height="66"/>
<rect key="frame" x="737" y="1098" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES"/>
<connections>
<action selector="toggleAction:" destination="BV1-FR-VrT" eventType="touchUpInside" id="x1v-Ne-U66"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="w89-iZ-RSu">
<rect key="frame" x="166" y="727" width="44" height="44"/>
<rect key="frame" x="396" y="1109" width="44" height="44"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" name="AvenirNext-Regular" family="Avenir Next" pointSize="15"/>
@ -680,7 +666,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="n5S-6N-62f">
<rect key="frame" x="31" y="716" width="66" height="66"/>
<rect key="frame" x="31" y="1098" width="66" height="66"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.0" green="0.4488220363" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
<color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
@ -690,7 +676,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFit" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="498-ob-xo5">
<rect key="frame" x="319" y="94" width="35" height="35"/>
<rect key="frame" x="778" y="94" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Info" image="?mark_icon"/>
<connections>
@ -698,7 +684,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<button opaque="NO" contentMode="scaleAspectFit" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fZt-j6-9yz">
<rect key="frame" x="319" y="44" width="35" height="35"/>
<rect key="frame" x="778" y="44" width="35" height="35"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
<state key="normal" title="Home" image="HomeIcon"/>
<connections>
@ -706,9 +692,9 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<visualEffectView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5y3-JG-2nO">
<rect key="frame" x="-44" y="0.0" width="463" height="812"/>
<rect key="frame" x="-44" y="0.0" width="922" height="1194"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="vNn-B3-qK9">
<rect key="frame" x="0.0" y="0.0" width="463" height="812"/>
<rect key="frame" x="0.0" y="0.0" width="922" height="1194"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
</view>
<blurEffect style="light"/>
@ -745,7 +731,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x0S-5Z-H4u">
<rect key="frame" x="324" y="304" width="42" height="33"/>
<rect key="frame" x="324" y="338" width="42" height="33"/>
<fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/>
<state key="normal" title="Done">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@ -755,13 +741,13 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Adabot Mode" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TiD-Yf-XKO">
<rect key="frame" x="289.66666666666669" y="113" width="109.66666666666669" height="24"/>
<rect key="frame" x="289.5" y="113" width="110" height="24"/>
<fontDescription key="fontDescription" name="AvenirNext-Medium" family="Avenir Next" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" lineBreakMode="tailTruncation" numberOfLines="20" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Df6-iJ-WjG" userLabel="help text">
<rect key="frame" x="186.66666666666663" y="166" width="316" height="167"/>
<rect key="frame" x="186.5" y="166" width="316" height="167"/>
<string key="text">• Look around a surface until the yellow focus
corners form a square.
• Tap the square to add Adabot.
@ -775,7 +761,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" alpha="0.80000001192092896" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="adafruit_logo2012-white-horiz-230w" translatesAutoresizingMaskIntoConstraints="NO" id="wo0-AE-5XX" userLabel="logo">
<rect key="frame" x="224.66666666666663" y="14" width="240" height="95"/>
<rect key="frame" x="224.5" y="14" width="240" height="95"/>
<constraints>
<constraint firstAttribute="height" constant="95" id="AAp-4a-csh"/>
<constraint firstAttribute="width" constant="240" id="IUs-bR-lt7"/>
@ -809,19 +795,19 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TAP A LETTER TO PLAY A CIRCRUIT PLAYGROUND VIDEO" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qF6-4V-xFK">
<rect key="frame" x="13" y="67" width="228" height="30.333333333333329"/>
<rect key="frame" x="13" y="23" width="228" height="30.5"/>
<fontDescription key="fontDescription" name="AvenirNext-Medium" family="Avenir Next" pointSize="11"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TAP THE VIDEO TO STOP " textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kPn-8Y-U3u">
<rect key="frame" x="13" y="124.00000000000001" width="228" height="16.666666666666671"/>
<rect key="frame" x="13" y="80" width="228" height="16.5"/>
<fontDescription key="fontDescription" name="AvenirNext-Medium" family="Avenir Next" pointSize="12"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PRESS AND HOLD EITHER THE VIDEO OR ADABOT TO EXIT A VIDEO" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rbN-i4-Sa7">
<rect key="frame" x="13" y="161" width="229" height="33"/>
<rect key="frame" x="13" y="117" width="229" height="33"/>
<fontDescription key="fontDescription" name="AvenirNext-Medium" family="Avenir Next" pointSize="12"/>
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
@ -864,7 +850,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="pYP-7V-B9Y"/>
<segue reference="u7e-oD-Y3K"/>
</inferredMetricsTieBreakers>
<resources>
<image name="?mark_icon" width="64" height="64"/>
@ -875,7 +861,7 @@ Hit the Letters icon to reveal letters that will play videos from Circuit Playgr
<image name="adabot" width="480" height="774"/>
<image name="adafruit_logo2012-white-horiz-230w" width="230" height="93"/>
<image name="cpx1" width="1218" height="1178"/>
<image name="letters-icon" width="170.66667175292969" height="170.66667175292969"/>
<image name="letters-icon" width="40" height="40"/>
<image name="test1" width="1050" height="1050"/>
</resources>
</document>

View file

@ -14,7 +14,7 @@ struct ARScenes {
static let minervaScene = SCNScene(named: "art.scnassets/Minerva.scn")!
static let circuitPlaygroundLabelScene = SCNScene(named: "art.scnassets/CPX_Displays.scn")!
static let blmLabelScene = SCNScene(named: "art.scnassets/BLM_Display.scn")!
//MARK:- Tarot Cards

View file

@ -0,0 +1,53 @@
//
// BLMBoardOverlay.swift
// Adafruit AR
//
// Created by Trevor Beaton on 2/24/21.
// Copyright © 2021 Vanguard Logic LLC. All rights reserved.
//
import SwiftUI
struct BLMBoardOverlay: View {
@State private var ZAxisRotation = false
var foreverAnimation: Animation {
Animation.linear(duration: 5.0)
.repeatForever(autoreverses: false)
}
var body: some View {
ZStack{
CircleText(radius: 100, text: " BLACK L IVES M ATTER BLACK L IVES M ATTER ", kerning: 0)
}
// .rotation3DEffect(Angle.degrees(ZAxisRotation ? -180 : 0), axis: (x: 0, y: 0, z: 1))
// .animation(ZAxisRotation ? foreverAnimation : .default)
// .onAppear(){
// self.ZAxisRotation.toggle()
// }
// .rotationEffect(.degrees(ZAxisRotation ? 360: 0))
// .animation(ZAxisRotation ? foreverAnimation : .default)
// .onAppear(){
// self.ZAxisRotation.toggle()
// }
// .rotationEffect(Angle(degrees: ZAxisRotation ? 360 : 0))
// .animation(ZAxisRotation ? foreverAnimation : .none)
// .onAppear(){
// self.ZAxisRotation.toggle()
// }
}
}
struct BLMBoardOverlay_Previews: PreviewProvider {
static var previews: some View {
BLMBoardOverlay()
}
}

View file

@ -7,7 +7,7 @@
//
import AVFoundation
@available(iOS 13.0, *)
extension BoardViewController {

View file

@ -11,7 +11,7 @@ import ARKit
import SceneKit
@available(iOS 13.0, *)
extension BoardViewController {
//Gesture Recognizers & Actions

View file

@ -9,12 +9,11 @@
import ARKit
import SwiftUI
@available(iOS 13.0, *)
extension BoardViewController {
// Fool*
@available(iOS 13.0, *)
func arHostingController(for node: SCNNode, textForDialogue: [String]) {
// create a hosting controller with SwiftUI view
let arVC = UIHostingController(rootView: SwiftUITarotCardView(minervaDialogue: textForDialogue))
@ -33,6 +32,8 @@ extension BoardViewController {
// render the view on the plane geometry as a material
self.show(hostingVC: arVC, on: node)
}
}
@ -56,29 +57,30 @@ extension BoardViewController {
@available(iOS 13.0, *)
func arPICOHostingController(for node: SCNNode) {
// create a hosting controller with SwiftUI view
let arVC = UIHostingController(rootView: PICOBoardOverlay())
func arPICOHostingController(for node: SCNNode) {
// Do this on the main thread
DispatchQueue.main.async {
arVC.willMove(toParent: self)
// make the hosting VC a child to the main view controller
self.addChildViewController(arVC)
// self.addChildViewController(self.arVC)
// set the pixel size of the Card View
arVC.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
self.arVC.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
// add the ar card view as a subview to the main view
self.view.addSubview(arVC.view)
self.view.addSubview(self.arVC.view)
// render the view on the plane geometry as a material
self.showOverlay(hostingVC: arVC, on: node)
self.showOverlay(hostingVC: self.arVC, on: node)
// self.arVC.willMove(toParent: self)
self.arVC.didMove(toParent: self)
}
}
func showOverlay(hostingVC: UIHostingController<PICOBoardOverlay>, on node: SCNNode) {
// create a new material
let material = SCNMaterial()
@ -97,4 +99,131 @@ extension BoardViewController {
func arBLMHostingController(for node: SCNNode) {
// Do this on the main thread
DispatchQueue.main.async {
// make the hosting VC a child to the main view controller
// self.addChildViewController(self.arVC)
// set the pixel size of the Card View
self.blmVC.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
// add the ar card view as a subview to the main view
self.view.addSubview(self.blmVC.view)
// render the view on the plane geometry as a material
self.showBLMOverlay(hostingVC: self.blmVC, on: node)
// self.arVC.willMove(toParent: self)
self.blmVC.didMove(toParent: self)
}
}
func showBLMOverlay(hostingVC: UIHostingController<BLMBoardOverlay>, on node: SCNNode) {
// create a new material
let material = SCNMaterial()
// this allows the card to render transparent parts the right way
hostingVC.view.isOpaque = false
// set the diffuse of the material to the view of the Hosting View Controller
material.diffuse.contents = hostingVC.view
material.lightingModel = .constant
// Set the material to the geometry of the node (plane geometry)
node.geometry?.materials = [material]
hostingVC.view.backgroundColor = UIColor.clear
}
func arTeensy41HostingController(for node: SCNNode) {
print(#function)
// Do this on the main thread
DispatchQueue.main.async {
// make the hosting VC a child to the main view controller
// self.addChildViewController(self.arVC)
// set the pixel size of the Card View
self.teensyVC.view.frame = CGRect(x: 0, y: 0, width: 500, height: 500)
// add the ar card view as a subview to the main view
self.view.addSubview(self.teensyVC.view)
// render the view on the plane geometry as a material
self.showTeensyOverlay(hostingVC: self.teensyVC, on: node)
// self.arVC.willMove(toParent: self)
self.teensyVC.didMove(toParent: self)
}
}
func showTeensyOverlay(hostingVC: UIHostingController<Teensy41BoardOverlay>, on node: SCNNode) {
print(#function)
DispatchQueue.main.async {
// create a new material
let material = SCNMaterial()
// this allows the card to render transparent parts the right way
hostingVC.view.isOpaque = false
// set the diffuse of the material to the view of the Hosting View Controller
material.diffuse.contents = hostingVC.view
material.lightingModel = .constant
// Set the material to the geometry of the node (plane geometry)
node.geometry?.materials = [material]
hostingVC.view.backgroundColor = UIColor.clear
}
}
func arpi400HostingController(for node: SCNNode) {
// Do this on the main thread
DispatchQueue.main.async {
// make the hosting VC a child to the main view controller
// self.addChildViewController(self.arVC)
// set the pixel size of the Card View
self.pi400VC.view.frame = CGRect(x: 0, y: 0, width: 1000, height: 500)
// add the ar card view as a subview to the main view
self.view.addSubview(self.pi400VC.view)
// render the view on the plane geometry as a material
self.showpi400Overlay(hostingVC: self.pi400VC, on: node)
// self.arVC.willMove(toParent: self)
self.pi400VC.didMove(toParent: self)
}
}
func showpi400Overlay(hostingVC: UIHostingController<Pi400Overlay>, on node: SCNNode) {
// create a new material
let material = SCNMaterial()
// this allows the card to render transparent parts the right way
hostingVC.view.isOpaque = false
// set the diffuse of the material to the view of the Hosting View Controller
material.diffuse.contents = hostingVC.view
material.lightingModel = .constant
// Set the material to the geometry of the node (plane geometry)
node.geometry?.materials = [material]
hostingVC.view.backgroundColor = UIColor.clear
}
}

View file

@ -8,13 +8,38 @@
import UIKit
import ARKit
import SwiftUI
import RealityKit
@available(iOS 13.0, *)
class BoardViewController: UIViewController, ARSCNViewDelegate {
//Pico
let arVC = UIHostingController(rootView: PICOBoardOverlay())
let blmVC = UIHostingController(rootView: BLMBoardOverlay())
let teensyVC = UIHostingController(rootView: Teensy41BoardOverlay())
let pi400VC = UIHostingController(rootView: Pi400Overlay())
func removeContentController(content: UIViewController) {
DispatchQueue.main.async {
content.willMove(toParentViewController: nil)
content.view.removeFromSuperview()
content.removeFromParentViewController()
}
}
// func presentSwiftUIView() {
// let swiftUIView = SwiftUIView()
// let hostingController = UIHostingController(rootView: swiftUIView)
// present(hostingController, animated: true, completion: nil)
// }
// Create a session configuration
let configuration = ARImageTrackingConfiguration()
var audioPlayer : AVAudioPlayer?
//For Minerva AR
@ -117,6 +142,8 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
var cpxStandAloneLabel = SCNNode()
var BLMLabel = SCNNode()
var fadeOut = SCNAction()
var fadeIn = SCNAction()
@ -137,6 +164,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet weak var boardInfoButton: UIButton!
@IBOutlet weak var homeButton: UIButton!
@IBAction func boardInfoAction(_ sender: Any) {
animateIn()
@ -155,6 +183,18 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet weak var boardItemView: UIView!
// let newViewController = NewViewController()
// self.navigationController?.pushViewController(newViewController, animated: true)
@IBAction func homeButtonAction(_ sender: Any) {
//self.performSegue(withIdentifier: "unwindToMenu", sender: self)
}
@IBAction func unwindToMenu(segue: UIStoryboardSegue) {}
func animateIn() {
self.view.addSubview(boardItemView)
@ -242,19 +282,21 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
boardSceneView.session.delegate = self as? ARSessionDelegate
// let worldAnchor = ARWorldAnchor(column3: [0, 0,-4, 1])
// boardSceneView.session.add(anchor: worldAnchor)
// Set the scene to the view
boardSceneView.scene = scene
sampleMaskSetup()
loadMinervaModel()
}
func removeAllFromScene(){
print("Removing all from scene")
boardSceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
node.removeFromParentNode()
}
}
@ -262,15 +304,12 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
func startImageTracking (){
// Create a session configuration
let configuration = ARImageTrackingConfiguration()
guard let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "Photos", bundle: Bundle.main) else {
print("No images available")
@ -282,16 +321,32 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
configuration.isAutoFocusEnabled = true
// Run the view's session
boardSceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
boardSceneView.session.run(configuration, options: [.resetTracking,.removeExistingAnchors])
}
// private lazy var myFunction: Void = {
// // Do something once
// }()
private lazy var restartImageTracking: Void = {
boardSceneView.session.run(configuration, options: [.resetTracking,.removeExistingAnchors])
}()
override func viewDidDisappear(_ animated: Bool) {
// print("Gone")
// DispatchQueue.main.async {
// self.willMove(toParentViewController: nil)
// self.arVC.view.removeFromSuperview()
// self.removeFromParentViewController()
// }
// removeAllFromScene()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Pause the view's session
boardSceneView.session.pause()
// boardSceneView.session.pause()
}
@ -447,6 +502,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
//Create AR Plane
func ARPlaneAnchor(imageReferenceAnchor: ARImageAnchor, mainNode: SCNNode) {
print("Function: \(#function),File: \(#file),Line: \( #line)")
let plane = SCNPlane(width: imageReferenceAnchor.referenceImage.physicalSize.width, height: imageReferenceAnchor.referenceImage.physicalSize.height)
@ -458,7 +514,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
mainNode.addChildNode(planeNode)
DispatchQueue.main.async {
print(#line)
self.scanLabel.isHidden = true
self.sampleMask.isHidden = true
@ -470,7 +526,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
//Create AR Plane
func SwiftUIARPlaneAnchor(imageReferenceAnchor: ARImageAnchor, mainNode: SCNNode) {
print("Function: \(#function),File: \(#file),Line: \( #line)")
_ = SCNMaterial()
let plane = SCNPlane(width: imageReferenceAnchor.referenceImage.physicalSize.width + 0.5, height: imageReferenceAnchor.referenceImage.physicalSize.height + 0.5)
@ -497,7 +553,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
}
// MARK: - ARSCNViewDelegate
@ -532,6 +588,7 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
print("Function: \(#function),File: \(#file),Line: \( #line)")
//This node is used to place the Plane used to plant AR models.
let node = SCNNode()
@ -1714,18 +1771,69 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
arHostingController(for: planeNode, textForDialogue: ListOfTexts.heirophantText)
//MARK:- PICO
case "pico4":
DispatchQueue.main.async {
print("Recognized PICO Board.")
ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
SwiftUIARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.SwiftUIARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
arPICOHostingController(for: planeNode)
self.arPICOHostingController(for: planeNode)
}
//MARK:- Teensy
case "teensy":
DispatchQueue.main.async {
// _ = self.restartImageTracking
print("Recognized teensy Board.")
self.ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.SwiftUIARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.arTeensy41HostingController(for: planeNode)
}
//MARK:- pi400
case "pi400":
DispatchQueue.main.async {
print("Recognized pi400 Board.")
self.ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.SwiftUIARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.arpi400HostingController(for: planeNode)
}
//MARK:- BLM
case "backBLM":
// _ = restartImageTracking
DispatchQueue.main.async {
print("Recognized BLM - Back Board.")
self.ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.ARObjectToScene(ARObject: self.BLMLabel, ARScene: ARScenes.blmLabelScene, planeNode: node, size: SCNVector3(0.03,0.03,0.03))
}
case "fist":
// _ = restartImageTracking
//removeContentController(content: blmVC)
DispatchQueue.main.async {
print("Recognized BLM Board.")
self.ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.SwiftUIARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
self.arBLMHostingController(for: planeNode)
}
case "cpx":
ARPlaneAnchor(imageReferenceAnchor: imageAnchor, mainNode: node)
@ -1878,34 +1986,33 @@ class BoardViewController: UIViewController, ARSCNViewDelegate {
}
extension Notification.Name {
static let notifTest = Notification.Name(rawValue: "Test")
}
extension BoardViewController {
//@available(iOS 13.0, *)
//extension BoardViewController {
// func renderer(_ renderer: SCNSceneRenderer,didAdd node: SCNNode,for anchor: ARAnchor) {
//
// guard let worldAnchor = anchor as? ARWorldAnchor
// else { return }
//
// print(worldAnchor.isKind(of: ARWorldAnchor.self))
//
// // it prints "true"
//
// let earthNode = SCNNode()
// earthNode.geometry = SCNSphere(radius: 0.8)
//
// // let path = "art.scnassets/earthAlbedo.jpg"
//
// if #available(iOS 14.0, *) {
// earthNode.geometry?.firstMaterial?.diffuse.contents = UIColor(Color(#colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)))
// } else {
// // Fallback on earlier versions
// }
//
// node.position = minervaModel.position
//
// node.addChildNode(earthNode)
// }
//}
/// Add a SwiftUI `View` as a child of the input `UIView`.
/// - Parameters:
/// - swiftUIView: The SwiftUI `View` to add as a child.
/// - view: The `UIView` instance to which the view should be added.
func addSubSwiftUIView<Content>(_ swiftUIView: Content, to view: UIView) where Content : View {
let hostingController = UIHostingController(rootView: swiftUIView)
/// Add as a child of the current view controller.
addChildViewController(hostingController)
/// Add the SwiftUI view to the view controller view hierarchy.
view.addSubview(hostingController.view)
/// Setup the contraints to update the SwiftUI view boundaries.
hostingController.view.translatesAutoresizingMaskIntoConstraints = false
let constraints = [
hostingController.view.topAnchor.constraint(equalTo: view.topAnchor),
hostingController.view.leftAnchor.constraint(equalTo: view.leftAnchor),
view.bottomAnchor.constraint(equalTo: hostingController.view.bottomAnchor),
view.rightAnchor.constraint(equalTo: hostingController.view.rightAnchor)
]
NSLayoutConstraint.activate(constraints)
/// Notify the hosting controller that it has been moved to the current view controller.
hostingController.didMove(toParent: self)
}
}

View file

@ -0,0 +1,92 @@
//
// CircleLabel.swift
// Adafruit AR
//
// Created by Trevor Beaton on 2/24/21.
// Copyright © 2021 Vanguard Logic LLC. All rights reserved.
//
import Foundation
import SwiftUI
struct CircleText_Preview: PreviewProvider {
static var previews: some View {
CircleText(radius: 200, text: "Dwarves Foundation Looking for Golang, FE candidates")
}
}
//MARK: - CircleLabel
struct CircleText: View {
var radius: Double
var text: String
var kerning: CGFloat = 0.0
private var texts: [(offset: Int, element:Character)] {
return Array(text.enumerated())
}
@State var textSizes: [Int:Double] = [:]
var body: some View {
ZStack {
ForEach(self.texts, id: \.self.offset) { (offset, element) in
VStack {
Text(String(element))
.font(.title2)
.bold()
.foregroundColor(Color.yellow)
.kerning(self.kerning)
.background(Sizeable())
.onPreferenceChange(WidthPreferenceKey.self, perform: { size in
self.textSizes[offset] = Double(size)
})
Spacer()
}
.rotationEffect(self.angle(at: offset))
}
}
.rotationEffect(-self.angle(at: self.texts.count-1)/2)
.frame(width: 230, height: 230, alignment: .center)
}
private func angle(at index: Int) -> Angle {
guard let labelSize = textSizes[index] else {return .radians(0)}
let percentOfLabelInCircle = labelSize / radius.perimeter
let labelAngle = 2 * Double.pi * percentOfLabelInCircle
let totalSizeOfPreChars = textSizes.filter{$0.key < index}.map{$0.value}.reduce(0,+)
let percenOfPreCharInCircle = totalSizeOfPreChars / radius.perimeter
let angleForPreChars = 2 * Double.pi * percenOfPreCharInCircle
return .radians(angleForPreChars + labelAngle)
}
}
extension Double {
var perimeter: Double {
return self * 2 * .pi
}
}
//Get size for label helper
struct WidthPreferenceKey: PreferenceKey {
typealias Value = CGFloat
static var defaultValue = CGFloat(0)
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
}
}
struct Sizeable: View {
var body: some View {
GeometryReader { geometry in
Color.clear
.preference(key: WidthPreferenceKey.self, value: geometry.size.width)
}
}
}

View file

@ -0,0 +1,26 @@
//
// CurvedText.swift
// Adafruit AR
//
// Created by Trevor Beaton on 2/24/21.
// Copyright © 2021 Vanguard Logic LLC. All rights reserved.
//
import SwiftUI
struct CurvedText: View {
var body: some View {
RoundedRectangle(cornerRadius: 1, style: .continuous)
.fill(Color.clear)
.frame(width: 200, height: 200)
.border(Color.gray, width: 2)
.position(x: 250, y: 250)
}
}
struct CurvedText_Previews: PreviewProvider {
static var previews: some View {
CurvedText()
}
}

View file

@ -8,7 +8,8 @@
import SwiftUI
@available(iOS 13.0, *)
struct Data: Identifiable {
let id = UUID()
let value: String
@ -24,13 +25,18 @@ let bgColor4: Color
let prefix5: String
let bgColor5: Color
}
@available(iOS 13.0, *)
struct PICOBoardOverlay: View {
@State private var viewY = 0
@State private var debugY = 0
var body: some View {
let data = [Data(value: "40",prefix:"VBUS", fgColor: .white, bgcolor: .red, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
@ -107,9 +113,9 @@ struct PICOBoardOverlay: View {
Data(value: "14", prefix: "GP10", fgColor: .black, bgcolor: .yellow, prefix2: "PWM5A", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "SCK1", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SDA1", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "15", prefix: "GP11", fgColor: .black, bgcolor: .yellow, prefix2: "PWM2A", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "DI0", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SDA0", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "TX1", bgColor5: Color(#colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1))),
Data(value: "15", prefix: "GP11", fgColor: .black, bgcolor: .yellow, prefix2: "PWM2A", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "DI0", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SCL1", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "TX1", bgColor5: Color(#colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1))),
Data(value: "16", prefix: "GP12", fgColor: .black, bgcolor: .yellow, prefix2: "PWM5B", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "D01", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SCL1", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "TX0", bgColor5: Color(#colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1))),
Data(value: "16", prefix: "GP12", fgColor: .black, bgcolor: .yellow, prefix2: "PWM5B", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "D01", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SDA0", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "TX0", bgColor5: Color(#colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1))),
Data(value: "17", prefix: "GP13", fgColor: .black, bgcolor: .yellow, prefix2: "PWM6B", bgColor2: Color(#colorLiteral(red: 0.3326305836, green: 0.9686274529, blue: 0.6167510894, alpha: 1)), prefix3: "CS1", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "SCL0", bgColor4: Color(#colorLiteral(red: 0.8072112728, green: 0.6713793157, blue: 0.9686274529, alpha: 1)),prefix5: "RX0", bgColor5: Color(#colorLiteral(red: 0.9098039269, green: 0.4784313738, blue: 0.6431372762, alpha: 1))),
@ -122,17 +128,19 @@ struct PICOBoardOverlay: View {
if #available(iOS 14.0, *) {
ZStack{
//Border
RoundedRectangle(cornerRadius: 3, style: .circular)
RoundedRectangle(cornerRadius: 1, style: .continuous)
.fill(Color.clear)
.frame(width: 162, height: 270)
.frame(width: 167, height: 272)
.border(Color.gray, width: 2)
.offset(x: 0, y:25)
.position(x: 250, y: CGFloat(viewY))
//.position(x: 250, y: 250)
pintOutDEBUGStruct()
.offset(x: 0, y: 260)
.position(x: 250, y: CGFloat(debugY))
HStack{
@ -143,26 +151,44 @@ struct PICOBoardOverlay: View {
}
.frame(width: 170, height: 13.5, alignment: .leading)
}
.offset(x: 245, y: 23.8)
.position(x: 418, y: CGFloat(viewY))
//.offset(x: 245, y: 23.8)
VStack(alignment: .trailing) {
ForEach(data2) { (pinout) in
pintOutStruct2(value: pinout.value, prefix: pinout.prefix, fgcolor: pinout.fgColor, bgcolor: pinout.bgcolor, prefix2: pinout.prefix2, bgColor2: pinout.bgColor2, prefix3: pinout.prefix3, bgColor3: pinout.bgColor3, prefix4: pinout.prefix4, bgColor4: pinout.bgColor4, prefix5: pinout.prefix5, bgColor5: pinout.bgColor5)
}
.frame(width: 150, height: 13.5, alignment: .trailing)
.frame(width: 150, height: 13.4, alignment: .trailing)
}
.offset(x: -245, y: 25)
.position(x: -161, y: CGFloat(viewY))
//.offset(x: -245, y: 25)
}
}
.onAppear(perform: {
if UIDevice.current.userInterfaceIdiom == .phone {
//iPhone
viewY = 217
debugY = 370
}else {
//iPad
viewY = 250
debugY = 400
}
})
.rotationEffect(.degrees(-180))
}
}
}
@available(iOS 13.0, *)
struct pintOutDEBUGStruct: View {
@ -173,16 +199,15 @@ var body: some View {
.font(.system(size: 7))
.fontWeight(.black)
.foregroundColor(.black)
.background(Color.gray)
.padding(0.1)
.padding(0.2)
Text("GND")
.font(.system(size: 7))
.font(.system(size: 8))
.fontWeight(.black)
.foregroundColor(Color.white)
.background(Color.black)
.padding(0.1)
.padding(0.2)
Text("SWDI0")
@ -190,10 +215,9 @@ var body: some View {
.fontWeight(.black)
.foregroundColor(Color.black)
.background(Color.gray)
.padding(0.2)
}
.offset(x: 85, y: 0)
.rotationEffect(.degrees(-90))
}
@ -201,7 +225,7 @@ var body: some View {
}
@available(iOS 13.0, *)
struct pintOutStruct: View {
let value: String
@ -268,7 +292,7 @@ var body: some View {
}
@available(iOS 13.0, *)
struct pintOutStruct2: View {
let value: String
@ -295,11 +319,13 @@ var body: some View {
.foregroundColor(fgcolor)
.background(bgColor5)
Text(prefix4)
.font(.system(size: 8))
.fontWeight(.black)
.foregroundColor(fgcolor)
.background(bgColor4)
.cornerRadius(25)
Text(prefix3)
.font(.system(size: 8))
@ -327,17 +353,19 @@ var body: some View {
.foregroundColor(.black)
.background(Color.gray)
}
}
}
struct PICOBoardOverlay_Previews: PreviewProvider {
@available(iOS 13.0, *)
static var previews: some View {
PICOBoardOverlay()
.previewDevice(PreviewDevice(rawValue: "iPhone 11 Max"))
.previewDevice(PreviewDevice(rawValue: "iPad Pro (11-inch) (2nd generation)"))
.previewDisplayName("iPhone 11 Max")
}
}

View file

@ -0,0 +1,314 @@
//
// PICOBoardOverlay.swift
// Adafruit AR
//
// Created by Trevor Beaton on 1/26/21.
// Copyright © 2021 Vanguard Logic LLC. All rights reserved.
//
import SwiftUI
struct pi400Data: Identifiable {
let id = UUID()
let pinOutLabel: String
let pinOutBGcolor: Color
let pinOutFGcolor: Color
let pinOutLabel2: String
let pinOutBGcolor2: Color
let pinOutFGcolor2: Color
let GPIONumber: String
let circleColor: Color
}
struct Pi400Overlay: View {
@State private var viewY = 0
@State private var debugY = 0
var body: some View {
let pi400DataFirstRow = [
pi400Data(pinOutLabel: "5V", pinOutBGcolor: Color(#colorLiteral(red: 1, green: 0.3383003439, blue: 0.348613691, alpha: 1)), pinOutFGcolor: .white, pinOutLabel2: "Power", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .red),
pi400Data(pinOutLabel: "5V", pinOutBGcolor: Color(#colorLiteral(red: 1, green: 0.3383003439, blue: 0.348613691, alpha: 1)), pinOutFGcolor: .white, pinOutLabel2: "Power", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .red),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 14", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(TXD)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "8", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 15", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(RXD)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "10", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 18", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "PCM_CLK", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "12", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 23", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "16", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 24", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "18", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 25", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "22", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 8", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(CE0)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "24", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 7", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(CE1)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "26", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 1", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(ID_SC)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "28", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 12", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(PWM0)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "32", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 16", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "36", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 20", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "PCM_DIN", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "38", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 21", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "PCM_OUT", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "40", circleColor: .yellow),
]
let pi400DataSecondRow = [
pi400Data(pinOutLabel: "3V3", pinOutBGcolor: Color(#colorLiteral(red: 1, green: 0.3383003439, blue: 0.348613691, alpha: 1)), pinOutFGcolor: .white, pinOutLabel2: "Power", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .red),
pi400Data(pinOutLabel: "GPIO 2", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(SDA)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "3", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 3", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(SCL)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "5", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 4", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(GPCLK0)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "7", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 17", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "11", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 27", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "13", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 22", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "15", circleColor: .yellow),
pi400Data(pinOutLabel: "3V3", pinOutBGcolor: Color(#colorLiteral(red: 1, green: 0.3383003439, blue: 0.348613691, alpha: 1)), pinOutFGcolor: .white, pinOutLabel2: "Power", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .red),
pi400Data(pinOutLabel: "GPIO 10", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(MOSI)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "19", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 9", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(MISO)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "21", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 11", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(SCLK)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "23", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .black),
pi400Data(pinOutLabel: "GPIO 0", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(ID_SC)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "27", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 5", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "29", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 6", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "31", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 13", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "(PWM1)", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "33", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 19", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "PCM_FS", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "35", circleColor: .yellow),
pi400Data(pinOutLabel: "GPIO 26", pinOutBGcolor: Color(#colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "37", circleColor: .yellow),
pi400Data(pinOutLabel: "Ground", pinOutBGcolor: Color(#colorLiteral(red: 0.8039215803, green: 0.8039215803, blue: 0.8039215803, alpha: 1)), pinOutFGcolor: .black, pinOutLabel2: "", pinOutBGcolor2: .clear, pinOutFGcolor2: .blue, GPIONumber: "", circleColor: .black)
]
VStack{
HStack() {
ForEach(pi400DataFirstRow) { (pinout) in
pi400GPIOUpperRow(pinOutLabel: pinout.pinOutLabel, pinOutBGcolor: pinout.pinOutBGcolor, pinOutFGcolor: pinout.pinOutFGcolor, pinOutLabel2: pinout.pinOutLabel2, pinOutBGcolor2: pinout.pinOutBGcolor2, pinOutFGcolor2: pinout.pinOutFGcolor2, GPIONumber: pinout.GPIONumber, circleColor: pinout.circleColor)
}
.frame(width: 12, height: 40)
}
.position(x: 0, y: -50)
HStack() {
ForEach(pi400DataSecondRow) { (pinout) in
pi400GPIOLowerRow(pinOutLabel: pinout.pinOutLabel, pinOutBGcolor: pinout.pinOutBGcolor, pinOutFGcolor: pinout.pinOutFGcolor, pinOutLabel2: pinout.pinOutLabel2, pinOutBGcolor2: pinout.pinOutBGcolor2, pinOutFGcolor2: pinout.pinOutFGcolor2, GPIONumber: pinout.GPIONumber, circleColor: pinout.circleColor)
}
.frame(width: 12, height: 40)
}
.position(x: 0, y: 25)
}
.onAppear(perform: {
if UIDevice.current.userInterfaceIdiom == .phone {
//iPhone
viewY = 220
}else {
//iPad
viewY = 255
}
})
.fixedSize(horizontal: true, vertical: true)
// .rotationEffect(.degrees(-90))
}
struct pi400GPIOUpperRow: View {
let pinOutLabel: String
let pinOutBGcolor: Color
let pinOutFGcolor: Color
let pinOutLabel2: String
let pinOutBGcolor2: Color
let pinOutFGcolor2: Color
let GPIONumber: String
let circleColor: Color
var body: some View {
VStack{
VStack{
Text(pinOutLabel)
.foregroundColor(pinOutFGcolor)
.font(.system(size: 8))
.fontWeight(.bold)
.frame(width: 35, height: 10)
.background(pinOutBGcolor)
Text(pinOutLabel2)
.foregroundColor(pinOutFGcolor)
.font(.system(size: 6))
.fontWeight(.medium)
.frame(width: 35, height: 10)
.background(pinOutBGcolor)
}
.rotationEffect(.degrees(-90))
//Circle Group
ZStack {
//Circle
Circle()
.foregroundColor(circleColor)
//Text within the circle
Text(GPIONumber)
.font(.system(size: 10))
.fontWeight(.regular)
}
.frame(width: 15, height: 15)
.padding(.top, 5)
// Rectangle()
// .frame(width: 2, height: 70)
}
}
}
struct pi400GPIOLowerRow: View {
let pinOutLabel: String
let pinOutBGcolor: Color
let pinOutFGcolor: Color
let pinOutLabel2: String
let pinOutBGcolor2: Color
let pinOutFGcolor2: Color
let GPIONumber: String
let circleColor: Color
var body: some View {
VStack{
//Circle Group
ZStack {
//Circle
Circle()
.foregroundColor(circleColor)
//Text within the circle
Text(GPIONumber)
.font(.system(size: 10))
.fontWeight(.medium)
}
.frame(width: 15, height: 15)
.padding(.bottom, 5)
VStack{
Text(pinOutLabel)
.foregroundColor(pinOutFGcolor)
.font(.system(size: 8))
.fontWeight(.bold)
.frame(width: 35, height: 10)
.background(pinOutBGcolor)
Text(pinOutLabel2)
.foregroundColor(pinOutFGcolor)
.font(.system(size: 6))
.fontWeight(.medium)
.frame(width: 35, height: 10)
.background(pinOutBGcolor)
}
.rotationEffect(.degrees(-90))
}
}
}
struct Pi400Overlay_Previews: PreviewProvider {
static var previews: some View {
Pi400Overlay()
.previewDevice(PreviewDevice(rawValue: "iPad Pro (11-inch) (2nd generation)"))
.previewDisplayName("iPad Pro (11-inch) (2nd generation)")
}
}
}

View file

@ -0,0 +1,195 @@
//
// PICOBoardOverlay.swift
// Adafruit AR
//
// Created by Trevor Beaton on 1/26/21.
// Copyright © 2021 Vanguard Logic LLC. All rights reserved.
//
import SwiftUI
struct Teensy41BoardOverlay: View {
@State private var viewY = 0
@State private var debugY = 0
var body: some View {
let data = [
Data(value: "",prefix:"Vin (3.6 to 5.5 Volts)", fgColor: .white, bgcolor: .red, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "",prefix:"GND", fgColor: .white, bgcolor: .black,prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "",prefix:"3.3V (250 mA max)", fgColor: .white, bgcolor: .red, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "23", prefix: "A9", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "CRX1", bgColor2: Color(#colorLiteral(red: 1, green: 0.6997302593, blue: 0.8755037922, alpha: 1)), prefix3: "MCLK1", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "22", prefix: "A8", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "CTX1", bgColor2: Color(#colorLiteral(red: 1, green: 0.6997302593, blue: 0.8755037922, alpha: 1)), prefix3: " ", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "21", prefix: "A7", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "RX5", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "BCLK1", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "20", prefix: "A6", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "TX5", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "LRCLK1", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "19", prefix: "A5", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: "SCL", bgColor3: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "18", prefix: "A4", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: "SDA", bgColor3: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "17", prefix: "A3", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "TX4", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "SDA1", bgColor3: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "16", prefix: "A2", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "RX4", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "SCL1", bgColor3: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "15", prefix: "A1", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "RX3", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "S/PDIF IN", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "14", prefix: "A0", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "TX3", bgColor2: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix3: "S/PDIF OUT", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "13", prefix: "(LED)", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix2: "SCK", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: " ", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "",prefix:"GND", fgColor: .white, bgcolor: .black,prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "41",prefix:"A17", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "", bgColor2:.clear, prefix3: "", bgColor3: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "40",prefix:"A16", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "", bgColor2:.clear, prefix3: "", bgColor3: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "39", prefix: "A15", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "MISO1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "OUT1A", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "38", prefix: "A14", fgColor: .black, bgcolor: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)), prefix2: "CS1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "IN1", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "37", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "CS", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "36", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "CS", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "35", prefix: "TX8", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "34", prefix: "RX8", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: Color(#colorLiteral(red: 0.8178200382, green: 0.6525374868, blue: 1, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "33", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2: .clear, prefix3: "MCLK2", bgColor3: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)), prefix4: "", bgColor4: .clear,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)))
]
let data2 = [
Data(value: "",prefix:"GND", fgColor: .white, bgcolor: .black,prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "0",prefix:"RX1", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: "CS1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "CRX2", bgColor3: Color(#colorLiteral(red: 1, green: 0.7170018578, blue: 0.7933105978, alpha: 1)), prefix4: "PWM", bgColor4: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "1",prefix:"TX1", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: "MISO1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "CTX2", bgColor3: Color(#colorLiteral(red: 1, green: 0.7170018578, blue: 0.7933105978, alpha: 1)), prefix4: "PWM", bgColor4: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "2",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "OUT2", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "3",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "LRCLK2", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "4",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "BCLK2", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "5",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "IN2", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "6",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "OUT1D", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "7",prefix:"RX2", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "OUT1A", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "8",prefix:"TX2", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "IN1", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "9",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: " ", bgColor2: .clear, prefix3: " ", bgColor3: .clear, prefix4: "OUT1C", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "10",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2:.clear, prefix3: "CS", bgColor3: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix4: "OUT1D", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "11",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2:.clear, prefix3: "MOSI", bgColor3: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix4: "CTX1", bgColor4: Color(#colorLiteral(red: 1, green: 0.7170018578, blue: 0.7933105978, alpha: 1)) ,prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "12",prefix:" ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2:.clear, prefix3: "MISO", bgColor3: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix4: "MQSL", bgColor4: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "",prefix:"3.3V",fgColor: .white, bgcolor: .red, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "", bgColor5: .clear),
Data(value: "24", prefix: "A10", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1)), prefix2: "TX6", bgColor2: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix3: "SCL2", bgColor3: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix4: "PWM", bgColor4: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "25", prefix: "A11", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1)), prefix2: "RX6", bgColor2: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix3: "SDA2", bgColor3: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix4: "PWM", bgColor4: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "26", prefix: "A12", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1)), prefix2: "MOSI1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.9411764741, green: 0.4980392158, blue: 0.3529411852, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "27", prefix: "A13", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.9568627477, green: 0.6588235497, blue: 0.5450980663, alpha: 1)), prefix2: "SCK1", bgColor2: Color(#colorLiteral(red: 0.721568644, green: 0.8862745166, blue: 0.5921568871, alpha: 1)), prefix3: "", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.9411764741, green: 0.4980392158, blue: 0.3529411852, alpha: 1)),prefix5: "", bgColor5: .clear),
Data(value: "28", prefix: "RX7", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: "", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "29", prefix: "TX7", fgColor: .black, bgcolor: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)), prefix2: " ", bgColor2: .clear, prefix3: "", bgColor3: Color(#colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1)), prefix4: "", bgColor4: Color(#colorLiteral(red: 0.7311126544, green: 0.6819911648, blue: 0.9686274529, alpha: 1)),prefix5: "PWM", bgColor5: Color(#colorLiteral(red: 1, green: 0.7205477193, blue: 0.5445609691, alpha: 1))),
Data(value: "30", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "CRX3", bgColor5: Color(#colorLiteral(red: 1, green: 0.7170018578, blue: 0.7933105978, alpha: 1))),
Data(value: "31", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "CTX3", bgColor5: Color(#colorLiteral(red: 1, green: 0.7170018578, blue: 0.7933105978, alpha: 1))),
Data(value: "32", prefix: " ", fgColor: .black, bgcolor: .clear, prefix2: "", bgColor2: .clear, prefix3: "", bgColor3: .clear, prefix4: "", bgColor4: .clear,prefix5: "OUT1B", bgColor5: Color(#colorLiteral(red: 0.9764705896, green: 0.850980401, blue: 0.5490196347, alpha: 1)))
]
ZStack{
//Border
RoundedRectangle(cornerRadius: 1, style: .continuous)
.fill(Color.clear)
.frame(width: 140, height: 282.5)
.border(Color.gray, width: 2)
.position(x: 250, y: CGFloat(viewY))
HStack{
VStack(alignment: .leading) {
ForEach(data) { (pinout) in
pintOutStruct(value: pinout.value, prefix: pinout.prefix, fgcolor: pinout.fgColor, bgcolor: pinout.bgcolor, prefix2: pinout.prefix2, bgColor2: pinout.bgColor2, prefix3: pinout.prefix3, bgColor3: pinout.bgColor3, prefix4: pinout.prefix4, bgColor4: pinout.bgColor4, prefix5: pinout.prefix5, bgColor5: pinout.bgColor5)
}
.frame(width: 150, height: 11.8, alignment: .leading)
}
.position(x: 395, y: CGFloat(viewY))
VStack(alignment: .trailing) {
ForEach(data2) { (pinout) in
pintOutStruct2(value: pinout.value, prefix: pinout.prefix, fgcolor: pinout.fgColor, bgcolor: pinout.bgcolor, prefix2: pinout.prefix2, bgColor2: pinout.bgColor2, prefix3: pinout.prefix3, bgColor3: pinout.bgColor3, prefix4: pinout.prefix4, bgColor4: pinout.bgColor4, prefix5: pinout.prefix5, bgColor5: pinout.bgColor5)
}
.frame(width: 150, height: 11.8, alignment: .trailing)
}
.position(x: -148, y: CGFloat(viewY))
}
}
.onAppear(perform: {
if UIDevice.current.userInterfaceIdiom == .phone {
//iPhone
viewY = 220
}else {
//iPad
viewY = 255
}
})
.rotationEffect(.degrees(-180))
}
}
struct Teensy41BoardOverlay_Previews: PreviewProvider {
static var previews: some View {
Teensy41BoardOverlay()
.previewDevice(PreviewDevice(rawValue: "iPhone 12 Pro Max"))
.previewDisplayName("iPhone 12 Pro Max")
}
}

View file

@ -6,14 +6,19 @@
// Copyright © 2018 Vanguard Logic LLC. All rights reserved.
//
import Foundation
import ARKit
import UIKit
class MainViewController: UIViewController {
class MainViewController: UIViewController, ARSCNViewDelegate {
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"]
@IBOutlet weak var boardView: ARSCNView!
@IBOutlet weak var qrModeIcon: UIButton!
@IBOutlet weak var qrLabel: UILabel!
@ -32,6 +37,15 @@ class MainViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
versionString()
let scene = SCNScene()
// Set the view's delegate
boardView.delegate = self
boardView.session.delegate = self as? ARSessionDelegate
boardView.scene = scene
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "CPX-QRCode_v2.jpg"
"filename" : "CPX-QRCode_v2.jpg",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

12
Assets.xcassets/Photos.arresourcegroup/Contents.json Executable file → Normal file
View file

@ -4,6 +4,9 @@
"version" : 1
},
"resources" : [
{
"filename" : "backBLM.arreferenceimage"
},
{
"filename" : "ChariotCard.arreferenceimage"
},
@ -25,6 +28,9 @@
{
"filename" : "EmpressCard.arreferenceimage"
},
{
"filename" : "fist.arreferenceimage"
},
{
"filename" : "FOCCard.arreferenceimage"
},
@ -61,6 +67,9 @@
{
"filename" : "NeoTrellis_v2.arreferenceimage"
},
{
"filename" : "pi400.arreferenceimage"
},
{
"filename" : "pico4.arreferenceimage"
},
@ -85,6 +94,9 @@
{
"filename" : "SunCard.arreferenceimage"
},
{
"filename" : "teensy.arreferenceimage"
},
{
"filename" : "TemperanceCard.arreferenceimage"
},

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "CrickitQRCode_v2.jpg"
"filename" : "CrickitQRCode_v2.jpg",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

View file

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "GC-3.png"
"filename" : "GC-3.png",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "HallowingQRcode_v2.jpg"
"filename" : "HallowingQRcode_v2.jpg",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

View file

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "NeoTrellis_v2.jpg"
"filename" : "NeoTrellis_v2.jpg",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

View file

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "backBLM.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

View file

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "pico4.png",
"filename" : "fist.png",
"idiom" : "universal"
}
],
@ -10,6 +10,6 @@
"version" : 1
},
"properties" : {
"width" : 0.23999999999999999
"width" : 0.20000000000000001
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

View file

@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "pi40012.jpg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"unit" : "inches",
"width" : 26
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "pyportal-image.png"
"filename" : "pyportal-image.png",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001

View file

Before

Width:  |  Height:  |  Size: 467 KiB

After

Width:  |  Height:  |  Size: 467 KiB

View file

@ -1,13 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "pyportal.png"
"filename" : "pyportal.png",
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.32000000000000001

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "teensy.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"width" : 0.20000000000000001
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View file

@ -1,11 +0,0 @@
{
"info" : {
"author" : "xcode",
"version" : 1
},
"resources" : [
{
"filename" : "pico4.arreferenceimage"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 MiB