From 8fc406f20ff4422c0e248055612496bce7951ef1 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 12:59:25 +0200 Subject: [PATCH 1/7] Update README.md --- README.md | 132 ++---------------------------------------------------- 1 file changed, 3 insertions(+), 129 deletions(-) diff --git a/README.md b/README.md index 41396f0f8e..f7613abe9d 100644 --- a/README.md +++ b/README.md @@ -1,130 +1,4 @@ -# Ardublockly -Ardublockly is a visual programming editor for Arduino. It is based on Google's [Blockly][1], which has been forked to generate [Arduino][15] code. +# Ardublockly for MINT education by Makers im Zigerschlitz +[Ardublockly](https://github.com/carlosperate/ardublockly) is a visual programming editor for Arduino. It is based on Google's [Blockly][1], which has been forked to generate [Arduino][15] code. -The `ArdublocklyServer` Python package initialises a local server to be able to compile and load the Arduino code using the [Arduino IDE][2]. - -This is all packaged in a self contained executable desktop application for Windows, Mac OS X, and Linux. - -![Ardublockly desktop program screenshot][desktop_screeshot] - - -## Features -* Generates Arduino code with visual drag-and-drop blocks -* Uploads the code to an Arduino Board -* Useful "code block warnings" -* Compatible with a wide range of official Arduino Boards -* Works on Windows / Linux / Mac OS X - -Ardublockly is still under development and a few features are not yet implemented. A to-do list can be found in the [TODO.md][3] file. - -Currently tested under Windows with Python 2.7 and 3.4 and in Linux and MacOS X with Python 2.7. - - -## Cloning the repository -Please note that there are submodules in the repository that need initialisation. So, to correctly clone the Ardublockly repository: - -``` -git clone https://github.com/carlosperate/ardublockly.git -cd ardublockly -git submodule update --init --recursive -``` - - -## Installing -The desktop application is available for Windows/Mac/Linux and runs as a stand-alone executable that can be downloaded from the [Ardublockly repository releases page][4]. - -You will also need the [Arduino IDE version 1.6.x or higher][2]. - -#### Development builds -You can also test __UNSTABLE__ development builds automatically generated every time an update is added to the GitHub repository: - -| Linux build | Windows build | Mac OS X build | -|:-------------------:|:-------------------:|:--------------------:| -| [![Linux Build Status](https://circleci.com/gh/carlosperate/ardublockly/tree/master.svg?style=svg)](https://circleci.com/gh/carlosperate/ardublockly/tree/master) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t877g920hdiifc2i?svg=true)](https://ci.appveyor.com/project/carlosperate/ardublockly) | [![Mac Build Status](https://travis-ci.org/carlosperate/ardublockly.svg?branch=master)](https://travis-ci.org/carlosperate/ardublockly) | -| [Download Link][12] | [Download Link][13] | [Download Link][14] | - -#### "Core version" (Python server only) -If you prefer, the core software can be used by running only the Python server, which loads the web interface on your local browser (Chrome recommended). - -Full installation instructions for this version can be found in [this Github repository Wiki][5]. - -The quick version: Clone this repository, initialise all submodules, and execute: - -``` -python start.py -``` - -This will work on Windows, Linux (including ARM) and Mac OS X, with Python >2.7 or >3.4 - - -## Running -1. [Install Ardublockly][5]. -2. Install the [Arduino IDE][2] version 1.6.x or higher (latest version is always recommended). -3. Run Ardublockly as defined in your installation method. -3. Configure Ardublockly to locate the Arduino IDE [following these instructions][6]. - - -## Online Demos -A demo of the latest release of Ardublockly main interface can be found in the following two links (to load the code into an Arduino it requires the full Ardublockly application to be downloaded and run on your computer): - -#### [Ardublockly][10] -![WebApp screenshot responsive design][web_screenshot_responsive] - -#### [Ardublockly classic][11] -![WebApp screenshot][web_screenshot_classic] - - -## Documentation -The documentation, including installation instructions, configuration instructions, and developer information can be found in the [Ardublockly GitHub repository Wiki][7]. - -To download the documentation you can git clone the wiki data: - -``` -git clone https://github.com/carlosperate/ardublockly.wiki.git -``` - - -## Credit -This project has been inspired by [BlocklyDuino][16]. - -Blockly original source is Copyright of Google Inc. [https://developers.google.com/blockly/][1]. A list of changes to the Blockly fork can be found in the [Blockly subdirectory README][17] file. - - -## License -Copyright (c) 2016 carlosperate https://github.com/carlosperate/ - -Unless stated otherwise, the source code of this projects is -licensed under the Apache License, Version 2.0 (the "License"); -you may not use any of the licensed files within this project -except in compliance with the License. - -The full document can be found in the [LICENSE][9] file. - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -[1]: https://developers.google.com/blockly/ -[2]: http://www.arduino.cc/en/main/software/ -[3]: TODO.md -[4]: https://github.com/carlosperate/ardublockly/releases/ -[5]: https://github.com/carlosperate/ardublockly/wiki/Installing-Ardublockly -[6]: https://github.com/carlosperate/ardublockly/wiki/Configure-Ardublockly -[7]: https://github.com/carlosperate/ardublockly/wiki -[8]: https://github.com/carlosperate/ardublockly/compare/blockly-original...master -[9]: https://github.com/carlosperate/ardublockly/blob/master/LICENSE -[10]: http://ardublockly.embeddedlog.com/demo/index.html -[11]: http://ardublockly.embeddedlog.com/demo/classic/index.html -[12]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=linux/ -[13]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=windows/ -[14]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=mac/ -[15]: http://www.arduino.cc -[16]: https://github.com/BlocklyDuino/BlocklyDuino -[17]: blockly/README.md - -[desktop_screeshot]: http://carlosperate.github.io/ardublockly/images/screenshot_desktop_1.png -[web_screenshot_responsive]: http://carlosperate.github.io/ardublockly/images/screenshot_material_all_small.jpg -[web_screenshot_classic]: http://carlosperate.github.io/ardublockly/images/screenshot_1.png +This fork aims to add features used by the Makers im Zigerschlitz for their projects. From 4f2370002268ec219f09093eb9e5eeb551c9c7c8 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 13:01:33 +0200 Subject: [PATCH 2/7] Add files via upload --- ardublockly/ardublockly_lang.js | 367 ++++++++++++++++---------------- 1 file changed, 184 insertions(+), 183 deletions(-) diff --git a/ardublockly/ardublockly_lang.js b/ardublockly/ardublockly_lang.js index ccc2cf295c..caea0b9312 100644 --- a/ardublockly/ardublockly_lang.js +++ b/ardublockly/ardublockly_lang.js @@ -1,183 +1,184 @@ -/** - * @license Licensed under the Apache License, Version 2.0 (the "License"): - * http://www.apache.org/licenses/LICENSE-2.0 - * - * @fileoverview Functions related to language and localisation. - */ -'use strict'; - -/** Create a namespace for the application. */ -var Ardublockly = Ardublockly || {}; - -/** Lookup for names of supported languages. Keys in ISO 639 format. */ -Ardublockly.LANGUAGE_NAME = { - 'fr': 'Français', - 'en': 'English', - 'es': 'Español', - 'nl': 'Nederlands', - 'pt': 'Português', - 'it': 'Italiano', - 'ru': 'Русский' -}; - -/** - * Selected language, default English. - * @type {string} - */ -Ardublockly.LANG = 'en'; - -/** - * We keep a local copy of the default language in case translations cannot - * be found in the injected language file. - * @type {Object} - */ -Ardublockly.DEFAULT_LANG_TEXT = {}; - - -/** Initialize the page language. */ -Ardublockly.initLanguage = function() { - // Save the current default language ID to check if it has been changed - var defaultLang = Ardublockly.LANG; - - // Check server settings and url language, url gets priority - Ardublockly.LANG = Ardublockly.getUrlLanguage() || - Ardublockly.getLanguageSetting() || Ardublockly.LANG; - - Ardublockly.populateLanguageMenu(Ardublockly.LANG); - - if (defaultLang !== Ardublockly.LANG) { - Ardublockly.duplicateDefaultLang(); - Ardublockly.injectLanguageJsSources(Ardublockly.LANG); - Ardublockly.updateLanguageText(); - } -}; - -/** - * Get the language previously set by the user from the server settings. - * @return {string} Language saved in the server settings. - */ -Ardublockly.getLanguageSetting = function() { - //TODO: Server feature still to be implemented, for now return default - return null; -}; - -/** - * Get the language selected from the URL, format '?lang=en'. - * @return {string} Selected language. - */ -Ardublockly.getUrlLanguage = function() { - var langKey = 'lang'; - var val = location.search.match(new RegExp('[?&]' + langKey + '=([^&]+)')); - var language = val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : ''; - if (Ardublockly.LANGUAGE_NAME[language] === undefined) { - language = null; - } - return language; -}; - -/** - * Populates the settings language selection menu. - * @param {!string} selectedLang Language to be marked as selected. - */ -Ardublockly.populateLanguageMenu = function(selectedLang) { - var languageMenu = document.getElementById('language'); - languageMenu.options.length = 0; - - for (var lang in Ardublockly.LANGUAGE_NAME) { - var option = new Option(Ardublockly.LANGUAGE_NAME[lang], lang); - if (lang == selectedLang) { - option.selected = true; - } - languageMenu.options.add(option); - } - languageMenu.onchange = Ardublockly.changeLanguage; -}; - -/** - * Because new languages are injected by overwriting Ardublockly.LOCALISED_TEXT - * we keep a local copy of the default language (included in the html header) so - * that we can still retrieve these strings if the translation cannot be found. - */ -Ardublockly.duplicateDefaultLang = function() { - for (var textId in Ardublockly.LOCALISED_TEXT) { - Ardublockly.DEFAULT_LANG_TEXT[textId] = Ardublockly.LOCALISED_TEXT[textId]; - } -}; - -/** Updates the page text strings with the new language. */ -Ardublockly.updateLanguageText = function() { - for (var textId in Ardublockly.LOCALISED_TEXT) { - var textStrings = document.getElementsByClassName('translatable_' + textId); - for (var i = 0; i < textStrings.length; i++) { - textStrings[i].innerHTML = Ardublockly.getLocalStr(textId); - } - } -}; - -/** - * Injects the language JavaScript files into the html head element. - * @param {string} langKey Dictionary key for the language to inject, must also - * be JS file name. - */ -Ardublockly.injectLanguageJsSources = function(langKey) { - var head = document.getElementsByTagName('head')[0]; - - // Retrieve and inject Ardublockly translations synchronously - var appLangJsLoad = document.createElement('script'); - var request = ArdublocklyServer.createRequest(); - var appLangJdPath = 'msg/' + langKey + '.js'; - try { - request.open('GET', appLangJdPath, false); - request.send(''); - appLangJsLoad.text = request.responseText; - } catch (e) { - // Display an alert to indicate we cannot load languages - Ardublockly.alertMessage( - Ardublockly.getLocalStr('noServerTitle'), - Ardublockly.getLocalStr('noServerNoLangBody'), - false); - // But still asynchronous lazy load so at least some text gets translated - appLangJsLoad.src = appLangJdPath; - } - head.appendChild(appLangJsLoad); - - // Retrieve and inject Blockly translations asynchronously - var blocklyLangJsLoad = document.createElement('script'); - blocklyLangJsLoad.src = '../blockly/msg/js/' + langKey + '.js'; - head.appendChild(blocklyLangJsLoad); -}; - -/** Saves the blocks and reloads with a different language. */ -Ardublockly.changeLanguage = function() { - // Store the blocks for the duration of the reload only - Ardublockly.saveSessionStorageBlocks(); - - var languageMenu = document.getElementById('language'); - var newLang = encodeURIComponent( - languageMenu.options[languageMenu.selectedIndex].value); - var search = window.location.search; - if (search.length <= 1) { - search = '?lang=' + newLang; - } else if (search.match(/[?&]lang=[^&]*/)) { - search = search.replace(/([?&]lang=)[^&]*/, '$1' + newLang); - } else { - search = search.replace(/\?/, '?lang=' + newLang + '&'); - } - - window.location = window.location.protocol + '//' + - window.location.host + window.location.pathname + search; -}; - -/** - * Finds and returns the requests string in the localised language. - * If the translation is not returned, it fetches the original language string. - * @param {string} stringId - * @return {!string} The localised, original, or an empty string. - */ -Ardublockly.getLocalStr = function(stringId) { - var text = Ardublockly.LOCALISED_TEXT[stringId]; - if (!text) { - console.log('Localised text string ID "' + stringId + '" does not exists!'); - } - return text || Ardublockly.DEFAULT_LANG_TEXT[stringId] || ''; -}; +/** + * @license Licensed under the Apache License, Version 2.0 (the "License"): + * http://www.apache.org/licenses/LICENSE-2.0 + * + * @fileoverview Functions related to language and localisation. + */ +'use strict'; + +/** Create a namespace for the application. */ +var Ardublockly = Ardublockly || {}; + +/** Lookup for names of supported languages. Keys in ISO 639 format. */ +Ardublockly.LANGUAGE_NAME = { + 'de': 'Deutsch', + 'fr': 'Français', + 'en': 'English', + 'es': 'Español', + 'nl': 'Nederlands', + 'pt': 'Português', + 'it': 'Italiano', + 'ru': 'Русский' +}; + +/** + * Selected language, default English. + * @type {string} + */ +Ardublockly.LANG = 'en'; + +/** + * We keep a local copy of the default language in case translations cannot + * be found in the injected language file. + * @type {Object} + */ +Ardublockly.DEFAULT_LANG_TEXT = {}; + + +/** Initialize the page language. */ +Ardublockly.initLanguage = function() { + // Save the current default language ID to check if it has been changed + var defaultLang = Ardublockly.LANG; + + // Check server settings and url language, url gets priority + Ardublockly.LANG = Ardublockly.getUrlLanguage() || + Ardublockly.getLanguageSetting() || Ardublockly.LANG; + + Ardublockly.populateLanguageMenu(Ardublockly.LANG); + + if (defaultLang !== Ardublockly.LANG) { + Ardublockly.duplicateDefaultLang(); + Ardublockly.injectLanguageJsSources(Ardublockly.LANG); + Ardublockly.updateLanguageText(); + } +}; + +/** + * Get the language previously set by the user from the server settings. + * @return {string} Language saved in the server settings. + */ +Ardublockly.getLanguageSetting = function() { + //TODO: Server feature still to be implemented, for now return default + return null; +}; + +/** + * Get the language selected from the URL, format '?lang=en'. + * @return {string} Selected language. + */ +Ardublockly.getUrlLanguage = function() { + var langKey = 'lang'; + var val = location.search.match(new RegExp('[?&]' + langKey + '=([^&]+)')); + var language = val ? decodeURIComponent(val[1].replace(/\+/g, '%20')) : ''; + if (Ardublockly.LANGUAGE_NAME[language] === undefined) { + language = null; + } + return language; +}; + +/** + * Populates the settings language selection menu. + * @param {!string} selectedLang Language to be marked as selected. + */ +Ardublockly.populateLanguageMenu = function(selectedLang) { + var languageMenu = document.getElementById('language'); + languageMenu.options.length = 0; + + for (var lang in Ardublockly.LANGUAGE_NAME) { + var option = new Option(Ardublockly.LANGUAGE_NAME[lang], lang); + if (lang == selectedLang) { + option.selected = true; + } + languageMenu.options.add(option); + } + languageMenu.onchange = Ardublockly.changeLanguage; +}; + +/** + * Because new languages are injected by overwriting Ardublockly.LOCALISED_TEXT + * we keep a local copy of the default language (included in the html header) so + * that we can still retrieve these strings if the translation cannot be found. + */ +Ardublockly.duplicateDefaultLang = function() { + for (var textId in Ardublockly.LOCALISED_TEXT) { + Ardublockly.DEFAULT_LANG_TEXT[textId] = Ardublockly.LOCALISED_TEXT[textId]; + } +}; + +/** Updates the page text strings with the new language. */ +Ardublockly.updateLanguageText = function() { + for (var textId in Ardublockly.LOCALISED_TEXT) { + var textStrings = document.getElementsByClassName('translatable_' + textId); + for (var i = 0; i < textStrings.length; i++) { + textStrings[i].innerHTML = Ardublockly.getLocalStr(textId); + } + } +}; + +/** + * Injects the language JavaScript files into the html head element. + * @param {string} langKey Dictionary key for the language to inject, must also + * be JS file name. + */ +Ardublockly.injectLanguageJsSources = function(langKey) { + var head = document.getElementsByTagName('head')[0]; + + // Retrieve and inject Ardublockly translations synchronously + var appLangJsLoad = document.createElement('script'); + var request = ArdublocklyServer.createRequest(); + var appLangJdPath = 'msg/' + langKey + '.js'; + try { + request.open('GET', appLangJdPath, false); + request.send(''); + appLangJsLoad.text = request.responseText; + } catch (e) { + // Display an alert to indicate we cannot load languages + Ardublockly.alertMessage( + Ardublockly.getLocalStr('noServerTitle'), + Ardublockly.getLocalStr('noServerNoLangBody'), + false); + // But still asynchronous lazy load so at least some text gets translated + appLangJsLoad.src = appLangJdPath; + } + head.appendChild(appLangJsLoad); + + // Retrieve and inject Blockly translations asynchronously + var blocklyLangJsLoad = document.createElement('script'); + blocklyLangJsLoad.src = '../blockly/msg/js/' + langKey + '.js'; + head.appendChild(blocklyLangJsLoad); +}; + +/** Saves the blocks and reloads with a different language. */ +Ardublockly.changeLanguage = function() { + // Store the blocks for the duration of the reload only + Ardublockly.saveSessionStorageBlocks(); + + var languageMenu = document.getElementById('language'); + var newLang = encodeURIComponent( + languageMenu.options[languageMenu.selectedIndex].value); + var search = window.location.search; + if (search.length <= 1) { + search = '?lang=' + newLang; + } else if (search.match(/[?&]lang=[^&]*/)) { + search = search.replace(/([?&]lang=)[^&]*/, '$1' + newLang); + } else { + search = search.replace(/\?/, '?lang=' + newLang + '&'); + } + + window.location = window.location.protocol + '//' + + window.location.host + window.location.pathname + search; +}; + +/** + * Finds and returns the requests string in the localised language. + * If the translation is not returned, it fetches the original language string. + * @param {string} stringId + * @return {!string} The localised, original, or an empty string. + */ +Ardublockly.getLocalStr = function(stringId) { + var text = Ardublockly.LOCALISED_TEXT[stringId]; + if (!text) { + console.log('Localised text string ID "' + stringId + '" does not exists!'); + } + return text || Ardublockly.DEFAULT_LANG_TEXT[stringId] || ''; +}; From bf143710a351556029c24f221fdb271f4ebca379 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 13:02:19 +0200 Subject: [PATCH 3/7] Add files via upload --- ardublockly/msg/de.js | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 ardublockly/msg/de.js diff --git a/ardublockly/msg/de.js b/ardublockly/msg/de.js new file mode 100644 index 0000000000..4bf4244072 --- /dev/null +++ b/ardublockly/msg/de.js @@ -0,0 +1,105 @@ +var Ardublockly = Ardublockly || {}; +Ardublockly.LOCALISED_TEXT = { + translationLanguage: "Deutsch", + title: "Ardublockly", + blocks: "Blöcke", + /* Menu */ + open: "Öffnen", + save: "Speichern", + deleteAll: "Alle löschen", + settings: "Einstellungen", + documentation: "Dokumentation", + reportBug: "Fehler melden", + examples: "Beispiele", + /* Settings */ + compilerLocation: "Pfad zum Compiler", + compilerLocationDefault: "Pfad zum Compiler unbekannt", + sketchFolder: "Sketch Ordner", + sketchFolderDefault: "Sketch Ordner unbekannt", + arduinoBoard: "Arduino Board", + arduinoBoardDefault: "Arduino Board unbekannt", + comPort: "COM Port", + comPortDefault: "COM Port unbekannt", + defaultIdeButton: "Standard IDE Schaltfläche", + defaultIdeButtonDefault: "Standardaktion für IDE Schaltfläche unbekannt", + language: "Sprache", + languageDefault: "Sprache unbekannt", + sketchName: "Sketch Name", + /* Arduino console output */ + arduinoOpMainTitle: "Arduino IDE Ausgabe", + arduinoOpWaiting: "Wartet auf IDE Ausgabe...", + arduinoOpUploadedTitle: "Sketch erfolgreich hochgeladen", + arduinoOpVerifiedTitle: "Sketch erfolgreich geprüft", + arduinoOpOpenedTitle: "Sketch in IDE geöffnet", + arduinoOpOpenedBody: "Der Sketch sollte in der Arduino IDE geöffnet worden sein.", + arduinoOpErrorTitle: "Ein Fehler ist aufgetreten", + arduinoOpErrorIdContext_0: "Kein Fehler.", + arduinoOpErrorIdContext_1: "Compilieren oder Hochladen fehlgeschlagen.", + arduinoOpErrorIdContext_2: "Sketch wurde nicht gefunden.", + arduinoOpErrorIdContext_3: "Ungültiges Befehlszeilen Argument.", + arduinoOpErrorIdContext_4: "Preference-Flag welcher an 'get-pref' übergeben wurde existiert nicht.", + arduinoOpErrorIdContext_5: "Unklarer Fehler, aber Arduino IDE wirft diesen Fehler manchmal.", + arduinoOpErrorIdContext_50: "Unerwarteter Fehlercode der Arduino IDE", + arduinoOpErrorIdContext_51: "Sketch Datei konnte nicht erstellt werden", + arduinoOpErrorIdContext_52: "Ungültiger Pfad zur intern erstellen Sketch-Datei", + arduinoOpErrorIdContext_53: "Arduino IDE kann nicht gefunden werden
" + + "Der Pfad zum Compiler wurde nicht korrekt festgelegt.
" + + "Bitte vergewissern sie sich, dass der Pfad in den Einstellungen korrekt festgelegt wurde.", + arduinoOpErrorIdContext_54: "Was sollen wir mit dem Sketch machen?
" + + "Die Standardaktion zum Öffnen der IDE wurde nicht gesetzt.
" + + "Bitte wähle eine Standardaktion für die IDE in den Einstellungen.", + arduinoOpErrorIdContext_55: "Serieller Port nicht verfügbar
" + + "Der serielle Port ist nicht verfügbar.
" + + "Bitte prüfe ob der Arduino korrekt an den PC angeschlossen ist und der Pfad in den Einstellungen korrekt gewählt wurde.", + arduinoOpErrorIdContext_56: "Unbekanntes Arduino Board
" + + "Das Arduino Board wurde nicht ausgewählt.
" + + "Bitte wähle das passende Arduino Board in den Einstellungen.", + arduinoOpErrorIdContext_52: "Unerwarteter Serverfehler.", + arduinoOpErrorIdContext_64: "JSON konnte nicht geparsed werden.", + arduinoOpErrorUnknown: "Unerwarteter Fehler", + /* Modals */ + noServerTitle: "Ardublockly App läuft nicht", + noServerTitleBody: "

