diff --git a/README.md b/README.md index 4aa4125a2..e9adeb960 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This is a free and open source visual programming language based on Blockly from Google & MIT, to generate C/C++ code, compile and upload to multiple options of microcontrollers. Compatible with any -[Otto DIY robot, Arduino oe ESP8266 and ESP32 related boards](https://www.ottodiy.com/software). It is the perfect +[Otto DIY robot, Arduino or ESP8266 and ESP32 related boards](https://www.ottodiy.com/software). It is the perfect software to get you started into coding and STEM robotics. ## [Click here to watch the video to see all the main features](https://youtu.be/chcWxh4Co_c) @@ -11,21 +11,17 @@ software to get you started into coding and STEM robotics. This software can work offline (standalone) by installing it on your computer. Depending on your operating system the installation files are already available or you have to create them yourself. -### Windows +### Windows and MacOS Download the installer from the [releases page](https://github.com/OttoDIY/blockly/releases). After the software is installed in your PC, it is ready to use immediately, you do not need to import Arduino libraries or any additional -swtup for the boards because it comes with a copy of the Arduino CLI, it is all in one software!, you will be ready +setup for the boards because it comes with a copy of the Arduino CLI, it is all in one software!, you will be ready to upload codes directly to your robot or any other Arduino project via USB. If your computer do not recognize the USB device or Otto, you have to install the CH340 or CH341 or FTDI driver that is in the ["driversUSB" folder](https://github.com/OttoDIY/blockly/tree/master/driversUSB) or download from [this link](https://sparks.gogo.co.nz/ch340.html) -### MacOS - -TODO - ### Linux For Linux operating systems go to [this repo](https://github.com/OttoDIY/blocklyLinux). @@ -34,13 +30,11 @@ For Linux operating systems go to [this repo](https://github.com/OttoDIY/blockly 1. Open any example. 2. Connect your Otto robot. -3. Select Arduino nano and the USB port where Otto is connected. +3. Select your board and the USB port where Otto is connected. 4. Upload and yes is that easy you can even just click upload and the code will be automatically compiled! Drag, drop, connect, mix, play and create your own codes. [Join the Otto Builder community, see all the cool stuff we are making with Otto Blockly and post your ideas!](http://builders.ottodiy.com/) -[## Support us by buying our awesome STEM robot kits](http://store.ottodiy.com/) - ## Help us add new Languages Leave your mark in the world by translating Blockly, you are welcome to contribute with any languages you know, it will @@ -50,12 +44,12 @@ The more people helping to translate the better, it is important to translate wh is the robot actually doing to be accurate. 1. Go to the [lang folder](https://github.com/OttoDIY/blockly/tree/master/www/lang) and duplicate the Arduino_en.js -Blockly_en.js and msg_en.js files from english +Blockly_en.js and msg_en.js files from English 2. Rename them according to your ISO language code, for example fr is for French, so the files are renamed like this: Arduino_fr.js Blockly_fr.js and msg_fr.js 3. Edit the files with any code editor software like [Visual Studio Code](https://code.visualstudio.com/) translating -only the english part after = in between the quotes "" in visual studio is the text in red. -4. Then open a pullrequest [here in github](https://github.com/OttoDIY/blockly/pulls) or just attach the files in a +only the English part after = in between the quotes "" in visual studio is the text in red. +4. Then open a pull request [here in github](https://github.com/OttoDIY/blockly/pulls) or just attach the files in a [new issue](https://github.com/OttoDIY/blockly/issues). ## How to run project @@ -70,7 +64,7 @@ You will need to have installed the node.js tools in your computer. The version >npm install -g windows-build-tool (this command is not working ok. If the log is held then you must install python 2.7 before because the problem is with the python installation.) > npm install -g node-gyp -4. Install required node modules.Execute following on the source code directory +4. Install required node modules. Execute following on the source code directory > npm install 5. Install Arduino CLI get arduino-cli.exe from https://github.com/arduino/arduino-cli/releases @@ -129,6 +123,7 @@ Thanks to all these great people and open projects, it has been possible to make - [Bodo Minea](https://github.com/BodoMinea) - [Takuji Kawata](https://github.com/takujikawata-pr) - [Nicolas Nca78](https://github.com/Nca78/Matrix_GFX) +- [Iván R.](https://github.com/IvanR3D) - [Node.js](https://nodejs.org/) - [Bootstrap](http://getbootstrap.com) - [Font Awesome](http://fontawesome.io) diff --git a/www/blocs&generateurs/actionneur.js b/www/blocs&generateurs/actionneur.js index 8b6cd7995..8cb8fd57f 100644 --- a/www/blocs&generateurs/actionneur.js +++ b/www/blocs&generateurs/actionneur.js @@ -22,7 +22,7 @@ Blockly.Arduino["play"]=function(block){ var value_pin=Blockly.Arduino.valueToCode(block, "PIN", Blockly.Arduino.ORDER_ATOMIC); var value_note=block.getFieldValue("note"); var value_tempo=block.getFieldValue("tempo"); - Blockly.Arduino.setups_["setup_output"]="pinMode( "+value_pin+" , OUTPUT);"; + Blockly.Arduino.setups_["setup_output" + value_pin]="pinMode( "+value_pin+" , OUTPUT);"; return "tone( "+value_pin+"," + value_note + "," + value_tempo + ");\n delay(" + value_tempo + ");\n" }; Blockly.Python["play"]=function(block){ diff --git a/www/blocs&generateurs/motor.js b/www/blocs&generateurs/motor.js index d57037d69..9e5e87d3d 100644 --- a/www/blocs&generateurs/motor.js +++ b/www/blocs&generateurs/motor.js @@ -471,7 +471,7 @@ Blockly.Blocks['servo_2wheels_init'] = { init: function() { + 'int leftSpeed = 0;\n' + 'void motorControl(int rightSpeed, int leftSpeed, int stepDelay) {\n' + 'rightServo.write(90 + rightSpeed); leftServo.write(90 - leftSpeed);\n' - + 'delay(stepDelay*1000);}'; + + 'delay(stepDelay*1000);rightServo.write(90);leftServo.write(90);}'; Blockly.Arduino.setups_['otto9_initw']='rightServo.write(90);\n' +'leftServo.write(90);\n' +'delay(1000);\n' diff --git a/www/examples/examples.json b/www/examples/examples.json index 800b23fe5..b4588f592 100644 --- a/www/examples/examples.json +++ b/www/examples/examples.json @@ -24,6 +24,8 @@ {"source_url": "matrixeyestest.xml","source_text": "👨‍💻Level 2 | 👀 16x8 LED eyes matrix test |","visible": true }, {"source_url": "matrixeyes.xml","source_text": "👨‍💻Level 2 | 👀 16x8 LED eyes matrix emotions |","visible": true}, {"source_url": "eyesall.xml","source_text": "👨‍💻Level 2 | 👀 Otto eyes all emotions |","visible": true}, + {"source_url": "matrixeyescounter.xml","source_text": "👨‍💻Level 2 | 👀 Otto eyes counter |","visible": true}, + {"source_url": "fizzbuzz.xml","source_text": "👨‍💻Level 2 | 🎮 Fizzbuzz |","visible": true}, {"source_url": "matrixtest.xml","source_text": "👨‍💻Level 2 | 👄 8x8 LED mouth matrix test |","visible": true }, {"source_url": "matrixmouths.xml","source_text": "👨‍💻Level 2 | 👄 8x8 LED mouth emotions | ","visible": true }, {"source_url": "matrixsing.xml","source_text": "👨‍💻Level 2 | 👄 8x8 LED mouth sing |","visible": true }, @@ -35,6 +37,11 @@ {"source_url": "ledpot.xml","source_text": "👨‍💻Level 2 | 💡 Single LED + potentiometer |","visible": true }, {"source_url": "ledfadepot.xml","source_text": "👨‍💻Level 2 | 💡 Single LED + potentiometer fade effect |","visible": true }, {"source_url": "servoadvanced.xml","source_text": "👨‍💻Level 2 | 🦿 Servo advanced control | ","visible": true}, + {"source_url": "neopixel.xml", "source_text": "👨‍💻Level 2 | 🌈 Neopixel Color LED |","visible": true }, + {"source_url": "neopixelfunctions.xml", "source_text": "👨‍💻Level 2 | 🌈 Neopixel Functions |","visible": true }, + {"source_url": "neopixelclockwisecounter.xml", "source_text": "👨‍💻Level 2 | 🌈 Neopixel Clockfun |","visible": true }, + {"source_url": "neopixelgame.xml", "source_text": "👨‍💻Level 2 | 🌈 Neopixel Game |","visible": true }, + {"source_url": "Police_Siren.xml", "source_text": "👨‍💻Level 2 | 🌈 Color neopixel LED police siren |","visible": true }, {"source_url": "IFTTT.xml","source_text": "👨‍🚀Level 3 | 🐱‍👤Ninja + ☁️ IoT IFTTT | ","visible": true }, {"source_url": "MQTT.xml","source_text": "👨‍🚀Level 3 | 🐱‍👤Ninja + ☁️ IoT MQTT |","visible": true }, {"source_url": "NTP.xml","source_text": "👨‍🚀Level 3 | 🐱‍👤Ninja + ☁️ IoT NTP | ","visible": true }, @@ -50,24 +57,23 @@ {"source_url": "oled.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display |","visible": true}, {"source_url": "oledshapes.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display shapes |","visible": true}, {"source_url": "oledframe.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display frame | ","visible": true}, + {"source_url": "oledicon.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display icon | ","visible": true}, {"source_url": "oledanimation.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display animation | ","visible": true}, {"source_url": "oledanimationwalk.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display animation walk | ","visible": true}, - {"source_url": "Oledspectrumgraph.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display Spectrum graph | ","visible": true}, - {"source_url": "oledicon.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display icon | ","visible": true}, {"source_url": "oledmouth.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display mouth | ","visible": true}, {"source_url": "oledmouths.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display mouths | ","visible": true}, - {"source_url": "oledlogo.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display Logo | ","visible": true}, + {"source_url": "oledlogo.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display Logo animation | ","visible": true}, + {"source_url": "Oledspectrumgraph.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display Spectrum graph | ","visible": true}, {"source_url": "oledgyro.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display with Gyro sensor | ","visible": true}, {"source_url": "servocalibration.xml","source_text": "👨‍🚀Level 3 | 🖥️ OLED display with Servo motor | ","visible": true}, {"source_url": "dhttemp.xml","source_text": "👨‍🚀Level 3 | 🌡️ DHT Temperature in OLED display |","visible": true}, {"source_url": "oledlaser.xml","source_text": "👨‍🚀Level 3 | ⚡ OLED display with Laser sensor | ","visible": true}, {"source_url": "Laser_Theremin.xml","source_text": "👨‍🚀Level 3 | ⚡ Laser sensor into Theremin |","visible": true }, - {"source_url": "neopixel.xml", "source_text": "👨‍🚀Level 3 | 🌈 Color neopixel LED |","visible": true }, - {"source_url": "Police_Siren.xml", "source_text": "👨‍🚀Level 3 | 🌈 Color neopixel LED police siren |","visible": true }, {"source_url": "dfmini.xml","source_text": "👨‍🚀Level 3 | 🔊 MP3 DF mini basics |","visible": true }, {"source_url": "dfminitriggers.xml","source_text": "👨‍🚀Level 3 | 🔊 MP3 DF mini Triggers |","visible": true }, {"source_url": "TFTicon.xml","source_text": "👨‍🚀Level 3 | 📺 TFT display Icon | ","visible": true }, {"source_url": "TFTAnimation.xml","source_text": "👨‍🚀Level 3 | 📺 TFT display animation | ","visible": true }, {"source_url": "irda.xml","source_text": "👨‍🚀Level 3 | 🎮 Remote infrared control |","visible": true}, + {"source_url": "serverOTA.xml","source_text": "👨‍🚀Level 3 | 🌐 Server and OTA ESP8266 |","visible": true }, {"source_url": "MUvision.xml","source_text": "👨‍🚀Level 3 | 👁️ MU vision AI camera |","visible": true} ] \ No newline at end of file diff --git a/www/examples/fizzbuzz.xml b/www/examples/fizzbuzz.xml new file mode 100644 index 000000000..1e2b91805 --- /dev/null +++ b/www/examples/fizzbuzz.xml @@ -0,0 +1,443 @@ + + toolbox_arduino_all + + + + 2 + 3 + 4 + 5 + 13 + + + counter + NUMBER + + + 1 + + + + + + + + + 100 + + + + + + + + and + + + + DIVISIBLE_BY + + + counter + + + + + 3 + + + + + + + + DIVISIBLE_BY + + + counter + + + + + 5 + + + + + + + + + + + 13 + + + + + FizzBuzz + + + + + + + + DIVISIBLE_BY + + + counter + + + + + 3 + + + + + + + TRUE + TRUE + TRUE + TRUE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + TRUE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + TRUE + TRUE + TRUE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + TRUE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + + + SHAKELEFT + 1000 + + + + + + + + DIVISIBLE_BY + + + counter + + + + + 5 + + + + + + + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + TRUE + TRUE + TRUE + TRUE + FALSE + TRUE + FALSE + TRUE + FALSE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + TRUE + FALSE + TRUE + FALSE + TRUE + FALSE + TRUE + FALSE + TRUE + FALSE + FALSE + FALSE + FALSE + TRUE + FALSE + FALSE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + FALSE + TRUE + TRUE + TRUE + TRUE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + FALSE + + + SHAKERIGHT + 1000 + + + + + + + + + 3 + + + counter + + + + + s + + + 1 + + + + + + + + + + + counter + + + 1 + + + + + + + + + + + happy_bmp + + + + + + + + + + + + \ No newline at end of file diff --git a/www/examples/matrixeyescounter.xml b/www/examples/matrixeyescounter.xml new file mode 100644 index 000000000..2f7616cd1 --- /dev/null +++ b/www/examples/matrixeyescounter.xml @@ -0,0 +1,133 @@ + + toolbox_arduino_all + + + + + + high + NUMBER + + + 0 + + + + + time + NUMBER + + + 0 + + + + + logo_bmp + + + + + + + + + + + + + 3 + + + time + + + + + TRUE + + + 0 + + + high + + + + + 0 + + + + + high + + + 1 + + + + + time + + + 1 + + + + + m + + + 200 + + + + + + + + + EQ + + + high + + + + + 8 + + + + + + + + + high + + + 0 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/examples/neopixelclockwisecounter.xml b/www/examples/neopixelclockwisecounter.xml new file mode 100644 index 000000000..a1a113973 --- /dev/null +++ b/www/examples/neopixelclockwisecounter.xml @@ -0,0 +1,164 @@ + + toolbox_arduino_all + + + + counter + CHARACTER + + + 0 + + + + + 11 + Choose the pin where your NeoPixel Ring is connected + + + 16 + + + + + + + + + counter + + + 15 + + + + + + + 16 + + + + + + + 11 + + + counter + + + + + 255 + + + + + 255 + + + + + 255 + + + + + counter + + + -1 + + + + + + + m + + + 100 + + + + + + + + + + + + + + + + + 16 + + + + + + + 11 + + + counter + + + + + 255 + + + + + 255 + + + + + 255 + + + + + counter + + + 1 + + + + + + + m + + + 100 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/examples/neopixelfunctions.xml b/www/examples/neopixelfunctions.xml new file mode 100644 index 000000000..700da8030 --- /dev/null +++ b/www/examples/neopixelfunctions.xml @@ -0,0 +1,895 @@ + + toolbox_arduino_all + + + + no.pixels + NUMBER + Change the number to the quantity of pixel in your NeoPixel Ring + + + 16 + + + + + counter + NUMBER + + + 0 + + + + + pause + NUMBER + + + 0 + + + + + 11 + Choose the pin where your NeoPixel Ring is connected + + + 8 + + + no.pixels + + + + + + + 30 + + + + + + + + + + + + + + + + + + + + + + 255 + + + + + 255 + + + + + 255 + + + + + s + + + 1 + + + + + + + + + + + + + + + + 250 + + + + + 50 + + + + + 50 + + + + + 50 + + + + + s + + + 1 + + + + + + + + + + + + + + + + 100 + + + + + 50 + + + + + 200 + + + + + 5 + + + + + + + + + + + + + 50 + + + + + 250 + + + + + 0 + + + + + 50 + + + + + s + + + 1 + + + + + + + + + + + + + + + 250 + + + + + 0 + + + + + 250 + + + + + s + + + 1 + + + + + + + + + + + + + + + 30 + + + + + 175 + + + + + 50 + + + + + s + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + // Right click the blocks and choose "Expand block" to see it + + + turnOff + + + + + + + + + + + + + + + turnOn[All] + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + counter + + + 1 + + + + + + + + + + + + + + + + + + + + + turnOnOddPixels + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + + ODD + + + counter + + + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + + + counter + + + 1 + + + + + + + + + + + + + + + + + + + + + turnOnEvenPixels + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + + EVEN + + + counter + + + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + + + counter + + + 1 + + + + + + + + + + + + + + + + + + + + + + turnOn (clockwise) + + + counter + + + MINUS + + + no.pixels + + + + + 1 + + + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + counter + + + -1 + + + + + + + m + + + 200 + + + pause + + + + + + + + + + + + + + + + + + + + + + + turnOn (counter clockwise) + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + counter + + + 1 + + + + + + + m + + + 200 + + + pause + + + + + + + + + + + + + + + + + + + + + + + blinkAll + + + + + 2 + + + times + + + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + counter + + + 1 + + + + + + + + + + + m + + + 100 + + + + + + + + m + + + 100 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/examples/neopixelgame.xml b/www/examples/neopixelgame.xml new file mode 100644 index 000000000..f8b19b849 --- /dev/null +++ b/www/examples/neopixelgame.xml @@ -0,0 +1,770 @@ + + toolbox_arduino_all + + + + 2 + 3 + 4 + 5 + 13 + + + no.pixels + NUMBER + Change the number to the quantity of pixel in your NeoPixel Ring + + + 16 + + + + + counter + NUMBER + + + 0 + + + + + pause + NUMBER + + + 0 + + + + + speed + NUMBER + + + 180 + + + + + randomNumber + NUMBER + + + 0 + + + + + level + NUMBER + + + 1 + + + + + 11 + Choose the pin where your NeoPixel Ring is connected + + + 8 + + + no.pixels + + + + + + + 30 + + + + + randomNumber + + + + + 0 + + + + + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + speed + + + + + + + // Right click the blocks and choose "Expand block" to see it + + + + + + + + turnOn[All] + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 255 + + + R + + + + + 255 + + + G + + + + + 255 + + + B + + + + + counter + + + 1 + + + + + + + + + + + + + + + + turnOff + + + + + + + + + + + + + gameLoop + + + counter + + + 0 + + + + + + + 2 + + + no.pixels + + + + + + + 10 + + + counter + + + + + 0 + + + + + 0 + + + + + 100 + + + + + + + m + + + 200 + + + speed + + + + + + + + #000000 + + + 0 + + + counter + + + + + + + counter + + + 1 + + + + + #ff0000 + + + 0 + + + randomNumber + + + + + + + + + + + + + + + + + + + + + + + + + + + + showLevel + + + + + counter + + + 0 + + + + + + + 2 + + + MINUS + + + level + + + + + 1 + + + + + + + + + 10 + + + counter + + + + + 10 + + + + + 255 + + + + + 50 + + + + + + + m + + + 50 + + + + + counter + + + 1 + + + + + + + + + + + + + + + + GT + + + level + + + + + 16 + + + + + + + 13 + LeisureSuit + + + level + + + 1 + + + + + speed + + + 180 + + + + + + + + + + + + + 5 + + + + + + + 10 + + + counter + + + + + 50 + + + + + 255 + + + + + 50 + + + + + + + m + + + 100 + + + + + + + 10 + + + counter + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + + m + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + checkStatus + + + + + EQ + + + 7 + FALSE + + + + + 1 + + + + + + + WHILE + + + EQ + + + 7 + FALSE + + + + + 1 + + + + + + + u + + + 100 + + + + + + + + + + EQ + + + counter + + + + + 10 + + + randomNumber + + + + + + + + + + + + + + 30 + + + + + 150 + + + + + 30 + + + + + S_happy + + + speed + + + -10 + + + + + level + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + 50 + + + + + 0 + + + + + 0 + + + + + S_OhOoh + + + + + + + + + + randomNumber + + + + + 0 + + + + + 15 + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/examples/oledlogo.xml b/www/examples/oledlogo.xml index c26a45189..91f9ef0d4 100644 --- a/www/examples/oledlogo.xml +++ b/www/examples/oledlogo.xml @@ -1,10 +1,43 @@ - toolbox_arduino_all + toolbox_arduino_all-esp8266 64 0x3C + + + i + NUMBER + + + 0 + + + + + x + NUMBER + + + 0 + + + + + y + NUMBER + + + 0 + + + + + + + + diff --git a/www/examples/serverOTA.xml b/www/examples/serverOTA.xml new file mode 100644 index 000000000..f7c7fa84c --- /dev/null +++ b/www/examples/serverOTA.xml @@ -0,0 +1,241 @@ + + toolbox_arduino_all-esp8266 + + + + TRUE + tu red + tu password + + + + + 80 + + + + + + + + + move + prueba + + + dir + + + + + EQ + + + dir + + + + + 10 + + + B + + + + + + + + + + + + + + EQ + + + dir + + + + + 10 + + + F + + + + + + + + + + + + + + EQ + + + dir + + + + + 10 + + + S + + + + + + + + + + + + + + + + + + + + + + + Hola soy oscar + + + + + saludo + + + Que igual ya no esta + + + + + + + + + + + prueba + + + 1 + + + + + 2 + dotted + #000000 + + + center + + + #FF0000 + + + #339999 + + + + + + + + + + + + + Prueba de Página con el servidor Asyn que lleva OTA + + + + + + + Forward + + + 0 + + + HIGH + + + + + 5 + + + 1023 + + + + + + + + + Backward + + + 0 + + + LOW + + + + + 5 + + + 1023 + + + + + + + + + stop + + + 0 + + + LOW + + + + + 5 + + + 0 + + + + + + + + \ No newline at end of file diff --git a/www/lang/Arduino_en.js b/www/lang/Arduino_en.js index 3ba450790..b8a75946f 100644 --- a/www/lang/Arduino_en.js +++ b/www/lang/Arduino_en.js @@ -178,7 +178,7 @@ Blockly.Msg.LKL_TOOLTIP_INOUT_DETACHINTERRUPT = "Disable the previously specifie Blockly.Msg.LKL_MODE = 'is detected on the Pin'; // FIELDDROPDOWN Blockly.Msg.note = [[ "C₄ | Do₄", "261"], [ "D₄ | Re₄", "293"], [ "E₄ | Mi₄", "329"], [ "F₄ | Fa₄", "349"], [ "G₄ | Sol₄", "392"], [ "A₄ | La₄", "440"], [ "B₄ | Si₄", "493"], [ "C₅ | Do₅", "523 "], ["D₅ | Re₅"," 587 "], ["E₅ | Mi₅"," 659 "], ["F₅ | Fa₅"," 698 "], ["G₅ | Sol₅"," 784 "], [ "A₅ | La₅", "880"]]; -Blockly.Msg.tempo = [["\u266B", "125"], ["\u266A", "250"], ["\u2669", "500"], ["𝅗𝅥", "1000"], ["𝅝", "2000"]]; // do not translate +Blockly.Msg.tempo = [["\u266B beamed notes", "125"], ["\u266A eight note", "250"], ["\u2669 quarter note", "500"], ["\uD834\uDD5E half note", "1000"], ["\uD834\uDD5D whole otte", "2000"]]; // do not translate Blockly.Msg.on_off = [["ON", "HIGH"], ["OFF", "LOW"]]; Blockly.Msg.menublink = [["slow", "1000"], ["fast", "100"]]; Blockly.Msg.AV_AR = [[Blockly.Msg.AV, "FORWARD"], [Blockly.Msg.AR, "BACKWARD"]]; // do not translate diff --git a/www/lang/Blockly_es.js.bak b/www/lang/Blockly_es.js.bak new file mode 100644 index 000000000..1b6237d96 --- /dev/null +++ b/www/lang/Blockly_es.js.bak @@ -0,0 +1,337 @@ +'use strict'; +goog.provide ( 'Blockly.Msg.fr'); +goog.require ( 'Blockly.Msg'); + +Blockly.Msg.INOUT_HIGH_LEVEL = "1(estado alto)"; +Blockly.Msg.INOUT_LOW_LEVEL = "0(estado bajo)"; +Blockly.Msg.ARD_TYPE_CHAR = "carácter"; +Blockly.Msg.ARD_TYPE_TEXT = "texto"; +Blockly.Msg.ARD_TYPE_BOOL = "binario"; +Blockly.Msg.ARD_TYPE_SHORT = "byte"; +Blockly.Msg.ARD_TYPE_NUMBER = "entero"; +Blockly.Msg.ARD_TYPE_UNUMBER = "unsigned integer"; +Blockly.Msg.ARD_TYPE_LONG = "entero largo"; +Blockly.Msg.ARD_TYPE_DECIMAL = "número de coma flotante"; +Blockly.Msg.ARD_TYPE_ARRAY = "cadena"; +Blockly.Msg.ARD_TYPE_NULL = "vacío"; +Blockly.Msg.ARD_TYPE_UNDEF = "no definido"; +Blockly.Msg.ARD_TYPE_VOLATILE = "entero volatil"; +Blockly.Msg.ARD_TYPE_CHILDBLOCKMISSING = "typing missing on a block"; +Blockly.Msg.ARDUINO_BETWEEN = "número aleatorio entre"; +Blockly.Msg.ARDUINO_BETWEEN_AND = "y"; +Blockly.Msg.ARDUINO_VAR_DECLARE="estados"; +Blockly.Msg.ARDUINO_VAR_AS = "cómo"; +Blockly.Msg.ARDUINO_VAR_VAL = "de valor"; +Blockly.Msg.base_def_const = "fijar"; +Blockly.Msg.base_define_const = "que es equivalente a"; +Blockly.Msg.base_define_const_tooltip = "permite al programador dar un nombre a cualquier valor"; +Blockly.Msg.type = "establecer un valor como el tipo seleccionado"; +Blockly.Msg.ADD_COMMENT = "Agregar comentario"; +Blockly.Msg.CHANGE_VALUE_TITLE = "Cambiar valor:"; +Blockly.Msg.CLEAN_UP = "Limpiar Bloques"; +Blockly.Msg.COLLAPSE_ALL = "Minimizar Bloques"; +Blockly.Msg.COLLAPSE_BLOCK = "Minimizar Bloque"; +Blockly.Msg.CONTROLS_SWITCH_VAR_TITLE = "Switch"; +Blockly.Msg.CONTROLS_SWITCH_MSG_DEFAULT = "por defecto"; +Blockly.Msg.CONTROLS_SWITCH_MSG_CASEBREAK = "es"; +Blockly.Msg.CONTROLS_SWITCH_MSG_SWITCHVAR = "si la variable es válida"; +Blockly.Msg.CONTROLS_SWITCH_MSG_DO = "hacer"; +Blockly.Msg.CONTROLS_SWITCH_TOOLTIP_1 = "Si un valor es verdadero, ejecute los siguientes comandos"; +Blockly.Msg.CONTROLS_SWITCH_TOOLTIP_2 = "Si un valor es verdadero, ejecute el primer bloque de comandos, de lo contrario, ejecute el siguiente bloque de comandos"; +Blockly.Msg.CONTROLS_SWITCH_TOOLTIP_3 = "Si un valor es verdadero, ejecute el primer bloque de comandos, de lo contrario, ejecute el siguiente bloque de comandos si la condición es verdadera"; +Blockly.Msg.CONTROLS_SWITCH_TOOLTIP_4 = "Si un valor es verdadero, ejecute el primer bloque de comandos, de lo contrario, ejecute el siguiente bloque de comandos si la condición es verdadera. Si no se cumple ninguna condición, cree el bloque de comandos predeterminado" ; +Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK = "salir del bucle"; +Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE = "pasar a la siguiente iteración"; +Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK = "Salir del bucle"; +Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE = "Omita el resto de este ciclo y continúe con la siguiente iteración"; +Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING = "Advertencia: este bloque debe usarse en un bucle"; +Blockly.Msg.CONTROLS_FOREACH_TITLE = "para cada elemento %1 en la lista %2"; +Blockly.Msg.CONTROLS_FOREACH_TOOLTIP = "Para cada elemento de una lista, asigne el valor del elemento a la variable %1, y luego ejecute las declaraciones"; +Blockly.Msg.CONTROLS_FOR_TITLE = "para %1 comprendido de %2 a %3 (<=)en pasos de %4"; +Blockly.Msg.CONTROLS_FOR_TITLE2 = "para %1 comprendido de %2 a %3 (>=)en pasos de - %4"; +Blockly.Msg.CONTROLS_FOR_TOOLTIP = "Establezca la variable %1 en valores desde el número inicial hasta el número final, incrementándolo en un paso específico, y ejecute las declaraciones especificadas"; +Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP = "Agregar Condición"; +Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP = "Agregar una condición final"; +Blockly.Msg.CONTROLS_IF_IF_TOOLTIP = "Agregar, borrar o reordenar"; +Blockly.Msg.CONTROLS_IF_MSG_ELSE = "otro"; +Blockly.Msg.CONTROLS_IF_MSG_ELSEIF = "si no"; +Blockly.Msg.CONTROLS_IF_MSG_IF = "si"; +Blockly.Msg.CONTROLS_IF_TOOLTIP_1 = "Si un valor es verdadero, entonces ejecute algunas órdenes"; +Blockly.Msg.CONTROLS_IF_TOOLTIP_2 = "Si un valor es verdadero, ejecute el primer bloque de órdenes, de lo contrario ejecute el segundo bloque de órdenes"; +Blockly.Msg.CONTROLS_IF_TOOLTIP_3 = "Si el primer valor es verdadero, ejecute el primer bloque de órdenes, de lo contrario, si el segundo valor es verdadero, ejecute el segundo bloque de órdenes"; +Blockly.Msg.CONTROLS_IF_TOOLTIP_4 = "Si el primer valor es verdadero, ejecute el primer bloque de órdenes, de lo contrario, si el segundo valor es verdadero, ejecute el segundo bloque de órdenes. Si ninguno de los valores ​​es verdadero, ejecute el último bloque de órdenes "; +Blockly.Msg.CONTROLS_REPEAT_INPUT_DO = "hacer"; +Blockly.Msg.CONTROLS_REPEAT_TITLE = "repetir %1 tiempo"; +Blockly.Msg.CONTROLS_REPEAT_TOOLTIP = "Ejecutar sentencias varias veces"; +Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL = "repetir arriba"; +Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE = "repetir siempre que"; +Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL = "Mientras un valor sea falso, ejecute las instrucciones"; +Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE = "Siempre que un valor sea verdadero, ejecute las instrucciones"; +Blockly.Msg.DELETE_ALL_BLOCKS = "¿Eliminar estos %1 bloques?"; +Blockly.Msg.DELETE_BLOCK = "Eliminar bloque"; +Blockly.Msg.DELETE_VARIABLE = "Eliminar variable %1"; +Blockly.Msg.DELETE_VARIABLE_CONFIRMATION = "¿Eliminar %1 usos de la variable%2?"; +Blockly.Msg.DELETE_X_BLOCKS = "Eliminar%1 bloques"; +Blockly.Msg.DISABLE_BLOCK = "Deshabilitar bloque"; +Blockly.Msg.DUPLICATE_BLOCK = "Duplicar"; +Blockly.Msg.ENABLE_BLOCK = "Activar Bloque"; +Blockly.Msg.EXPAND_ALL = "Maximizar bloques"; +Blockly.Msg.EXPAND_BLOCK = "Maximizar bloque"; +Blockly.Msg.EXTERNAL_INPUTS = "Entradas externasExternal Inputs"; +Blockly.Msg.HELP = "Ayuda"; +Blockly.Msg.INLINE_INPUTS = "Entradas en Línea"; +Blockly.Msg.LISTS_CREATE1 = "crear una lista"; +Blockly.Msg.LISTS_CREATE2 = "con"; +Blockly.Msg.LISTS_CREATE_TOOLTIP = "Crear una lista con el número deseado de elementos"; +Blockly.Msg.LISTS_append = 'agregar %1 al final de %2'; +Blockly.Msg.LISTS_append_TOOLTIP = 'agregar un elemento al final de la lista'; +Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD = "lista"; +Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP = "Agregar, Eliminar, o Reordenar"; +Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH = "crear una lista con"; +Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP = "Agregar un elemento"; +Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP = "devuelve una cadena o lista con cualquier número de elementos"; +Blockly.Msg.LISTS_GET = "el elemento"; +Blockly.Msg.LISTS_GET_INDEX_FROM_END = "# desde el final"; +Blockly.Msg.LISTS_GET_INDEX_FROM_START = "#"; // untranslated +Blockly.Msg.LISTS_GET_INDEX_GET = "Obtener"; +Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE = "obtener y eliminar"; +Blockly.Msg.LISTS_GET_INDEX_LAST = "útimo"; +Blockly.Msg.LISTS_GET_INDEX_RANDOM = "aleatorio"; +Blockly.Msg.LISTS_GET_INDEX_REMOVE = "eliminar"; +Blockly.Msg.LISTS_GET_INDEX_TAIL = ""; // untranslated +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST = "devuelve el primer elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM = "devuelve el elemento a la posición especificada en una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST = "devolver el último elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM = "devuelve un elemento aleatorio en una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST = "Elimina y devuelve el primer elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM = "Elimina y devuelve el elemento en la posición especificada en una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST = "Elimina y devuelve el último elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM = "Elimina y devuelve un elemento aleatorio en una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST = "Elimina el primer elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM = "Elimina el elemento en la posición especificada en una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST = "Elimina el último elemento de una lista"; +Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM = "Elimina un elemento aleatorio de una lista"; +Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END = "hasta # desde el final"; +Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START = "subir a #"; +Blockly.Msg.LISTS_GET_SUBLIST_END_LAST = "hasta el final"; +Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST = "obtener la sublista desde el principio"; +Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END = "obtener la sublista de # desde el final"; +Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START = "obtener la sublista de #"; +Blockly.Msg.LISTS_GET_SUBLIST_TAIL = ""; // untranslated +Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP = "Crea una copia de la parte especificada de una lista"; +Blockly.Msg.LISTS_INDEX_FROM_END_TOOLTIP = "%1 es el último elemento"; +Blockly.Msg.LISTS_INDEX_FROM_START_TOOLTIP = "%1 es el primer elemento"; +Blockly.Msg.LISTS_INDEX_OF_FIRST = "encuentra la primera instancia del elemento"; +Blockly.Msg.LISTS_INDEX_OF_LAST = "encuentra la última instancia del elemento"; +Blockly.Msg.LISTS_INDEX_OF_TOOLTIP = "devuelve el índice de la primera / última aparición del elemento en la lista, devuelve%1 si no se encuentra el elemento"; +Blockly.Msg.LISTS_INLIST = "en la lista"; +Blockly.Msg.LISTS_ISEMPTY_TITLE = "%1 está vacío"; +Blockly.Msg.LISTS_ISEMPTY_TOOLTIP = "devuelve verdadero si la lista está vacía"; +Blockly.Msg.LISTS_LENGTH_TITLE = "longitud de%1"; +Blockly.Msg.LISTS_LENGTH_TOOLTIP = "devuelve la longitud de una lista"; +Blockly.Msg.LISTS_REPEAT_TITLE = "crear una lista con el elemento%1 repetido%2 veces"; +Blockly.Msg.LISTS_REPEAT_TOOLTIP = "Crear una lista que consiste en el valor proporcionado repetido el número especificado de veces"; +Blockly.Msg.LISTS_SET_INDEX_INPUT_TO = "igual"; +Blockly.Msg.LISTS_of = "de"; +Blockly.Msg.LISTS_SET_INDEX_SET = "poner el elemento"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST = "Inserta el elemento al comienzo de una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM = "Inserta el elemento en la posición especificada en una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST = "Agregar elemento al final de una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM = "Inserta el elemento al azar en una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST = "Fijar el primer elemento de una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM = "Actualizar el elemento a la posición especificada en una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST = "Fijar el último elemento en una lista"; +Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM = "Fijar un elemento aleatorio en una lista"; +Blockly.Msg.LOGIC_BOOLEAN_FALSE = "falso"; +Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP = "devuelve un estado lógico 0 o 1"; +Blockly.Msg.LOGIC_BOOLEAN_TRUE = "verdadero"; +Blockly.Msg.compare = "devuelve verdadero si un valor está en un intervalo"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ = "devuelve verdadero si ambas entradas son iguales"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT = "devuelve verdadero si la primera entrada es mayor que la segunda"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE = "devuelve verdadero si la primera entrada es mayor o igual que la segunda"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT = "devuelve verdadero si la primera entrada es más pequeña que la segunda"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE = "devuelve verdadero si la primera entrada es más pequeña o igual a la segunda"; +Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ = "devuelve verdadero si las dos entradas son diferentes"; +Blockly.Msg.LOGIC_NEGATE_TITLE = "no %1"; +Blockly.Msg.LOGIC_NEGATE_TOOLTIP = "devuelve verdadero si la entrada es falsa, devuelve falso si la entrada es verdadera"; +Blockly.Msg.LOGIC_NULL = "null"; +Blockly.Msg.LOGIC_NULL_TOOLTIP = "devuelve null"; +Blockly.Msg.LOGIC_OPERATOR = [["y", "and"], ["o", "or"], ["o exclusivo", "xor"], ["cambio a la izquierda", "shiftL"], ["cambio a la izquierda", "shiftR"]]; +Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND = "devuelve verdadero si ambas entradas son verdaderas"; +Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR = "devuelve verdadero si al menos una de las entradas es verdadera"; +Blockly.Msg.LOGIC_OPERATION_TOOLTIP_xor = "devuelve verdadero si solo una de las entradas es verdadera"; +Blockly.Msg.LOGIC_OPERATION_TOOLTIP_shiftR = "cambio a la dereche \ n"; +Blockly.Msg.LOGIC_OPERATION_TOOLTIP_shiftL = "hace un cambio a la izquierda"; +Blockly.Msg.LOGIC_TERNARY_CONDITION = "prueba"; +Blockly.Msg.LOGIC_TERNARY_IF_FALSE = "si es falso"; +Blockly.Msg.LOGIC_TERNARY_IF_TRUE = "si es verdadero"; +Blockly.Msg.LOGIC_TERNARY_TOOLTIP = "Verifique la condición en 'prueba' Si es verdadero, devuelva el valor 'si es verdadero', de lo contrario devuelva el valor 'si es falso'"; +Blockly.Msg.MATH_ADDITION_SYMBOL = "+"; // untranslated +Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD = "devuelve la suma de los dos números"; +Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE = "devuelve el cociente de los dos números"; +Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS = "devuelve la diferencia de los dos números"; +Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY = "devuelve el producto de los dos números"; +Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER = "devuelve el primer número elevado a la potencia del segundo"; +Blockly.Msg.MATH_CHANGE_TITLE = "incremento variable %1 de %2"; +Blockly.Msg.MATH_CHANGE_TOOLTIP = "Agregar un número a la variable %1"; +Blockly.Msg.MATH_CONSTANT_TOOLTIP = "devuelve una de las constantes actuales: π (3.141 ...), e (2.718 ...), φ (1.618 ...), sqrt (2) (1.414 ...), sqrt (½) (0.707 ...), or ∞ (infinito) "; +Blockly.Msg.MATH_CONSTRAIN_TITLE = "forzar %1 entre %2 y %3"; +Blockly.Msg.MATH_CONSTRAIN_TOOLTIP = "Restringir un número entre los límites especificados (incluidos)"; +Blockly.Msg.MATH_DIVISION_SYMBOL = "÷"; // untranslated +Blockly.Msg.MATH_IS_DIVISIBLE_BY = "es divisible por"; +Blockly.Msg.MATH_IS_EVEN = "es par"; +Blockly.Msg.MATH_IS_NEGATIVE = "es negativo"; +Blockly.Msg.MATH_IS_ODD = "es impar"; +Blockly.Msg.MATH_IS_POSITIVE = "es positivo"; +Blockly.Msg.MATH_IS_PRIME = "es primo"; +Blockly.Msg.MATH_IS_TOOLTIP = "devuelve verdadero o falso si un número es par, impar, primo, entero, positivo, negativo o si es divisible por un número"; +Blockly.Msg.MATH_IS_WHOLE = "es entero"; +Blockly.Msg.MATH_MODULO_TITLE = "resto %1 ÷%2"; +Blockly.Msg.MATH_MODULO_TOOLTIP = "devuelve el resto de la división euclidiana de los dos números"; +Blockly.Msg.MATH_MULTIPLICATION_SYMBOL = "×"; // untranslated +Blockly.Msg.MATH_NUMBER_TOOLTIP = "Un número"; +Blockly.Msg.MATH_ONLIST_HELPURL = ""; // untranslated +Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE = "promedio de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_MAX = "máximo de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN = "media de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_MIN = "mínimo de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_MODE = "mayoría de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM = "elemento aleatorio de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV = "desviación estándar de la lista"; +Blockly.Msg.MATH_ONLIST_OPERATOR_SUM = "suma de la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE = "Devuelve los valores numéricos promedio (aritméticos) ​​en la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX = "devuelve el número más grande en la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN = "devuelve el número medio de la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN = "devuelve el número más pequeño de la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE = "devuelve una lista de los elementos más comunes en la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM = "devuelve un elemento en la lista aleatoria"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV = "devuelve la desviación estándar de la lista"; +Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM = "devuelve la suma de todos los números en la lista"; +Blockly.Msg.MATH_POWER_SYMBOL = "^"; // untranslated +Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM = "fracción aleatoria"; +Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP = "devuelve una fracción aleatoria entre 0.0 (inclusive) y 1.0 (excluido)"; +Blockly.Msg.MATH_RANDOM_INT_TITLE = "entero aleatorio%1 & %2"; +Blockly.Msg.MATH_RANDOM_INT_TOOLTIP = "devuelve un entero aleatorio entre los dos límites incluidos especificados"; +Blockly.Msg.MATH_ROUND_OPERATOR_ROUND = "redondear"; +Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN = "redondeo inferior"; +Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP = "redondeo superior"; +Blockly.Msg.MATH_ROUND_TOOLTIP = "Redondea un número arriba o abajo"; +Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE = "valor absoluto"; +Blockly.Msg.MATH_SINGLE_OP_ROOT = "raíz cuadrada"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS = "devuelve el valor absoluto de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP = "devuelve e a la potencia de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_LN = "devuelve el logaritmo natural de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10 = "devuelve el logaritmo de base 10 de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG = "devuelve el opuesto de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10 = "devuelve 10 a la potencia de un número"; +Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT = "devuelve la raíz cuadrada de un número"; +Blockly.Msg.MATH_SUBTRACTION_SYMBOL = "-"; // untranslated +Blockly.Msg.MATH_TRIG_ACOS = "acos"; // untranslated +Blockly.Msg.MATH_TRIG_ASIN = "asin"; // untranslated +Blockly.Msg.MATH_TRIG_ATAN = "atan"; // untranslated +Blockly.Msg.MATH_TRIG_COS = "cos"; // untranslated +Blockly.Msg.MATH_TRIG_SIN = "sin"; // untranslated +Blockly.Msg.MATH_TRIG_TAN = "tan"; // untranslated +Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS = "devuelve el arcocoseno de un número"; +Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN = "devuelve el arcoseno de un número"; +Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN = "devuelve el arcotangente de un número"; +Blockly.Msg.MATH_TRIG_TOOLTIP_COS = "devuelve el coseno de un ángulo en grados"; +Blockly.Msg.MATH_TRIG_TOOLTIP_SIN = "devuelve el seno de un ángulo en grados"; +Blockly.Msg.MATH_TRIG_TOOLTIP_TAN = "devuelve la tangente de un ángulo en grados"; +Blockly.Msg.NEW_VARIABLE = "Crear una variable"; +Blockly.Msg.NEW_VARIABLE_TITLE = "Nuevo nombre de la variable"; +Blockly.Msg.ORDINAL_NUMBER_SUFFIX = ""; // untranslated +Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "Ejecutar la función%1 definida por el usuario"; +Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "Ejecuta la función%1 definida por el usuario y usa su resultado"; +Blockly.Msg.PROCEDURES_CREATE_DO = "Crear %1"; +Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT = "Describe esta función"; +Blockly.Msg.PROCEDURES_DEFNORETURN_DO = ""; +Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "hacer"; +Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = ""; +Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP = "Crear un procedimiento o función sin devolución de datos"; +Blockly.Msg.PROCEDURES_DEFRETURN_RETURN = "volver"; +Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP = "Crear un procedimiento o función con un retorno de datos"; +Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING = "Advertencia: esta función tiene configuraciones duplicadas"; +Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF = "Resalta la definición de la función"; +Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP = "devuelve el valor especificado"; +Blockly.Msg.PROCEDURES_IFRETURN_WARNING = "Advertencia: este bloque debe usarse en una definición de procedimiento o función"; +Blockly.Msg.PROCEDURES_MUTATORARG_TYPE = "de tipo"; +Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP = "Agregar una entrada al procedimiento o función"; +Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE = "argumentos de entrada"; +Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP = "Agregar, eliminar o reorganizar"; +Blockly.Msg.REDO = "Rehacer"; +Blockly.Msg.REMOVE_COMMENT = "Eliminar un comentario"; +Blockly.Msg.RENAME_VARIABLE = "Cambiar el nombre de la variable '%1'"; +Blockly.Msg.RENAME_VARIABLE_TITLE = "Renombrar variables '%1'"; +//Array +Blockly.Msg.ARRAY_CREATE_EMPTY_TITLE = 'empty!'; +Blockly.Msg.tab_create = "Crear bloque 'elemento de la cadena %1'"; +Blockly.Msg.tab_create_fix = "Crear bloque 'pone un elemento de la cadena%1 a '"; +Blockly.Msg.ARRAY_CREATE_WITH = "compuesto de"; +Blockly.Msg.ARRAY_taille = "tamaño"; +Blockly.Msg.ARRAY_contenu = "que contiene"; +Blockly.Msg.ARRAY_CREATE_WITH_CONTAINER_TITLE_ADD = "lista o cadena"; +Blockly.Msg.ARRAY_CREATE_WITH_CONTAINER_TOOLTIP = "Agregar, Eliminar o Reordenar"; +Blockly.Msg.ARRAY_CREATE_WITH_INPUT_WITH = "elementos"; +Blockly.Msg.ARRAY_CREATE_WITH_ITEM_TITLE = "elemento"; +Blockly.Msg.ARRAY_CREATE_WITH_TOOLTIP = "Devuelve una lista con varios elementos"; +Blockly.Msg.ARRAY_GETINDEX_ITEM = "el elemento de la cadena"; +Blockly.Msg.ARRAY_GETINDEX_ITEM2 = "cadena"; +Blockly.Msg.ARRAY_GETINDEX_TOOLTIP1 = "devuelve el valor almacenado en la lista"; +Blockly.Msg.ARRAY_GETINDEX_TOOLTIP2 = "crear una matriz del tipo seleccionado"; +Blockly.Msg.ARRAY_GETINDEX_TOOLTIP3 = "fijar un elemento de la lista o cadena al valor indicado"; +Blockly.Msg.ARRAY_create = "seleccionar cadena"; +Blockly.Msg.ARRAY_fixe = "poner el elemento de la cadena"; +Blockly.Msg.ARRAY_dim = "tamaño de"; +Blockly.Msg.ARRAY_index = "índice"; +Blockly.Msg.ARRAY_append_tooltip = "agregar un elemento al final de la lista o cadena"; +Blockly.Msg.ARRAY_append_url = ""; +Blockly.Msg.size = "tamaño de cadena"; +Blockly.Msg.size_TOOLTIP = "devuelve el tamaño de la lista o cadena"; +//text +Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP = "Agregar un elemento"; +Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN = "texto"; +Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP = "Agregar, Eliminar o Reordenar"; +Blockly.Msg.TEXT_ISEMPTY_TITLE = "%1 está vacío"; +Blockly.Msg.TEXT_ISEMPTY_TOOLTIP = "devuelve verdadero si el texto proporcionado está vacío"; +Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH = "texto creado con"; +Blockly.Msg.TEXT_JOIN_TOOLTIP = "devuelve un texto que agrega cualquier número de elementos"; +Blockly.Msg.TEXT_LENGTH_TITLE = "longitud de %1"; +Blockly.Msg.TEXT_LENGTH_TOOLTIP = "devuelve el número de letras (incluidos los espacios) del texto introducido"; +Blockly.Msg.TEXT_PRINT_TITLE = "mostrar %1"; +Blockly.Msg.TEXT_PRINT_TOOLTIP = "Mostrar texto, número u otro valor especificado"; +Blockly.Msg.TEXT_TEXT_TOOLTIP = "Una letra, una palabra o una frase"; +Blockly.Msg.TODAY = "hoy"; +Blockly.Msg.UNDO = "Cancelar"; +Blockly.Msg.VARIABLES_AS = "tipo"; +Blockly.Msg.VARIABLES_DEFAULT_NAME = "var"; +Blockly.Msg.VARIABLES_GET_CREATE_SET = "Crear bloque 'establece variable %1 en '"; +Blockly.Msg.VARIABLES_GET_TOOLTIP = "devuelve el valor de esta variable"; +Blockly.Msg.VARIABLES_SET = "poner la variable"; +Blockly.Msg.VARIABLES_SET_CREATE_GET = "Crear bloque %1"; +Blockly.Msg.VARIABLES_SET_TOOLTIP = "Establecer la variable al valor especificado"; +Blockly.Msg.var_set_init = "establecer variable"; +Blockly.Msg.var_set_init_tooltip = "Declarar e inicializar la variable del tipo y valor especificado"; +Blockly.Msg.ARDUINO_VAR_CONST = "establecer constante"; +Blockly.Msg.ARDUINO_VAR_CONST_tooltip = "Declara una constante del tipo y valor especificado"; +Blockly.Msg.VARIABLE_ALREADY_EXISTS = "a existe una variable llamada %1"; +Blockly.Msg.PROCEDURES_DEFRETURN_TITLE = ""; +Blockly.Msg.CONTROLS_IF_IF_TITLE_IF = Blockly.Msg.CONTROLS_IF_MSG_IF; +Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO; +Blockly.Msg.CONTROLS_IF_MSG_THEN = "entonces"; +Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE; +Blockly.Msg.PROCEDURES_DEFRETURN_PROCEDURE = Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE; +Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST; +Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST; +Blockly.Msg.MATH_CHANGE_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME; +Blockly.Msg.PROCEDURES_DEFRETURN_DO = Blockly.Msg.PROCEDURES_DEFNORETURN_DO; +Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF = Blockly.Msg.CONTROLS_IF_MSG_ELSEIF; +Blockly.Msg.LISTS_GET_INDEX_HELPURL = Blockly.Msg.LISTS_INDEX_OF_HELPURL; +Blockly.Msg.CONTROLS_FOREACH_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO; +Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST; +Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO; +Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE = Blockly.Msg.VARIABLES_DEFAULT_NAME; +Blockly.Msg.TEXT_APPEND_VARIABLE = Blockly.Msg.VARIABLES_DEFAULT_NAME; +Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME; +Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST; +Blockly.Msg.PROCEDURES_DEFRETURN_COMMENT = Blockly.Msg.PROCEDURES_DEFNORETURN_COMMENT; diff --git a/www/media/esp8266.jpg b/www/media/esp8266.jpg index 2bccf6792..717304a93 100644 Binary files a/www/media/esp8266.jpg and b/www/media/esp8266.jpg differ