{"id":135805,"date":"2018-08-17T15:55:00","date_gmt":"2018-08-17T12:55:00","guid":{"rendered":"https:\/\/ruuvi.com\/ruuvi-firmware-teil-4-button-interrupt\/"},"modified":"2026-06-11T07:41:12","modified_gmt":"2026-06-11T04:41:12","slug":"ruuvi-firmware-teil-4-button-interrupt","status":"publish","type":"post","link":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/","title":{"rendered":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"536\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt-1024x536.jpeg\" alt=\"Ruuvi Firmware-Serie Teil 3 Intro-Bild\" class=\"wp-image-3581\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt-1024x536.jpeg 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt-450x236.jpeg 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt-768x402.jpeg 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt-600x314.jpeg 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">In diesem Teil des Tutorials erweitern wir die <em>GPIO<\/em>-Treiber, um RuuviTag aus dem in Teil 1 implementierten Yield aufzuwecken und die in Teil 3 umgesetzte LED-Cycling-Task zu starten. Den finalen Code dieses Blogposts kannst du auf <a href=\"https:\/\/github.com\/ruuvi\/ruuvi.firmware.c\">Ruuvi GitHub<\/a> im <em>ruuviblog<\/em>-Branch herunterladen, Tag<em> 3.4.2-alpha<\/em>. <\/p>\n\n<p class=\"wp-block-paragraph\">Bitte folge <a href=\"https:\/\/ruuvi.com\/ruuvi-firmware-part-1-sleep\/\">Teil 1 der Serie<\/a> f\u00fcr Details zum Klonen des Repositories und Kompilieren des Codes. Die finale Hex-Datei dieses Tutorials kann vom <a href=\"http:\/\/jenkins.ruuvi.com\/job\/ruuvi.firmware.c\/16\/\">Ruuvi Jenkins<\/a> heruntergeladen werden. <\/p>\n\n<h2 class=\"wp-block-heading\">Babys erster Input<\/h2>\n\n<p class=\"wp-block-paragraph\">Im letzten Teil unserer Serie hatten wir ein Problem: Unser Tag hatte keinen Input aus der Au\u00dfenwelt oder von internen Peripherieger\u00e4ten. Daher konnten wir nicht schlafen gehen und auf ein Ereignis warten, sondern mussten stattdessen in einer Schleife mit fester Verz\u00f6gerung laufen \u2013 wodurch unser Tag wach bleiben und die Batterie leerziehen musste. Das beheben wir mit Interrupts \u00fcber die Buttons. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"414\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-4-0.png\" alt=\"Ruuvi firmware.c Architektur 3.4.0\" class=\"wp-image-3582\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-4-0.png 414w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-4-0-150x150.png 150w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-4-0-300x300.png 300w, https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-c-architecture-3-4-0-100x100.png 100w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><figcaption>GPIO-Treiber haben jetzt Interrupts, und ein Tastendruck ruft die LED-Task auf.<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">GPIO-Interrupt<\/h2>\n\n<h3 class=\"wp-block-heading\">Schnittstelle<\/h3>\n\n<p class=\"wp-block-paragraph\">Unsere Schnittstelle definiert m\u00f6gliche Flanken f\u00fcr den GPIO-Interrupt: High-to-Low, Low-to-High und Toggle. Zus\u00e4tzlich definieren wir \u201eunknown\u201c f\u00fcr den Fall der F\u00e4lle. Der Interrupt-Event-Typ mit Quell-Pin und Flanke ist definiert; wir geben dieses Event an unsere Pin-Interrupt-Funktion weiter.  <\/p>\n\n<p class=\"wp-block-paragraph\">Wir haben zwei Initialisierungsfunktionen: eine f\u00fcr das GPIO-Modul und eine f\u00fcr den spezifischen Interrupt. Die Modulinitialisierung bekommt als Parameter die Adresse eines Arrays von Funktionszeigern; so vermeiden wir, das Treibermodul an ein Board-Modul zu binden, in dem die Anzahl der GPIO-Pins definiert w\u00e4re. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"801\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h-1024x801.png\" alt=\"ruuvi_gpio_interrupt.h\" class=\"wp-image-3583\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h-1024x801.png 1024w, https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h-450x352.png 450w, https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h-768x601.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h-600x470.png 600w, https:\/\/ruuvi.com\/i\/u\/ruuvi-gpio-interrupt-h.png 1035w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>ruuvi_gpio_interrupt.h<\/figcaption><\/figure><\/div>\n\n<h3 class=\"wp-block-heading\">Implementierung<\/h3>\n\n<p class=\"wp-block-paragraph\">Wie zuvor implementieren wir die Funktionalit\u00e4t, indem wir Aufrufe an das Nordic SDK weiterreichen. Au\u00dferdem speichern wir eine Lookup-Tabelle mit Zeigern auf Interrupt-Funktionen und leiten Interrupts nach dem Auftreten an die jeweilige Funktion weiter. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"875\" height=\"948\" src=\"https:\/\/ruuvi.com\/i\/u\/start-of-ruuvi-platform-gpio-interrupt-c.png\" alt=\"Anfang von ruuvi_platform_gpio_interrupt.c\" class=\"wp-image-3584\" srcset=\"https:\/\/ruuvi.com\/i\/u\/start-of-ruuvi-platform-gpio-interrupt-c.png 875w, https:\/\/ruuvi.com\/i\/u\/start-of-ruuvi-platform-gpio-interrupt-c-415x450.png 415w, https:\/\/ruuvi.com\/i\/u\/start-of-ruuvi-platform-gpio-interrupt-c-768x832.png 768w, https:\/\/ruuvi.com\/i\/u\/start-of-ruuvi-platform-gpio-interrupt-c-600x650.png 600w\" sizes=\"auto, (max-width: 875px) 100vw, 875px\" \/><figcaption>Anfang von ruuvi_platform_gpio_interrupt.c<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"535\" src=\"https:\/\/ruuvi.com\/i\/u\/end-of-ruuvi-platform-gpio-interrupt-c.png\" alt=\"Ende von ruuvi_platform_gpio_interrupt.c\" class=\"wp-image-3585\" srcset=\"https:\/\/ruuvi.com\/i\/u\/end-of-ruuvi-platform-gpio-interrupt-c.png 414w, https:\/\/ruuvi.com\/i\/u\/end-of-ruuvi-platform-gpio-interrupt-c-348x450.png 348w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><figcaption>Ende von ruuvi_platform_gpio_interrupt.c<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Button-Task hinzuf\u00fcgen<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir wollen <em>task_led_cycle() <\/em>bei einem Tastendruck ausl\u00f6sen. Daher definieren wir zun\u00e4chst einen Funktionszeiger mit passender Signatur f\u00fcr die Task. Unsere Task-Initialisierung bekommt dann Flanke und Funktionszeiger als Parameter. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"256\" src=\"https:\/\/ruuvi.com\/i\/u\/task-button-h.png\" alt=\"task_button.h\" class=\"wp-image-3586\"\/><figcaption>task_button.h<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Unsere Button-Task-Implementierung kapselt den <em>task_button_fp_t<\/em> in <em>ruuvi_interface_gpio_interrupt_fp_t <\/em>und ruft die GPIO-Interrupt-Initialisierung auf. Hier k\u00f6nnen wir die GPIO-Nummerndefinition aus <em>ruuvi.boards.c<\/em> einbinden. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"821\" height=\"354\" src=\"https:\/\/ruuvi.com\/i\/u\/task-button-c.png\" alt=\"task_button.c\" class=\"wp-image-3587\" srcset=\"https:\/\/ruuvi.com\/i\/u\/task-button-c.png 821w, https:\/\/ruuvi.com\/i\/u\/task-button-c-450x194.png 450w, https:\/\/ruuvi.com\/i\/u\/task-button-c-768x331.png 768w, https:\/\/ruuvi.com\/i\/u\/task-button-c-600x259.png 600w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><figcaption>task_button.c<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Unsere <em>main<\/em>-Funktion ruft dann <em>task_button_init<\/em> mit einer festen <em>slope<\/em> und <em>task_led_cycle <\/em>als Funktion auf, die bei Tastendruck ausgef\u00fchrt wird. Wir k\u00f6nnten die <strong>#define <\/strong>f\u00fcr <em>slope<\/em> und <em>action<\/em> auch in der Application-Configuration-Headerdatei setzen, aber da das hier nur eine Demonstration ist, wie man Interrupts nutzt, bleiben wir vorerst bei den hartcodierten Werten. <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"810\" height=\"990\" src=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-main-c-end-of-4.png\" alt=\"main.c\" class=\"wp-image-3588\" srcset=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-main-c-end-of-4.png 810w, https:\/\/ruuvi.com\/i\/u\/ruuvi-main-c-end-of-4-368x450.png 368w, https:\/\/ruuvi.com\/i\/u\/ruuvi-main-c-end-of-4-768x939.png 768w, https:\/\/ruuvi.com\/i\/u\/ruuvi-main-c-end-of-4-600x733.png 600w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><figcaption>main.c<\/figcaption><\/figure><\/div>\n\n<h2 class=\"wp-block-heading\">Stromverbrauch<\/h2>\n\n<p class=\"wp-block-paragraph\">Wir sind in diesen Teil der Blogserie mit katastrophalem Stromverbrauch gestartet \u2013 mit dem Ziel, das zu beheben. Schauen wir, wie gut uns das gelungen ist!<\/p>\n\n<p class=\"wp-block-paragraph\">Wenn du das Programm ausf\u00fchrst, f\u00e4llt dir ein Problem auf: Im Button-Code gibt es kein Entprellen, sodass ein Tastendruck als zwei oder sogar drei Dr\u00fccke registriert werden kann. Sp\u00e4ter k\u00f6nnten wir eine RTC f\u00fcr den Button hinzuf\u00fcgen, um den Zeitpunkt des letzten Interrupts zu speichern und Events zu verwerfen, die zu kurz nach der letzten Aktion auftreten.  <\/p>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"795\" src=\"https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua-1024x795.png\" alt=\"Leistungsprofil\" class=\"wp-image-3589\" srcset=\"https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua-1024x795.png 1024w, https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua-450x349.png 450w, https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua-768x596.png 768w, https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua-600x466.png 600w, https:\/\/ruuvi.com\/i\/u\/power-profile-4-1-ua.png 1028w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unser Schlafstromverbrauch liegt jetzt wieder bei 4,1 \u03bcA, gegen\u00fcber 3,6 \u03bcA im letzten Teil.<\/figcaption><\/figure><\/div>\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"799\" src=\"https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw-1024x799.png\" alt=\"Leistungsprofil\" class=\"wp-image-3590\" srcset=\"https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw-1024x799.png 1024w, https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw-450x351.png 450w, https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw-768x599.png 768w, https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw-600x468.png 600w, https:\/\/ruuvi.com\/i\/u\/power-profile-max-draw.png 1030w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Unser maximaler Stromverbrauch hat sich ebenfalls verbessert: auf 2,46 mA, gegen\u00fcber 8,10 mA im vorherigen Teil.<\/figcaption><\/figure><\/div>\n\n<p class=\"wp-block-paragraph\">Jetzt sind wir wieder bei guten Werten f\u00fcr den Schlafstrom: 4,1 \u03bcA. Zwar haben wir den LED-Verbrauch verbessert, weil die CPU schlafen kann, aber die LEDs eingeschaltet zu lassen, verbraucht bei batteriebetriebenem Betrieb weiterhin unn\u00f6tig viel Strom. <\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Bleib dran und folge <\/strong><a href=\"https:\/\/twitter.com\/ojousima\"><strong>@ojousima<\/strong><\/a><strong> und <\/strong><a href=\"https:\/\/twitter.com\/ruuvicom\"><strong>@ruuvicom<\/strong><\/a><strong> auf Twitter f\u00fcr #FirmwareFriday-Beitr\u00e4ge!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Teil des Tutorials erweitern wir die GPIO-Treiber, um RuuviTag aus dem in Teil 1 implementierten Yield aufzuwecken und die in Teil 3 umgesetzte LED-Cycling-Task zu starten. Den finalen Code dieses Blogposts kannst du auf Ruuvi GitHub im ruuviblog-Branch herunterladen, Tag 3.4.2-alpha. Bitte folge Teil 1 der Serie f\u00fcr Details zum Klonen des Repositories [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":135806,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[324],"tags":[],"class_list":["post-135805","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruuvi-software-artikel"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi<\/title>\n<meta name=\"description\" content=\"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi\" \/>\n<meta property=\"og:description\" content=\"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruuvi\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ruuvi.cc\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-17T12:55:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-11T04:41:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"733\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Otso Jousimaa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:site\" content=\"@ruuvicom\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Otso Jousimaa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/\"},\"author\":{\"name\":\"Otso Jousimaa\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"headline\":\"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt\",\"datePublished\":\"2018-08-17T12:55:00+00:00\",\"dateModified\":\"2026-06-11T04:41:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/\"},\"wordCount\":596,\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-interrupt.jpeg\",\"articleSection\":[\"Ruuvi-Software-Artikel\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/\",\"name\":\"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-interrupt.jpeg\",\"datePublished\":\"2018-08-17T12:55:00+00:00\",\"dateModified\":\"2026-06-11T04:41:12+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\"},\"description\":\"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-interrupt.jpeg\",\"contentUrl\":\"https:\\\/\\\/ruuvi.com\\\/i\\\/u\\\/ruuvi-firmware-interrupt.jpeg\",\"width\":1400,\"height\":733,\"caption\":\"Ruuvi Firmware-Serie Teil 4 Intro-Bild\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/ruuvi-firmware-teil-4-button-interrupt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/front\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/\",\"name\":\"Ruuvi\",\"description\":\"Measure Your World\",\"potentialAction\":[],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/#\\\/schema\\\/person\\\/143b8e2a095f1e6484b9186673c9ec00\",\"name\":\"Otso Jousimaa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g\",\"caption\":\"Otso Jousimaa\"},\"url\":\"https:\\\/\\\/ruuvi.com\\\/de\\\/author\\\/ojousima\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi","description":"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.","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:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/","og_locale":"de_DE","og_type":"article","og_title":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi","og_description":"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.","og_url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/","og_site_name":"Ruuvi","article_publisher":"https:\/\/www.facebook.com\/ruuvi.cc","article_published_time":"2018-08-17T12:55:00+00:00","article_modified_time":"2026-06-11T04:41:12+00:00","og_image":[{"width":1400,"height":733,"url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg","type":"image\/jpeg"}],"author":"Otso Jousimaa","twitter_card":"summary_large_image","twitter_creator":"@ruuvicom","twitter_site":"@ruuvicom","twitter_misc":{"Verfasst von":"Otso Jousimaa","Gesch\u00e4tzte Lesezeit":"3\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#article","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/"},"author":{"name":"Otso Jousimaa","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"headline":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt","datePublished":"2018-08-17T12:55:00+00:00","dateModified":"2026-06-11T04:41:12+00:00","mainEntityOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/"},"wordCount":596,"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg","articleSection":["Ruuvi-Software-Artikel"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/","url":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/","name":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt \u2013 Ruuvi","isPartOf":{"@id":"https:\/\/ruuvi.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#primaryimage"},"image":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#primaryimage"},"thumbnailUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg","datePublished":"2018-08-17T12:55:00+00:00","dateModified":"2026-06-11T04:41:12+00:00","author":{"@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00"},"description":"Leitfaden zur Embedded-Firmware-Entwicklung f\u00fcr nRF52 von Ruuvi Innovations. Lies, wie Firmware f\u00fcr den nRF52-Chip von Nordic Semiconductor entwickelt wird.","breadcrumb":{"@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#primaryimage","url":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg","contentUrl":"https:\/\/ruuvi.com\/i\/u\/ruuvi-firmware-interrupt.jpeg","width":1400,"height":733,"caption":"Ruuvi Firmware-Serie Teil 4 Intro-Bild"},{"@type":"BreadcrumbList","@id":"https:\/\/ruuvi.com\/de\/ruuvi-firmware-teil-4-button-interrupt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruuvi.com\/de\/front\/"},{"@type":"ListItem","position":2,"name":"Ruuvi Firmware \u2013 Teil 4: Button-Interrupt"}]},{"@type":"WebSite","@id":"https:\/\/ruuvi.com\/de\/#website","url":"https:\/\/ruuvi.com\/de\/","name":"Ruuvi","description":"Measure Your World","potentialAction":[],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/ruuvi.com\/de\/#\/schema\/person\/143b8e2a095f1e6484b9186673c9ec00","name":"Otso Jousimaa","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd52303e35b8b23c01cfeec7bb2636768de567cd33604f794ae86dd971e61645?s=96&d=mm&r=g","caption":"Otso Jousimaa"},"url":"https:\/\/ruuvi.com\/de\/author\/ojousima\/"}]}},"_links":{"self":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135805","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/comments?post=135805"}],"version-history":[{"count":1,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135805\/revisions"}],"predecessor-version":[{"id":135810,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/posts\/135805\/revisions\/135810"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media\/135806"}],"wp:attachment":[{"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/media?parent=135805"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/categories?post=135805"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ruuvi.com\/de\/wp-json\/wp\/v2\/tags?post=135805"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}