Damit alle Ardublockly Features funktionieren, muss die Ardublockly Desktop App lokal auf ihrem Computer laufen.

" + + "

Falls sie eine Onlineversion nutzen, können sie weder die Einstellungen verändern, noch den Code der Blöcke auf den Arduino laden.

" + + "

Installations-Anweisungen können in der Ardublockly Repository nachgelesen werden.

" + + "

Sollte Ardublockly bereits installiert worden sein, vergewissern sie sich, dass die Anwendung korrekt läuft.

", + noServerNoLangBody: "Wenn die Ardublockly Desktopp App nicht läuft, kann die Sprache nicht vollständig gewechselt werden.", + addBlocksTitle: "Zusätzliche Blöcke", + /* Alerts */ + loadNewBlocksTitle: "Neue Blöcke laden?", + loadNewBlocksBody: "Das Laden einer neuen XML Datei überschreibt die aktuellen Blöcke im Arbeitsbereich.
" + + "Sind sie sicher, dass sie fortfahren möchten?", + discardBlocksTitle: "Blöcke löschen?", + discardBlocksBody: "Es befinden sich %1 Blöcke im Arbeitsbereich.
" + + "Sind sie sicher, dass sie diese löschen möchten?", + invalidXmlTitle: "Ungültiges XML", + invalidXmlBody: "Die XML Datei konnte nicht in Blöcke umgeschrieben werden. Bitte prüfen sie den XML Code und versuchen sie es erneut.", + /* Tooltips */ + uploadingSketch: "Sketch wird zum Arduino hochgeladen...", + uploadSketch: "Sketch zum Arduino hochladen", + verifyingSketch: "Prüfe Sketch...", + verifySketch: "Sketch prüfen", + openingSketch: "Sketch wird in Arduino IDE geöffnet...", + openSketch: "Sketch in Arduino IDE öffnen", + notImplemented: "Funktion wurde noch nicht umgesetzt.", + /* Prompts */ + ok: "OK", + okay: "Okay", + cancel: "Abbrechen", + return: "Zurück", + /* Cards */ + arduinoSourceCode: "Arduino Source Code", + blocksXml: "Blöcke XML", + /* Toolbox Categories*/ + catLogic: "Logik", + catLoops: "Schleifen", + catMath: "Mathematik", + catText: "Text", + catVariables: "Variabeln", + catFunctions: "Funktionen", + catInputOutput: "Ein-/Ausgänge", + catTime: "Zeit", + catAudio: "Audio", + catMotors: "Motoren", + catComms: "Kommunikation", +}; From 9e60a11f855f8b4bd33a0c875588a8a3f82e43f4 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 21:36:26 +0200 Subject: [PATCH 4/7] =?UTF-8?q?=C3=9Cbersetzung=20auf=20Deutsch=20f=C3=BCr?= =?UTF-8?q?=20Grundfunktionen=20von=20Ardublockly=20abgeschlossen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ardublockly/msg/de.js | 2 +- blockly/msg/json/de_ardublockly.json | 124 +++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 blockly/msg/json/de_ardublockly.json diff --git a/ardublockly/msg/de.js b/ardublockly/msg/de.js index 4bf4244072..7e8da9ba08 100644 --- a/ardublockly/msg/de.js +++ b/ardublockly/msg/de.js @@ -6,7 +6,7 @@ Ardublockly.LOCALISED_TEXT = { /* Menu */ open: "Öffnen", save: "Speichern", - deleteAll: "Alle löschen", + deleteAll: "Alles löschen", settings: "Einstellungen", documentation: "Dokumentation", reportBug: "Fehler melden", diff --git a/blockly/msg/json/de_ardublockly.json b/blockly/msg/json/de_ardublockly.json new file mode 100644 index 0000000000..abd98a9baa --- /dev/null +++ b/blockly/msg/json/de_ardublockly.json @@ -0,0 +1,124 @@ +{ + "@metadata": { + "author": "royassas", + "lastupdated": "2018-10-08 13:13:00.120000", + "locale": "de", + "messagedocumentation" : "qqq_ardublockly" + }, + "ARD_TYPE_CHAR": "Charakter", + "ARD_TYPE_TEXT": "Text", + "ARD_TYPE_BOOL": "Boolean", + "ARD_TYPE_SHORT": "Kurze Nummer", + "ARD_TYPE_NUMBER": "Nummer", + "ARD_TYPE_LONG": "Lange Nummer", + "ARD_TYPE_DECIMAL": "Dezimalzahl", + "ARD_TYPE_ARRAY": "Array", + "ARD_TYPE_NULL": "Null", + "ARD_TYPE_UNDEF": "Undefiniert", + "ARD_TYPE_CHILDBLOCKMISSING": "ChildBlockFehlt", + "ARD_HIGH": "HIGH", + "ARD_LOW": "LOW", + "ARD_ANALOGREAD": "Lies den analogen Pin#", + "ARD_ANALOGREAD_TIP": "Gibt einen Wert zwischen 0 und 1024 zurück", + "ARD_ANALOGWRITE": "Setze den analogen Pin#", + "ARD_ANALOGWRITE_TIP": "Schreibe einen Wert zwischen 0 und 255 auf einen definierten PWM Port", + "ARD_HIGHLOW_TIP": "Setze einen Pin auf logisch High oder Low.", + "ARD_DIGITALREAD": "Lies einen digitalen Pin#", + "ARD_DIGITALREAD_TIP": "Lies eine digitalen Wert auf einem Pin: HIGH oder LOW", + "ARD_DIGITALWRITE": "Setze den digitialen Pin#", + "ARD_WRITE_TO": "auf", + "ARD_DIGITALWRITE_TIP": "Schreibe den digitalen Wert HIGH oder LOW auf einen definierten Port", + "ARD_BUILTIN_LED": "Setze Zustand der eingebauten LED", + "ARD_BUILTIN_LED_TIP": "LED der eingebauten LED des Arduino ein oder ausschalten", + "ARD_DEFINE": "Definiere", + "ARD_TONE_PIN": "Ton Pin#", + "ARD_TONE_FREQ": "Frequenz", + "ARD_TONE_PIN_TIP": "Generiere Töne auf einem Pin", + "ARD_NOTONE_PIN": "Kein Ton Pin#", + "ARD_NOTONE_PIN_TIP": "Ton-Generierung auf einem Pin stoppen", + "ARD_MAP": "Map", + "ARD_MAP_VAL": "Wert zu [0-", + "ARD_MAP_TIP": "Mappt eine Zahl von [0-1024] auf einen anderen Zahlenbereich.", + "ARD_FUN_RUN_SETUP": "Arduino mache anfangs:", + "ARD_FUN_RUN_LOOP": "Arduino wiederhole unendlich:", + "ARD_FUN_RUN_TIP": "Definiert die Arduino setup() and loop() Funktionen.", + "ARD_PIN_WARN1": "Pin %1 is needed for %2 as pin %3. Already used as %4.", + "ARD_SERIAL_SETUP": "Setup", + "ARD_SERIAL_SPEED": ": speed to", + "ARD_SERIAL_BPS": "bps", + "ARD_SERIAL_SETUP_TIP": "Selects the speed for a specific Serial peripheral", + "ARD_SERIAL_PRINT": "print", + "ARD_SERIAL_PRINT_NEWLINE": "add new line", + "ARD_SERIAL_PRINT_TIP": "Prints data to the console/serial port as human-readable ASCII text.", + "ARD_SERIAL_PRINT_WARN": "A setup block for %1 must be added to the workspace to use this block!", + "ARD_SERVO_WRITE": "set SERVO from Pin", + "ARD_SERVO_WRITE_TO": "to", + "ARD_SERVO_WRITE_DEG_180": "Degrees (0~180)", + "ARD_SERVO_WRITE_TIP": "Set a Servo to an specified angle", + "ARD_SERVO_READ": "read SERVO from PIN#", + "ARD_SERVO_READ_TIP": "Read a Servo angle", + "ARD_SPI_SETUP": "Setup", + "ARD_SPI_SETUP_CONF": "configuration:", + "ARD_SPI_SETUP_SHIFT": "data shift", + "ARD_SPI_SETUP_MSBFIRST": "MSBFIRST", + "ARD_SPI_SETUP_LSBFIRST": "LSBFIRST", + "ARD_SPI_SETUP_DIVIDE": "clock divide", + "ARD_SPI_SETUP_MODE": "SPI mode (idle - edge)", + "ARD_SPI_SETUP_MODE0": "0 (Low - Falling)", + "ARD_SPI_SETUP_MODE1": "1 (Low - Rising)", + "ARD_SPI_SETUP_MODE2": "2 (High - Falling)", + "ARD_SPI_SETUP_MODE3": "3 (High - Rising)", + "ARD_SPI_SETUP_TIP": "Configures the SPI peripheral.", + "ARD_SPI_TRANS_NONE": "none", + "ARD_SPI_TRANS_VAL": "transfer", + "ARD_SPI_TRANS_SLAVE": "to slave pin", + "ARD_SPI_TRANS_TIP": "Send a SPI message to an specified slave device.", + "ARD_SPI_TRANS_WARN1": "A setup block for %1 must be added to the workspace to use this block!", + "ARD_SPI_TRANS_WARN2": "Old pin value %1 is no longer available.", + "ARD_SPI_TRANSRETURN_TIP": "Send a SPI message to an specified slave device and get data back.", + "ARD_STEPPER_SETUP": "Setup stepper motor", + "ARD_STEPPER_MOTOR": "stepper motor:", + "ARD_STEPPER_DEFAULT_NAME": "MyStepper", + "ARD_STEPPER_NUMBER_OF_PINS": "Number of pins", + "ARD_STEPPER_TWO_PINS": "2", + "ARD_STEPPER_FOUR_PINS": "4", + "ARD_STEPPER_PIN1": "pin1#", + "ARD_STEPPER_PIN2": "pin2#", + "ARD_STEPPER_PIN3": "pin3#", + "ARD_STEPPER_PIN4": "pin4#", + "ARD_STEPPER_REVOLVS": "how many steps per revolution", + "ARD_STEPPER_SPEED": "set speed (rpm) to", + "ARD_STEPPER_SETUP_TIP": "Configures a stepper motor pinout and other settings.", + "ARD_STEPPER_STEP": "move stepper", + "ARD_STEPPER_STEPS": "steps", + "ARD_STEPPER_STEP_TIP": "Turns the stepper motor a specific number of steps.", + "ARD_STEPPER_COMPONENT": "stepper", + "ARD_COMPONENT_WARN1": "A %1 configuration block with the same %2 name must be added to use this block!", + "ARD_TIME_DELAY": "wait", + "ARD_TIME_MS": "milliseconds", + "ARD_TIME_DELAY_TIP": "Wait specific time in milliseconds", + "ARD_TIME_DELAY_MICROS": "microseconds", + "ARD_TIME_DELAY_MICRO_TIP": "Wait specific time in microseconds", + "ARD_TIME_MILLIS": "current elapsed Time (milliseconds)", + "ARD_TIME_MILLIS_TIP": "Returns the number of milliseconds since the Arduino board began running the current program. Has to be stored in a positive long integer", + "ARD_TIME_MICROS": "current elapsed Time (microseconds)", + "ARD_TIME_MICROS_TIP": "Returns the number of microseconds since the Arduino board began running the current program. Has to be stored in a positive long integer", + "ARD_TIME_INF": "wait forever (end program)", + "ARD_TIME_INF_TIP": "Wait indefinitely, stopping the program.", + "ARD_VAR_AS": "as", + "ARD_VAR_AS_TIP": "Sets a value to a specific type", + "ARD_PULSE_READ": "measure %1 pulse on pin #%2", + "ARD_PULSE_READ_TIMEOUT": "measure %1 pulse on pin #%2 (timeout after %3 μs)", + "ARD_PULSE_TIP": "Measures the duration of a pulse on the selected pin.", + "ARD_PULSETIMEOUT_TIP": "Measures the duration of a pulse on the selected pin, if it is within the time-out in microseconds.", + "ARD_SETTONE": "Set tone on pin #", + "ARD_TONEFREQ": "at frequency", + "ARD_TONE_TIP": "Sets tone on pin to specified frequency within range 31 - 65535", + "ARD_TONE_WARNING": "Frequency must be in range 31 - 65535", + "ARD_NOTONE": "Turn off tone on pin #", + "ARD_NOTONE_TIP": "Turns the tone off on the selected pin", + "NEW_INSTANCE": "New instance...", + "RENAME_INSTANCE": "Rename instance...", + "NEW_INSTANCE_TITLE": "New instance name:", + "RENAME_INSTANCE_TITLE": "Rename all '%1' instances to:" +} From e22aa4616364430922036ba165e1ba324dbf8ae6 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 21:47:17 +0200 Subject: [PATCH 5/7] Revert to original Readme --- README.md | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 129 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f7613abe9d..206d1c912a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,130 @@ -# Ardublockly for MINT education by Makers im Zigerschlitz -[Ardublockly](https://github.com/carlosperate/ardublockly) is a visual programming editor for Arduino. It is based on Google's [Blockly][1], which has been forked to generate [Arduino][15] code. +# Ardublockly +Ardublockly is a visual programming editor for Arduino. It is based on Google's [Blockly][1], which has been forked to generate [Arduino][15] code. -This fork aims to add features used by the Makers im Zigerschlitz for their projects. +The `ArdublocklyServer` Python package initialises a local server to be able to compile and load the Arduino code using the [Arduino IDE][2]. + +This is all packaged in a self contained executable desktop application for Windows, Mac OS X, and Linux. + +![Ardublockly desktop program screenshot][desktop_screeshot] + + +## Features +* Generates Arduino code with visual drag-and-drop blocks +* Uploads the code to an Arduino Board +* Useful "code block warnings" +* Compatible with a wide range of official Arduino Boards +* Works on Windows / Linux / Mac OS X + +Ardublockly is still under development and a few features are not yet implemented. A to-do list can be found in the [TODO.md][3] file. + +Currently tested under Windows with Python 2.7 and 3.4 and in Linux and MacOS X with Python 2.7. + + +## Cloning the repository +Please note that there are submodules in the repository that need initialisation. So, to correctly clone the Ardublockly repository: + +``` +git clone https://github.com/carlosperate/ardublockly.git +cd ardublockly +git submodule update --init --recursive +``` + + +## Installing +The desktop application is available for Windows/Mac/Linux and runs as a stand-alone executable that can be downloaded from the [Ardublockly repository releases page][4]. + +You will also need the [Arduino IDE version 1.6.x or higher][2]. + +#### Development builds +You can also test __UNSTABLE__ development builds automatically generated every time an update is added to the GitHub repository: + +| Linux build | Windows build | Mac OS X build | +|:-------------------:|:-------------------:|:--------------------:| +| [![Linux Build Status](https://circleci.com/gh/carlosperate/ardublockly/tree/master.svg?style=svg)](https://circleci.com/gh/carlosperate/ardublockly/tree/master) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t877g920hdiifc2i?svg=true)](https://ci.appveyor.com/project/carlosperate/ardublockly) | [![Mac Build Status](https://travis-ci.org/carlosperate/ardublockly.svg?branch=master)](https://travis-ci.org/carlosperate/ardublockly) | +| [Download Link][12] | [Download Link][13] | [Download Link][14] | + +#### "Core version" (Python server only) +If you prefer, the core software can be used by running only the Python server, which loads the web interface on your local browser (Chrome recommended). + +Full installation instructions for this version can be found in [this Github repository Wiki][5]. + +The quick version: Clone this repository, initialise all submodules, and execute: + +``` +python start.py +``` + +This will work on Windows, Linux (including ARM) and Mac OS X, with Python >2.7 or >3.4 + + +## Running +1. [Install Ardublockly][5]. +2. Install the [Arduino IDE][2] version 1.6.x or higher (latest version is always recommended). +3. Run Ardublockly as defined in your installation method. +3. Configure Ardublockly to locate the Arduino IDE [following these instructions][6]. + + +## Online Demos +A demo of the latest release of Ardublockly main interface can be found in the following two links (to load the code into an Arduino it requires the full Ardublockly application to be downloaded and run on your computer): + +#### [Ardublockly][10] +![WebApp screenshot responsive design][web_screenshot_responsive] + +#### [Ardublockly classic][11] +![WebApp screenshot][web_screenshot_classic] + + +## Documentation +The documentation, including installation instructions, configuration instructions, and developer information can be found in the [Ardublockly GitHub repository Wiki][7]. + +To download the documentation you can git clone the wiki data: + +``` +git clone https://github.com/carlosperate/ardublockly.wiki.git +``` + + +## Credit +This project has been inspired by [BlocklyDuino][16]. + +Blockly original source is Copyright of Google Inc. [https://developers.google.com/blockly/][1]. A list of changes to the Blockly fork can be found in the [Blockly subdirectory README][17] file. + + +## License +Copyright (c) 2016 carlosperate https://github.com/carlosperate/ + +Unless stated otherwise, the source code of this projects is +licensed under the Apache License, Version 2.0 (the "License"); +you may not use any of the licensed files within this project +except in compliance with the License. + +The full document can be found in the [LICENSE][9] file. + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + + +[1]: https://developers.google.com/blockly/ +[2]: http://www.arduino.cc/en/main/software/ +[3]: TODO.md +[4]: https://github.com/carlosperate/ardublockly/releases/ +[5]: https://github.com/carlosperate/ardublockly/wiki/Installing-Ardublockly +[6]: https://github.com/carlosperate/ardublockly/wiki/Configure-Ardublockly +[7]: https://github.com/carlosperate/ardublockly/wiki +[8]: https://github.com/carlosperate/ardublockly/compare/blockly-original...master +[9]: https://github.com/carlosperate/ardublockly/blob/master/LICENSE +[10]: http://ardublockly.embeddedlog.com/demo/index.html +[11]: http://ardublockly.embeddedlog.com/demo/classic/index.html +[12]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=linux/ +[13]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=windows/ +[14]: http://ardublockly-builds.s3-website-us-west-2.amazonaws.com/index.html?prefix=mac/ +[15]: http://www.arduino.cc +[16]: https://github.com/BlocklyDuino/BlocklyDuino +[17]: blockly/README.md + +[desktop_screeshot]: http://carlosperate.github.io/ardublockly/images/screenshot_desktop_1.png +[web_screenshot_responsive]: http://carlosperate.github.io/ardublockly/images/screenshot_material_all_small.jpg +[web_screenshot_classic]: http://carlosperate.github.io/ardublockly/images/screenshot_1.png \ No newline at end of file From bdca5858b6a2ba8b63029d06e0045082d04d38b7 Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 21:53:53 +0200 Subject: [PATCH 6/7] Still trying to leave original README the way it was... --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 206d1c912a..41396f0f8e 100644 --- a/README.md +++ b/README.md @@ -127,4 +127,4 @@ limitations under the License. [desktop_screeshot]: http://carlosperate.github.io/ardublockly/images/screenshot_desktop_1.png [web_screenshot_responsive]: http://carlosperate.github.io/ardublockly/images/screenshot_material_all_small.jpg -[web_screenshot_classic]: http://carlosperate.github.io/ardublockly/images/screenshot_1.png \ No newline at end of file +[web_screenshot_classic]: http://carlosperate.github.io/ardublockly/images/screenshot_1.png From 67f8498420f358e0828a33bc865651d68e3fa96e Mon Sep 17 00:00:00 2001 From: Mike Zweifel Date: Mon, 8 Oct 2018 22:24:19 +0200 Subject: [PATCH 7/7] Erzwinge LR --- blockly/msg/json/de_ardublockly.json | 158 +++++++++++++-------------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/blockly/msg/json/de_ardublockly.json b/blockly/msg/json/de_ardublockly.json index abd98a9baa..b37c9b1dae 100644 --- a/blockly/msg/json/de_ardublockly.json +++ b/blockly/msg/json/de_ardublockly.json @@ -8,9 +8,9 @@ "ARD_TYPE_CHAR": "Charakter", "ARD_TYPE_TEXT": "Text", "ARD_TYPE_BOOL": "Boolean", - "ARD_TYPE_SHORT": "Kurze Nummer", - "ARD_TYPE_NUMBER": "Nummer", - "ARD_TYPE_LONG": "Lange Nummer", + "ARD_TYPE_SHORT": "Short Integer", + "ARD_TYPE_NUMBER": "Integer", + "ARD_TYPE_LONG": "Long Integer", "ARD_TYPE_DECIMAL": "Dezimalzahl", "ARD_TYPE_ARRAY": "Array", "ARD_TYPE_NULL": "Null", @@ -21,15 +21,15 @@ "ARD_ANALOGREAD": "Lies den analogen Pin#", "ARD_ANALOGREAD_TIP": "Gibt einen Wert zwischen 0 und 1024 zurück", "ARD_ANALOGWRITE": "Setze den analogen Pin#", - "ARD_ANALOGWRITE_TIP": "Schreibe einen Wert zwischen 0 und 255 auf einen definierten PWM Port", + "ARD_ANALOGWRITE_TIP": "Gib einen Wert zwischen 0 und 255 auf den gewählten Pin aus.", "ARD_HIGHLOW_TIP": "Setze einen Pin auf logisch High oder Low.", - "ARD_DIGITALREAD": "Lies einen digitalen Pin#", - "ARD_DIGITALREAD_TIP": "Lies eine digitalen Wert auf einem Pin: HIGH oder LOW", + "ARD_DIGITALREAD": "Lies den digitalen Pin#", + "ARD_DIGITALREAD_TIP": "Lies eine digitalen Wert auf einem Pin: Ergibt HIGH oder LOW als Resultat.", "ARD_DIGITALWRITE": "Setze den digitialen Pin#", "ARD_WRITE_TO": "auf", "ARD_DIGITALWRITE_TIP": "Schreibe den digitalen Wert HIGH oder LOW auf einen definierten Port", "ARD_BUILTIN_LED": "Setze Zustand der eingebauten LED", - "ARD_BUILTIN_LED_TIP": "LED der eingebauten LED des Arduino ein oder ausschalten", + "ARD_BUILTIN_LED_TIP": "LED der eingebauten LED des Arduino ein (HIGH) oder ausschalten (LOW)", "ARD_DEFINE": "Definiere", "ARD_TONE_PIN": "Ton Pin#", "ARD_TONE_FREQ": "Frequenz", @@ -39,86 +39,86 @@ "ARD_MAP": "Map", "ARD_MAP_VAL": "Wert zu [0-", "ARD_MAP_TIP": "Mappt eine Zahl von [0-1024] auf einen anderen Zahlenbereich.", - "ARD_FUN_RUN_SETUP": "Arduino mache anfangs:", - "ARD_FUN_RUN_LOOP": "Arduino wiederhole unendlich:", + "ARD_FUN_RUN_SETUP": "Arduino - Mach zuerst:", + "ARD_FUN_RUN_LOOP": "danach wiederhole unendlich:", "ARD_FUN_RUN_TIP": "Definiert die Arduino setup() and loop() Funktionen.", - "ARD_PIN_WARN1": "Pin %1 is needed for %2 as pin %3. Already used as %4.", - "ARD_SERIAL_SETUP": "Setup", - "ARD_SERIAL_SPEED": ": speed to", + "ARD_PIN_WARN1": "Pin %1 wird benötigt für %2 als Pin %3. Bereits benutzt als %4.", + "ARD_SERIAL_SETUP": "Einstellungen", + "ARD_SERIAL_SPEED": ": Geschwindigkeit auf", "ARD_SERIAL_BPS": "bps", - "ARD_SERIAL_SETUP_TIP": "Selects the speed for a specific Serial peripheral", - "ARD_SERIAL_PRINT": "print", - "ARD_SERIAL_PRINT_NEWLINE": "add new line", - "ARD_SERIAL_PRINT_TIP": "Prints data to the console/serial port as human-readable ASCII text.", - "ARD_SERIAL_PRINT_WARN": "A setup block for %1 must be added to the workspace to use this block!", - "ARD_SERVO_WRITE": "set SERVO from Pin", - "ARD_SERVO_WRITE_TO": "to", - "ARD_SERVO_WRITE_DEG_180": "Degrees (0~180)", - "ARD_SERVO_WRITE_TIP": "Set a Servo to an specified angle", - "ARD_SERVO_READ": "read SERVO from PIN#", - "ARD_SERVO_READ_TIP": "Read a Servo angle", - "ARD_SPI_SETUP": "Setup", - "ARD_SPI_SETUP_CONF": "configuration:", - "ARD_SPI_SETUP_SHIFT": "data shift", + "ARD_SERIAL_SETUP_TIP": "Wählt die Geschwindigkeit für ein bestimmtes serielles Gerät", + "ARD_SERIAL_PRINT": "Print (Gib aus)", + "ARD_SERIAL_PRINT_NEWLINE": "Zeilenumbruch hinzufügen", + "ARD_SERIAL_PRINT_TIP": "Gibt Daten an die Konsole oder den Serial-Port in lesbarem ASCII Text aus.", + "ARD_SERIAL_PRINT_WARN": "Ein Konfigurationsblock für %1 muss dem Arbeitsbereich hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_SERVO_WRITE": "Setze den Servomotor auf Pin#", + "ARD_SERVO_WRITE_TO": "auf", + "ARD_SERVO_WRITE_DEG_180": "Grad (0~180)", + "ARD_SERVO_WRITE_TIP": "Setzt einen Servomotor auf einen bestimmten Winkel", + "ARD_SERVO_READ": "Lies den Servomotor auf Pin#", + "ARD_SERVO_READ_TIP": "Lies den aktuellen Winkel des Servomotors", + "ARD_SPI_SETUP": "Einstellungen", + "ARD_SPI_SETUP_CONF": "Konfiguration:", + "ARD_SPI_SETUP_SHIFT": "Data Shift", "ARD_SPI_SETUP_MSBFIRST": "MSBFIRST", "ARD_SPI_SETUP_LSBFIRST": "LSBFIRST", - "ARD_SPI_SETUP_DIVIDE": "clock divide", - "ARD_SPI_SETUP_MODE": "SPI mode (idle - edge)", + "ARD_SPI_SETUP_DIVIDE": "Clock Divide", + "ARD_SPI_SETUP_MODE": "SPI Modus (Ruhezustand (Idle) - Änderung (Edge))", "ARD_SPI_SETUP_MODE0": "0 (Low - Falling)", "ARD_SPI_SETUP_MODE1": "1 (Low - Rising)", "ARD_SPI_SETUP_MODE2": "2 (High - Falling)", "ARD_SPI_SETUP_MODE3": "3 (High - Rising)", - "ARD_SPI_SETUP_TIP": "Configures the SPI peripheral.", - "ARD_SPI_TRANS_NONE": "none", - "ARD_SPI_TRANS_VAL": "transfer", - "ARD_SPI_TRANS_SLAVE": "to slave pin", - "ARD_SPI_TRANS_TIP": "Send a SPI message to an specified slave device.", - "ARD_SPI_TRANS_WARN1": "A setup block for %1 must be added to the workspace to use this block!", - "ARD_SPI_TRANS_WARN2": "Old pin value %1 is no longer available.", - "ARD_SPI_TRANSRETURN_TIP": "Send a SPI message to an specified slave device and get data back.", - "ARD_STEPPER_SETUP": "Setup stepper motor", - "ARD_STEPPER_MOTOR": "stepper motor:", - "ARD_STEPPER_DEFAULT_NAME": "MyStepper", - "ARD_STEPPER_NUMBER_OF_PINS": "Number of pins", + "ARD_SPI_SETUP_TIP": "Richtet ein SPI Gerät ein.", + "ARD_SPI_TRANS_NONE": "None", + "ARD_SPI_TRANS_VAL": "Transfer", + "ARD_SPI_TRANS_SLAVE": "an Slave Pin", + "ARD_SPI_TRANS_TIP": "Sende eine SPI Nachricht an ein bestimmtes Slave-Gerät.", + "ARD_SPI_TRANS_WARN1": "Ein Konfigurationsblock für %1 muss dem Arbeitsbereich hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_SPI_TRANS_WARN2": "Vorheriger Pin-Wert %1 ist nicht mehr verfügbar.", + "ARD_SPI_TRANSRETURN_TIP": "Sende eine SPI Nachricht an ein Slave-Gerät und erhalte Daten zurück.", + "ARD_STEPPER_SETUP": "Schrittmotor einrichten", + "ARD_STEPPER_MOTOR": "Schrittmotor:", + "ARD_STEPPER_DEFAULT_NAME": "MeinSchrittmotor", + "ARD_STEPPER_NUMBER_OF_PINS": "Anzahl Anschlüsse des Schrittmotors", "ARD_STEPPER_TWO_PINS": "2", "ARD_STEPPER_FOUR_PINS": "4", - "ARD_STEPPER_PIN1": "pin1#", - "ARD_STEPPER_PIN2": "pin2#", - "ARD_STEPPER_PIN3": "pin3#", - "ARD_STEPPER_PIN4": "pin4#", - "ARD_STEPPER_REVOLVS": "how many steps per revolution", - "ARD_STEPPER_SPEED": "set speed (rpm) to", - "ARD_STEPPER_SETUP_TIP": "Configures a stepper motor pinout and other settings.", - "ARD_STEPPER_STEP": "move stepper", - "ARD_STEPPER_STEPS": "steps", - "ARD_STEPPER_STEP_TIP": "Turns the stepper motor a specific number of steps.", - "ARD_STEPPER_COMPONENT": "stepper", - "ARD_COMPONENT_WARN1": "A %1 configuration block with the same %2 name must be added to use this block!", - "ARD_TIME_DELAY": "wait", - "ARD_TIME_MS": "milliseconds", - "ARD_TIME_DELAY_TIP": "Wait specific time in milliseconds", - "ARD_TIME_DELAY_MICROS": "microseconds", - "ARD_TIME_DELAY_MICRO_TIP": "Wait specific time in microseconds", - "ARD_TIME_MILLIS": "current elapsed Time (milliseconds)", - "ARD_TIME_MILLIS_TIP": "Returns the number of milliseconds since the Arduino board began running the current program. Has to be stored in a positive long integer", - "ARD_TIME_MICROS": "current elapsed Time (microseconds)", - "ARD_TIME_MICROS_TIP": "Returns the number of microseconds since the Arduino board began running the current program. Has to be stored in a positive long integer", - "ARD_TIME_INF": "wait forever (end program)", - "ARD_TIME_INF_TIP": "Wait indefinitely, stopping the program.", - "ARD_VAR_AS": "as", - "ARD_VAR_AS_TIP": "Sets a value to a specific type", - "ARD_PULSE_READ": "measure %1 pulse on pin #%2", - "ARD_PULSE_READ_TIMEOUT": "measure %1 pulse on pin #%2 (timeout after %3 μs)", - "ARD_PULSE_TIP": "Measures the duration of a pulse on the selected pin.", - "ARD_PULSETIMEOUT_TIP": "Measures the duration of a pulse on the selected pin, if it is within the time-out in microseconds.", - "ARD_SETTONE": "Set tone on pin #", - "ARD_TONEFREQ": "at frequency", - "ARD_TONE_TIP": "Sets tone on pin to specified frequency within range 31 - 65535", - "ARD_TONE_WARNING": "Frequency must be in range 31 - 65535", - "ARD_NOTONE": "Turn off tone on pin #", - "ARD_NOTONE_TIP": "Turns the tone off on the selected pin", - "NEW_INSTANCE": "New instance...", - "RENAME_INSTANCE": "Rename instance...", - "NEW_INSTANCE_TITLE": "New instance name:", - "RENAME_INSTANCE_TITLE": "Rename all '%1' instances to:" + "ARD_STEPPER_PIN1": "Pin1#", + "ARD_STEPPER_PIN2": "Pin2#", + "ARD_STEPPER_PIN3": "Pin3#", + "ARD_STEPPER_PIN4": "Pin4#", + "ARD_STEPPER_REVOLVS": "Anzahl Schritte pro Umdrehung", + "ARD_STEPPER_SPEED": "Setze Geschwindigkeit (RPM) auf", + "ARD_STEPPER_SETUP_TIP": "Richtet einen Schrittmotor mit Pinout und anderen Einstellungen ein.", + "ARD_STEPPER_STEP": "Bewege Schrittmotor", + "ARD_STEPPER_STEPS": "Schritte", + "ARD_STEPPER_STEP_TIP": "Dreht den Motor um eine bestimmte Anzahl Schritte weiter.", + "ARD_STEPPER_COMPONENT": "Schrittmotor", + "ARD_COMPONENT_WARN1": "Ein %1 Konfigurations-Block mit dem gleichen %2 Namen muss hinzugefügt werden um diesen Block nutzen zu können!", + "ARD_TIME_DELAY": "Warte", + "ARD_TIME_MS": "Millisekunden", + "ARD_TIME_DELAY_TIP": "Verzögere die Weiterführung des Programms um eine bestimmte Anzahl Millisekunden.", + "ARD_TIME_DELAY_MICROS": "Mikrosekunden", + "ARD_TIME_DELAY_MICRO_TIP": "Verzögere die Weiterführung des Programms um eine bestimmte Anzahl Millisekunden.", + "ARD_TIME_MILLIS": "Verstrichene Zeit in Millisekunden", + "ARD_TIME_MILLIS_TIP": "Gibt die Anzahl Millisekunden seit Start des Arduino Programms zurück. Muss in einem positiven long integer gespeichert werden.", + "ARD_TIME_MICROS": "Verstrichene Zeit in Mikrosekunden", + "ARD_TIME_MICROS_TIP": "Gibt die Anzahl Mikrosekunden seit Start des Arduino Programms zurück. Muss in einem positiven long integer gespeichert werden.", + "ARD_TIME_INF": "Warte unendlich lange (Beendet Programm)", + "ARD_TIME_INF_TIP": "Warte unendlich lange, dies stoppt das Programm.", + "ARD_VAR_AS": "als", + "ARD_VAR_AS_TIP": "Setzt einen Wert in einem spezifischen Datentypen um", + "ARD_PULSE_READ": "Miss %1 Puls auf Pin#%2", + "ARD_PULSE_READ_TIMEOUT": "Misse %1 Puls auf Pin#%2 (Timeout nach %3 μs)", + "ARD_PULSE_TIP": "Misst die Länge eines Pulses auf dem gewählten Pin.", + "ARD_PULSETIMEOUT_TIP": "Miss die Länge eines Pulses auf dem gewählten Pin falls er kürzer als das Timeout ist (in Mikrosekunden).", + "ARD_SETTONE": "Setze Ton auf Pin#", + "ARD_TONEFREQ": "auf Frequenz", + "ARD_TONE_TIP": "Setzt die Tonfrequenz auf dem gewählten Pin auf eine Frequenz im Bereich von 31 bis 65535Hz", + "ARD_TONE_WARNING": "Frequenz muss zwischen 31 und 65535Hz liegen", + "ARD_NOTONE": "Ton ausschalten auf Pin#", + "ARD_NOTONE_TIP": "Ton auf dem ausgewählten Pin ausschalten", + "NEW_INSTANCE": "Neue Instanz...", + "RENAME_INSTANCE": "Instanz umbenennen...", + "NEW_INSTANCE_TITLE": "Name der neuen Instanz:", + "RENAME_INSTANCE_TITLE": "Alle '%1' Instanzen umbenennen auf:" }