{"id":5448,"date":"2024-12-28T16:26:38","date_gmt":"2024-12-28T16:26:38","guid":{"rendered":"https:\/\/obsidiansofteducation.com\/?page_id=5448"},"modified":"2024-12-28T16:26:40","modified_gmt":"2024-12-28T16:26:40","slug":"mit-app-inventor-stop-watch","status":"publish","type":"page","link":"https:\/\/obsidiansofteducation.com\/index.php\/mit-app-inventor-stop-watch\/","title":{"rendered":"MIT App Inventor Stop Watch"},"content":{"rendered":"\n<p>Hello friends and welcome to Obsidian Soft,<\/p>\n\n\n\n<p>Normally, in all mobile devices, stopwatch, timer, and alarm clock features are all rolled into one app called the Clock. I have already taught how to make an alarm clock and countdown timer but I haven\u2019t taught how to make a stopwatch.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/snake20game2031.png\" alt=\"\"\/><\/figure>\n<\/div>\n\n\n<p>The difference between a timer and a stopwatch is that a timer counts down from the time given and a stopwatch counts up from 0 until you stop it. A stopwatch is a good way of finding out how long you take to do something and is a must for all test givers especially people taking tests like their SATs.<\/p>\n\n\n\n<p>Let\u2019s have a look at the screenshot of what we are making today:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/AVvXsEjnJaSAddhQs9M1kbypyUjv7KdDppqlEXn0ft0rrWw9GuJ90K5VLance4hHilavP6BoaJIoXAONN98Li840jnGjZVEPKydRY3lFlQXNlNiDjXZvI1RvJNJWcwX3T6nYzjC7FJy7UMEn5Y_td-CyBBeM0Ec9uPPVVnWY2kiUjb53fMWejK6tNMl2Nkc4RkA.png\" alt=\"\" style=\"width:318px;height:auto\"\/><\/figure>\n<\/div>\n\n\n<p>As you can see this stopwatch app looks quite professional and counts in minutes, seconds, and centiseconds just like Android\u2019s built-in stopwatch. It also has a resume feature which should be a must feature in all good stopwatches.<\/p>\n\n\n\n<p>So, let\u2019s begin\u2026<\/p>\n\n\n\n<p>Open up MIT App Inventor:<\/p>\n\n\n\n<p><a href=\"https:\/\/ai2.appinventor.mit.edu\" target=\"_blank\" rel=\"noopener\">https:\/\/ai2.appinventor.mit.edu<\/a><\/p>\n\n\n\n<p>Go to Projects in the menu bar and choose Start New Project.<\/p>\n\n\n\n<p>Name the project \u201cStopWatch\u201d, no spaces are allowed in the project name.<\/p>\n\n\n\n<p>The Designer view of the project will open where we design the screen.<\/p>\n\n\n\n<p>For screen1 properties on the right, make align horizontal: center, background color: white, screen orientation: portrait and turn off the title visible check box.<\/p>\n\n\n\n<p>From the&nbsp;<strong>Layout<\/strong>&nbsp;palette on the left, drag and drop a&nbsp;<strong>Horizontal Layout<\/strong>&nbsp;onto the device showing in the center.<\/p>\n\n\n\n<p>For horizontal arrangement1\u2019s properties, make align horizontal and align vertical both center. Make height: 30% and width: fill parent.<\/p>\n\n\n\n<p>Duplicate horizontal arrangement1 by selecting it and pressing&nbsp;<strong>Ctrl + C and Ctrl+ V<\/strong>&nbsp;on the keyboard for&nbsp;<strong>Windows<\/strong>&nbsp;OR&nbsp;<strong>Command + C and Command + V<\/strong>&nbsp;on the keyboard for&nbsp;<strong>MacOS.<\/strong><\/p>\n\n\n\n<p>From the&nbsp;<strong>User Interface<\/strong>&nbsp;Palette, drag and drop&nbsp; a&nbsp;<strong>Label<\/strong>&nbsp;inside horizontal arrangement1 in viewer.&nbsp; Rename to timeLbl and make font: bold, font size: 45, and change text to \u201c<strong>00 : 00 : 00\u201d.<\/strong><\/p>\n\n\n\n<p>From the&nbsp;<strong>User Interface<\/strong>&nbsp;Palette, drag and drop&nbsp; a&nbsp;<strong>Button<\/strong>&nbsp;inside horizontal arrangement2 in viewer. Rename to resetBtn. Make background color: light gray, font: bold and font size: 20. Make width: 30%, shape: rounded, text: Reset, and textColor: Dark Gray.<\/p>\n\n\n\n<p>Duplicate the resetBtn by selecting it and pressing&nbsp;<strong>Ctrl + C and Ctrl+ V<\/strong>&nbsp;on the keyboard for&nbsp;<strong>Windows<\/strong>&nbsp;OR&nbsp;<strong>Command + C and Command + V<\/strong>&nbsp;for&nbsp;<strong>MacOS.&nbsp;<\/strong>Rename to startStopBtn. Make background color: blue, text: Start and textColor: white.<\/p>\n\n\n\n<p>Add an empty label between the two buttons for spacing. Make width 2%&nbsp; and remove all text from it.<\/p>\n\n\n\n<p>Lastly, From the&nbsp;<strong>Sensors<\/strong>&nbsp;Palette, drag and drop&nbsp; a&nbsp;<strong>Clock&nbsp;<\/strong>onto the Viewer. This is an invisible component. In the Clock1\u2019s properties,&nbsp; turn off timer enabled checkbox but the timer always fires should stay on (this means that our stopwatch should keep on working if the app is open but not on screen). Make timer interval: 10 milliseconds which actually means 1 centiseconds. So, we want our clock to be triggered after every one centisecond.<\/p>\n\n\n\n<p>Our screen design is done so let\u2019s go to the blocks section.&nbsp;<\/p>\n\n\n\n<p>We have three global variables. startTime and pausedTime are for storing the actual device time at which the clock is started or paused respectively and timerStarted is a variable maintained to switch between the start and stop state of the stopwatch\u2019s startStop button.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/IW7WN3pe-Diy9qE5Q5TD9eJPOVf7aQHZpGK_zXvAsN2TvE-sadBP2wioXQGaqeE1LP2QAdQP3jhDUW88AZisoYrqL_DHxWrvvYxTtGdCvOzkw-zfh-aLimzUUrGVEuO2uNLhxGAlapG_3nbykE0vGLow400-h136.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>We will also make a procedure for converting single digits to a number with 0 before it. So, for example, 1 second will be displayed as 01 to keep the look of our timer uniform.&nbsp;<\/p>\n\n\n\n<p>From procedures, get the procedure that returns a result. Name it&nbsp; \u201cformatTime\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/Op48dHv2oWcIFDmhYal4dgzvhK1WDCEqwCR-Tdp_-nnr2phuezNHoKfASguHly9m2Ve-63zEuAWwBEh_RcZLkx6WVszkHDrVKILZGVbqC7nB0ttZ6gFTAB0SfrPY9fQpJrPmfxShZ48EfqaBaN76BYw263-h106.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Click on cogwheel in this procedure to add an input to it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/Tj0Ax9vVZb7EZ8zzBP1DVYIVtdDpMb_VBHXZY-iQn_kwq1fnBzOgyGRCxtWgti4mVYMteBJ98QbtAs6to0bpwRQ3KGNGstMq3M38pgN4zlGORm4L9m82NFVJBcs-qoNbgGxJr73VBnsY5c2WqQqmY5kw400-h282.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>From control, get the if-else block below the while test block as shown below:<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"326\" width=\"400\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/nAwvMEQxK8T98JkrTEv8M26y170qXiezbRtkFcQUf-L70zAit7XaoHPgKDASCEnvsxjYRAD7fr6xDRHvQw5O6nTihoMUpyiYpDcGC8EYg8P8xuhuT0_M-4S2-ttPAl_PKU9AUTPSKlFrUFy_od2cbnkw400-h326.png\"><\/p>\n\n\n\n<p>Plug it inside the formatTime procedure.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/E7DHXKDWzaxJZA1Ro_ix8Ej-_Jr9Rkk0H6nS1KuQc7xzPp9fJibs3t9znQ8ADycQg1nfVNwpLbAQMmxMSdFP_967KAVPvWb-W9PjtEncJLwr7JlPwJIjLUx3MwR61z3PIOvm5FpIgLfivlm7soo5KVEw235-h143.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Now, check if x\u2019s length is equal to 1 then join 0 and x otherwise let x stay the same.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/jPI14QwSPkznxxOWw9gRU2ta1hAqi7rL28pJEo5gNPXH2F7RUecseiw86E4GLDs3vcSl7wdreXW94J9pcB8cdvvdxm1grRbjEnLUmnnaGG4c36-yK6B6VKmnqQ6nx30zi36Mv_GFlHcDhWhh19zzzCUw400-h163.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Now, get the click event of startStopBtn and use an if\/else block from control to check in if condition that timerStarted=false. This is the case when the timer hasn\u2019t started yet, so we should start it. In else section, we will add code for stopping the timer.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/sWXb__4tldigA7Ij5SBYc1hYAVpgaobXh0zbJo8CpzoLPMzvcaZbqVVe2yIZDEugaOWUkP7FnebNocWRuo22ePs3V14WMZvOi9BLjm8pSqg8-yc1d3zTmVLKL25xuY4gAz3ydnPyLHxwNeR-TbQUz3Yw400-h130.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>So, what should happen when the timer is started. We should assign the current device time to startTime using Clock. Now procedure. We should set the status variable timerStarted to true. We should change the text on our startStopBtn to Stop and we should change its background color to red. And most importantly we should enable our clock\u2019s sensor time. And we should also disable our resetBtn. The stopwatch should only be allowed to be reset when we stop it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/uuON6DT6JZ8moKPHXEdRIqUvE2xf0EuCcfXzAwSTmYem0s2-h-j0f1c65WCftmHpIXKPEv_ydzHlFJKDJzU-LhhPsisN3yQ3ZrVU4Vj7yHNCH4TSFBH-hrNjahC8OG7b7I0dbhKkJyzxk0kr57E7TSQw400-h247.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>And what happens in the else section: we stop the timer by making timerStarted false, startStopBtn\u2019s text Resume, and color back to blue. We disable our clock\u2019s timer and we enable resetBtn.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/UXkZwRzC7AnhBOYtxNMx7liq0_ib0JgRQKVIk9HKtu4_MoFlvLqo1WUyyCDbT9jDQ4sDjfYMYU8_snEoOIC1KmuNEQENWJ01n-PchjfuCyNhhTBoCf1le27GZcmoNzKraxrDYV8-kYkymnQByAdetuUw400-h157.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Let\u2019s work on our clock\u2019s timer event code.&nbsp;<\/p>\n\n\n\n<p>We will find the duration between the device\u2019s current time and the time at which the stopwatch was started and we will show this time duration in minutes, seconds, and centiseconds and this will be updated every 1 centisecond as that is the timer interval for our clock (10 milliseconds = 1 centisecond)<\/p>\n\n\n\n<p>In the clock1\u2019s timer event block, first, add a local variable timeDuration and use Clock1\u2019s duration procedure to find the duration between startTime and Clock1.Now. This timeDuration is returned to us in milliseconds.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/BxBNwcz6PDarLNMHsyPeNCB-8bPcQaJdSYsm5FSrBGBw1oBnuOHYcUH3QKijA6dOh4PmgEaxH4qYT4-iqcDQTvYxtcQkLwwKu7p-f6LqRvaQqyoSba4dPA5G21PNbYCLe9XdSVDaJQQBfJgk4e6sLn8w400-h91.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Within the orange section of the local variable, set the timeLbl to the join of 5 blocks in which plug in \u201d : \u201d text blocks as separators between mins, seconds, and centiseconds.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/fejAcI6Huk7BjbsGxm_PqWBHf9WXB05DVh3o3ESPp-JKLS_etA3JWHRHv62C-RRKq-ReXJuxl-2xXXjcYG5pcPLS1QoFEZyIvu6qhWyJYwu5wNdEK8wRK7RUG0h3fvQoYHLUTA5ncpe6BowBnYf5OhIw400-h156.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Now, we have these procedures in the clock that convert a duration into minutes and seconds:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/2p6ZriZ0y1tjK746Sy0X4epL_BFnsyBVqMxgWzzICvEDX1Qwl7wX8lqq8jJ5vAXJk-6Di50yxAvi7Q_tGLpIZ82TRQ_euzyyfy35OYLYHtHyCC8HkyToaVM8T6hmBVvilfHX8ZQMSzKzEoGxO4euU2cw400-h75.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/TxZPijVsYYYSAnlNJEdqU8tLGIBei3OviUuEkIPxCnOP2vqsxGMqRw9iGOGYrdujoA5gAURwGt5pggliwp3oEHh2dNgAOWwUrSgSE9CBYXKcFTepeW_joD8CTdSFsJoxJh4CVUpb1p8UX6nshF896QEw400-h74.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>However, if we consider the seconds one, it will give us the entire duration in seconds so it can even give us 220 seconds but we don\u2019t want to show 220 seconds to the user as 220 seconds has 3 minutes and 40 seconds in it. So, how to fix this? Just take thhe modulo of seconds with 60. So, 220 % 60 is 40 (modulo returns the remainder of a division)<\/p>\n\n\n\n<p>So, do this for both minutes and seconds slots but besides the modulo, we have to call our custom procedure formatTime to add a 0 before single digits.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/ezV3VCeC8tWSojK-b-vI7CIdYVRVQbq-Nb3cQqDzBOuuIba0xiSKB8ol45BVnlNNCtZgjbNtg14AL12dZ76UmotH2e0Sadjs8PqMtAI45pQhNAEZqU0U3BZRdfvYivQ8Wg_gbPc6MnJg2bFIgno8risw400-h137.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>The last slot is for centiseconds which is a little trickier as we don\u2019t have a procedure for converting duration to centiseconds so we will find it using our own code i.e. take modulo with 1000 (our time duration is already in milliseconds) and divide by 10 to get centiseconds. We need rounding off too before formatTime.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/5owZ09TuoDvOhLuGodDFM996F-aami4rXeRTkp1RVhbtazNrvtoP-8PJl8dgyv3oD9nJHRuR1h35ezHUuMbtv3VCy8ChHvdI_ZsJGgPu3AzwiNKWxBb3E2scEMg3h9uvYKrvcNRb16gqfoixNq16WNYw400-h41.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Our final timer event looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/iNAuSZqJV61kSPcfjuSXU_LlSb-AYK0lBRbzUf03oTb6K2t-MpCG5Dke4H54CahfFQnMUZjGC6uw-e5hdjj4I_5PidMTyIhT_WIsILJIg7_3O6HfyvmDHNb2cWLuyVn2NQByZPYUPfGL0d6_pIV58lAw584-h223.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Next is our resetBtn code:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/mjANI7F7e5eqT5ieDZ0k2fgv96kd81qyog4nEgZ4zm6fDoDGY4u0pcbJQZW64_Mr26UIzhuldQYlT-UbqZrwZeJCyC64cUfUNSYfGqtjFwijaXV5dujiJ23wmzalUZ6pB3swg4MOxEcx_3Ae7ZDrtrUw400-h152.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>If you test the timer right now, it will function very nicely but instead of resuming, the timer will start from 0 again. So, what do we need for the resuming feature?<\/p>\n\n\n\n<p>In our startStopBtn click event, inside the else section, start storing the time duration at which the stopwatch was stopped:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/EuJvQZHmn7pBQGJN6F7UPyp_vmj7dGS6bYbqKMutyZFAPeGHW3n33rA0N5QLtBdVLB0kHJ5ciKgl6uO5DZciILfCsx61yCzd6Qtil9RndLM6_x09mAG1GNpbF9FOVosr33BRvp8GXV7nup0fYWXF1m4.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Once we have the duration at which stopwatch was paused, we need to subtract it from the current device time when the clock is started again and we will only do it if the pauseTime isn\u2019t 0. If pausedTime = 0, then this means that the stopwatch is either being started after a reset or it is being started for the first time<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/AT1qIB72sqWTjAggPFWZnX4w3AgYGOtun6UR_YLiIp9m_VZm7WkX0yV7602gDdirkjL8Ulo1cjpPzwQZaxSBHx97GNvSfBkN_Zf7UTgZGQJwtcCyG_9lx7AEDHUGnI1IeJnc_Vczkea-qcBv6boANWAw606-h165.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>(There is no Subtract Duration procedure in clock sensor, so we can get the correct subtraction result by multiplying pausedTime by -1 and then adding this to current time).<\/p>\n\n\n\n<p>So our final startStopBtn click event looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/F6KJujlUIQnXx466K4sOKsznt4fpscgqP51Y0ZYjI35_L8rCGyQCzcrJFXJVQ5mmCpshJ8r0M6tlTBMBJMp66JRgcnQxW1fPuR78mVO5BaPd3uZOapgxnWLekzMPkLhgiin5Lgq4KClsxV9uY2Cm2lA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>The stopwatch app is done and I hope you liked this tutorial.<\/p>\n\n\n\n<p>If you like my tutorials, consider supporting me:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><a href=\"https:\/\/obsidiansoft.gumroad.com\/l\/cxdft\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"196\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1.png\" alt=\"\" class=\"wp-image-5381\" style=\"width:190px;height:auto\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1.png 372w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2024\/12\/donate-button-1-300x158.png 300w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><\/a><\/figure>\n<\/div>\n\n\n<p><a href=\"https:\/\/www.buymeacoffee.com\/obsidiansoft\" target=\"_blank\" rel=\"noopener\"><\/a>You can download aia file for the project from here:<\/p>\n\n\n\n<p><a href=\"https:\/\/drive.google.com\/file\/d\/1FglOPdxoZCanxo--Tgj93Xx1u6ulAlU8\/view?usp=sharing\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Stopwatch.aia<\/strong><\/a><\/p>\n\n\n\n<p>You can also watch the video tutorial on my channel: Obsidian Soft.<\/p>\n\n\n\n<p>[youtube https:\/\/www.youtube.com\/watch?v=hOXCDuNSugg]<\/p>\n\n\n\n<p>Please like my videos and share them with your friends and family. Also, subscribe to my channel and press the bell icon so you don\u2019t miss any of the great projects I have planned for you.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/c\/obsidiansofteducation\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/obsidiansofteducation<\/a><\/p>\n\n\n\n<p>Please like my social media pages for more educational resources and tips.<\/p>\n\n\n\n<p>Facebook:<a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.facebook.com\/ObsidianSoft\/<\/a><\/p>\n\n\n\n<p>Instagram:<a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.instagram.com\/obsidiansoftapps\/<\/a><\/p>\n\n\n\n<p>Pinterest:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.pinterest.co.uk\/obsidiansoft\/_created\" target=\"_blank\" rel=\"noopener\">https:\/\/www.pinterest.co.uk\/obsidiansoft\/_created<\/a><\/p>\n\n\n\n<p>For links to free educational apps, have a look at the\u00a0<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/mobile-apps\/\">educational apps page<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello friends and welcome to Obsidian Soft, Normally, in all mobile devices, stopwatch, timer, and alarm clock features are all rolled into one app called the Clock. I have already taught how to make an alarm clock and countdown timer but I haven\u2019t taught how to make a stopwatch. The difference between a timer and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5448","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/comments?post=5448"}],"version-history":[{"count":1,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5448\/revisions"}],"predecessor-version":[{"id":5449,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/5448\/revisions\/5449"}],"wp:attachment":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/media?parent=5448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}