{"id":2851,"date":"2024-10-11T17:42:10","date_gmt":"2024-10-11T16:42:10","guid":{"rendered":"https:\/\/www.robertprice.co.uk\/robblog\/?p=2851"},"modified":"2024-10-11T17:42:11","modified_gmt":"2024-10-11T16:42:11","slug":"rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language","status":"publish","type":"post","link":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/","title":{"rendered":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Previously as part of this year&#8217;s Retro Challenge, I learnt <a href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-6-getting-z80-assembly-language-programs-on-to-the-rc2014-classic-2\/\">how to build and run Z80 assembly language programs on my RC2014 Classic 2 computer<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I now want to recreate <a href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-2-reading-the-rotary-encoder-from-basic\/\">the BASIC program that moves LEDs<\/a> using Z80 Assembly Language.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I am using IO address $DE for my Rotary Encoder module. I also have the Digital I\/O module using IO address $03. I can define these as constants so I can easily change them if necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I need to store values for the input, the output, and the last value of the CLK pin. The input will just be the value from the <a href=\"http:\/\/z80-heaven.wikidot.com\/instructions-set:in\">IN<\/a> operation. The output value will be the byte we want to show on the LED output. I will set this to be %00000001 initially. When I turn the encoder, I want this to shift to either the left or right. If it reaches the edge, I want it to wrap. The Z80 operations <a href=\"http:\/\/z80-heaven.wikidot.com\/instructions-set:rlca\">RLCA<\/a> and <a href=\"http:\/\/z80-heaven.wikidot.com\/instructions-set:rrca\">RRCA<\/a> will do this for me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To check if a bit is high or low, I can use an <a href=\"http:\/\/z80-heaven.wikidot.com\/instructions-set:and\">AND<\/a> operation to mask out out other values. For example, to check if the SW1 is being pressed, I can do the following.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    SW1         EQU %00000100\n    INPUT_PORT  EQU $DE\n\n    in a,(INPUT_PORT)\n    and SW1\n    cp SW1\n    jp z, end    ; jump to end if SW is high.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I can repeat this logic to check the values of CLK1 and DT1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is the code I have come up with. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    OUTPUT rotaryencoderledcontrol.z80\n\n; On the RC2014 Classic 2 running from BASIC the Z80\n; code runs from address $9000. \n    ORG $9000\n\n; The input and output ports to use.\nINPUT_PORT  EQU $DE\nOUTPUT_PORT EQU $03\n\n; The input bits from the rotary encoder.\nCLK1    EQU %00000001\nDT1     EQU %00000010\nSW1     EQU %00000100\n\n; show the inital led value\n    ld a,(output)\n    out (OUTPUT_PORT),a\n\nloop:\n; load the last clk value into register b\n    ld a,(lastclk)\n    ld b,a\n\n; read the input port and store in \"input\"\n    in a,(INPUT_PORT)\n    ld (input),a\n\n; now check if the switch on first rotary encode has been\n; pressed. If it has jump to end\n    and SW1\n    cp SW1\n    jp z, end\n\n; now see if clk1 matches the lastclk. If it does loop\n    ld a,(input)\n    and CLK1\n    ld (lastclk),a\n    cp b\n    jp z, loop\n\n; now work out what direction we are moving\ncheck_case1:\n    ld  a,(input)          \n    and CLK1\n    cp  CLK1             \n    jr  nz, check_case2\n\n    ld  a,(input)         \n    and DT1\n    cp  DT1\n    jr  z, left     ; if both CLK and DT are high then left\n\ncheck_case2:\n    ld  a, (input)\n    and CLK1\n    cp  0 \n    jr  nz, right\n\n    ld  a, (input)\n    and DT1\n    cp  0 \n    jr  nz, right  \n\n; we must be turning left so rotate the output to the left\n; and store it before going back to the start of the loop.\nleft:\n    ld a,(output)\n    rlca\n    out (OUTPUT_PORT),a\n    ld (output),a\n\n    jp loop\n\n; we must be turning right so rotate the output to the right\n; and store it before going back to the start of the loop.\nright:\n    ld a,(output)\n    rrca\n    out (OUTPUT_PORT),a\n    ld (output),a\n\n    jp loop\n\n; the switch has been pressed, so we clear the output\n; and exit.\nend:\n    ld a,0\n    out (OUTPUT_PORT),a\n\n    ret\n\ninput:\n    db  0\noutput:\n    db  %00000001\nlastclk:\n    db  0\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"RC2014 Rotary Encoder working from Z80 assembly language\" width=\"840\" height=\"473\" src=\"https:\/\/www.youtube.com\/embed\/TfHoq9l8s0A?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The LED successfully moves left and right depending on how I turn the rotary encoder. However, because I am checking in both high and low states of CLK1, it is moving two steps per turn. This will be too senstive to use in an application, so my next job is to change this to check once per turn.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Previously as part of this year&#8217;s Retro Challenge, I learnt how to build and run Z80 assembly language programs on my RC2014 Classic 2 computer. I now want to recreate the BASIC program that moves LEDs using Z80 Assembly Language. I am using IO address $DE for my Rotary Encoder module. I also have the &hellip; <a href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2855,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[113],"tags":[145,117,115,131,119],"class_list":["post-2851","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-rc2024","tag-assembly-language","tag-rc2014","tag-rc2024","tag-rotary-encoder","tag-z80"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price<\/title>\n<meta name=\"description\" content=\"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\/O board using Z80 assembly language.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price\" \/>\n<meta property=\"og:description\" content=\"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\/O board using Z80 assembly language.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/\" \/>\n<meta property=\"og:site_name\" content=\"Robert Price\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-11T16:42:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-11T16:42:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"rob\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rob\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/\"},\"author\":{\"name\":\"rob\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\"},\"headline\":\"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language\",\"datePublished\":\"2024-10-11T16:42:10+00:00\",\"dateModified\":\"2024-10-11T16:42:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/\"},\"wordCount\":297,\"image\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC2014-rotaryencoder-digitalio.jpg\",\"keywords\":[\"Assembly Language\",\"RC2014\",\"RC2024\",\"Rotary Encoder\",\"Z80\"],\"articleSection\":[\"RC2024\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/\",\"name\":\"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC2014-rotaryencoder-digitalio.jpg\",\"datePublished\":\"2024-10-11T16:42:10+00:00\",\"dateModified\":\"2024-10-11T16:42:11+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\"},\"description\":\"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\\\/O board using Z80 assembly language.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC2014-rotaryencoder-digitalio.jpg\",\"contentUrl\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/assets\\\/RC2014-rotaryencoder-digitalio.jpg\",\"width\":1200,\"height\":788,\"caption\":\"RC2014 with Rotary Encoder and Digital IO modules\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#website\",\"url\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/\",\"name\":\"Robert Price\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.robertprice.co.uk\\\/robblog\\\/#\\\/schema\\\/person\\\/fac6d5b076e0e14e1fb13e15b542a6c5\",\"name\":\"rob\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g\",\"caption\":\"rob\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price","description":"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\/O board using Z80 assembly language.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/","og_locale":"en_GB","og_type":"article","og_title":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price","og_description":"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\/O board using Z80 assembly language.","og_url":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/","og_site_name":"Robert Price","article_published_time":"2024-10-11T16:42:10+00:00","article_modified_time":"2024-10-11T16:42:11+00:00","og_image":[{"width":1200,"height":788,"url":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg","type":"image\/jpeg"}],"author":"rob","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rob","Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#article","isPartOf":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/"},"author":{"name":"rob","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5"},"headline":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language","datePublished":"2024-10-11T16:42:10+00:00","dateModified":"2024-10-11T16:42:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/"},"wordCount":297,"image":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg","keywords":["Assembly Language","RC2014","RC2024","Rotary Encoder","Z80"],"articleSection":["RC2024"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/","url":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/","name":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language - Robert Price","isPartOf":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#primaryimage"},"image":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg","datePublished":"2024-10-11T16:42:10+00:00","dateModified":"2024-10-11T16:42:11+00:00","author":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5"},"description":"Reading my rotary encoder module for the RC2014 and using it to move LEDs on a Digital I\/O board using Z80 assembly language.","breadcrumb":{"@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#primaryimage","url":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg","contentUrl":"https:\/\/www.robertprice.co.uk\/robblog\/assets\/RC2014-rotaryencoder-digitalio.jpg","width":1200,"height":788,"caption":"RC2014 with Rotary Encoder and Digital IO modules"},{"@type":"BreadcrumbList","@id":"https:\/\/www.robertprice.co.uk\/robblog\/rc2024-part-7-reading-the-rotary-encoder-using-z80-assembly-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.robertprice.co.uk\/robblog\/"},{"@type":"ListItem","position":2,"name":"RC2024 \u2013 Part 7 \u2013 Reading The Rotary Encoder Using Z80 Assembly Language"}]},{"@type":"WebSite","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#website","url":"https:\/\/www.robertprice.co.uk\/robblog\/","name":"Robert Price","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.robertprice.co.uk\/robblog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.robertprice.co.uk\/robblog\/#\/schema\/person\/fac6d5b076e0e14e1fb13e15b542a6c5","name":"rob","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6f0eb511179100a4e968abc70403e33686e6ab3e992e392bedd2ccac01da666c?s=96&d=mm&r=g","caption":"rob"}}]}},"_links":{"self":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/2851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/comments?post=2851"}],"version-history":[{"count":2,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/2851\/revisions"}],"predecessor-version":[{"id":2857,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/posts\/2851\/revisions\/2857"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/media\/2855"}],"wp:attachment":[{"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/media?parent=2851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/categories?post=2851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robertprice.co.uk\/robblog\/wp-json\/wp\/v2\/tags?post=2851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}