diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/diff_drive.txt b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/diff_drive.txt
index 43ab87a9f7..27d6f85cc0 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/diff_drive.txt
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/diff_drive.txt
@@ -3,4 +3,4 @@ Sensors:
Actors:
[UsedActor [DIFFERENTIALDRIVE, DIFFERENTIALDRIVE], UsedActor [NO PORT, ENCODERMOTOR], UsedActor [NO PORT, DIFFERENTIALDRIVE], UsedActor [_D, ENCODERMOTOR], UsedActor [_D, DIFFERENTIALDRIVE]]
Methods:
-[DIFFDRIVETURNDEGREES, DIFFERENTIALDRIVE, DIFFERENTIALDRIVECURVE, DIFFERENTIALDRIVEDISTANCE, MOTORSTART]
\ No newline at end of file
+[DIFFDRIVETURNDEGREES, DIFFERENTIALDRIVE, DIFFERENTIALDRIVECURVE, DIFFERENTIALDRIVEDISTANCE, MOTORSTART, SPEEDTOPWM]
\ No newline at end of file
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/motor.txt b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/motor.txt
index e6d88354b3..b736889498 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/motor.txt
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/motor.txt
@@ -3,4 +3,4 @@ Sensors:
Actors:
[UsedActor [M1, ENCODERMOTOR], UsedActor [M2, ENCODERMOTOR], UsedActor [ML, ENCODERMOTOR], UsedActor [MR, ENCODERMOTOR], UsedActor [S, SERVOMOTOR]]
Methods:
-[MOTORSTART, MOTORSTARTFOR]
\ No newline at end of file
+[MOTORSTART, MOTORSTARTFOR, SPEEDTOPWM]
\ No newline at end of file
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/omni_drive.txt b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/omni_drive.txt
index dec89c4116..0df60d45cf 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/omni_drive.txt
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/omni_drive.txt
@@ -3,4 +3,4 @@ Sensors:
Actors:
[UsedActor [OMNIDRIVE, OMNIDRIVE], UsedActor [_O, ENCODERMOTOR], UsedActor [_O, OMNIDRIVE], UsedActor [no port, ENCODERMOTOR], UsedActor [no port, OMNIDRIVE]]
Methods:
-[MOTORSTART, OMNIDRIVECURVE, OMNIDRIVECURVEDISTANCE, OMNIDRIVESTRAIGHTDISTANCE, OMNIDRIVETURNDEGREES]
\ No newline at end of file
+[MOTORSTART, OMNIDRIVECURVE, OMNIDRIVECURVEDISTANCE, OMNIDRIVESTRAIGHTDISTANCE, OMNIDRIVETURNDEGREES, SPEEDTOPWM]
\ No newline at end of file
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/sensor.txt b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/sensor.txt
index 4357bd5582..9ea386514d 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/sensor.txt
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/collectorResults/txt4/sensor.txt
@@ -3,4 +3,4 @@ Sensors:
Actors:
[UsedActor [DISPLAY, DISPLAY], UsedActor [M1, ENCODERMOTOR], UsedActor [M2, ENCODERMOTOR]]
Methods:
-[MOTORSTART]
\ No newline at end of file
+[MOTORSTART, SPEEDTOPWM]
\ No newline at end of file
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/diff_drive.py b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/diff_drive.py
index e3d52f95a6..6f216715d5 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/diff_drive.py
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/diff_drive.py
@@ -28,7 +28,7 @@ def diffdrive_turn_degrees(speed, degrees):
if degrees < 0:
speed = -speed
degrees = abs(degrees)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
arc_length = math.radians(degrees) * (TRACK_WIDTH / 2)
rotations = arc_length / (WHEEL_DIAMETER * math.pi)
steps_per_wheel = int(rotations * STEPS_PER_ROTATION)
@@ -43,7 +43,7 @@ def diffdrive_turn_degrees(speed, degrees):
left_motor.stop_sync(right_motor)
def diffdrive(speed):
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
left_motor.set_speed(speed, Motor.CCW)
right_motor.set_speed(speed, Motor.CCW)
left_motor.start_sync(right_motor)
@@ -71,9 +71,13 @@ def diffdrive_distance(distance, speed_l, speed_r):
time.sleep(0.010)
def motor_start(motor, speed):
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.start()
+def speed_to_pwm(speed):
+ speed = max(min(speed, 100), -100)
+ return int((speed / 100) * 512)
+
def run():
print("Driving Forwards")
diffdrive(30)
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/motor.py b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/motor.py
index 0d9369a7fb..183c9e8750 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/motor.py
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/motor.py
@@ -28,12 +28,12 @@
def motor_start(motor, speed):
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.start()
def motor_start_for(motor, speed, degrees):
steps = int((degrees / 360) * STEPS_PER_ROTATION)
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.set_distance(steps)
while True:
if not motor.is_running():
@@ -41,6 +41,10 @@ def motor_start_for(motor, speed, degrees):
time.sleep(0.010)
motor.stop()
+def speed_to_pwm(speed):
+ speed = max(min(speed, 100), -100)
+ return int((speed / 100) * 512)
+
def run():
print("Moving Motors")
print("M1 Motor for 2 seconds")
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/omni_drive.py b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/omni_drive.py
index 1f88d6c235..ac1f7667d3 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/omni_drive.py
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/omni_drive.py
@@ -34,7 +34,7 @@
def motor_start(motor, speed):
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.start()
def omnidrive_curve(speed_fl, speed_fr, speed_rl, speed_rr):
@@ -69,10 +69,10 @@ def omnidrive_straight_distance(distance, speed_fl, speed_fr, speed_rl, speed_rr
constant = WHEEL_DIAMETER / (2 * 4)
distance_per_wheel = distance / constant / 4
steps_per_wheel = int(distance_per_wheel / (2 * math.pi) * STEPS_PER_ROTATION)
- front_left_motor.set_speed(int((direction * speed_fl / 100) * 512), Motor.CCW)
- front_right_motor.set_speed(int((direction * speed_fr / 100) * 512), Motor.CCW)
- rear_left_motor.set_speed(int((direction * speed_rl / 100) * 512), Motor.CCW)
- rear_right_motor.set_speed(int((direction * speed_rr / 100) * 512), Motor.CCW)
+ front_left_motor.set_speed(speed_to_pwm(direction * speed_fl), Motor.CCW)
+ front_right_motor.set_speed(speed_to_pwm(direction * speed_fr), Motor.CCW)
+ rear_left_motor.set_speed(speed_to_pwm(direction * speed_rl), Motor.CCW)
+ rear_right_motor.set_speed(speed_to_pwm(direction * speed_rr), Motor.CCW)
front_left_motor.set_distance(steps_per_wheel, front_right_motor, rear_left_motor, rear_right_motor)
while True:
if (not front_left_motor.is_running()
@@ -87,7 +87,7 @@ def omnidrive_turn_degrees(speed, degrees):
if degrees < 0:
speed = -speed
degrees = abs(degrees)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
rotations = (WHEEL_DIAMETER * math.pi * degrees) / (360 * TRACK_WIDTH)
steps_per_wheel = int(rotations * STEPS_PER_ROTATION)
@@ -105,6 +105,10 @@ def omnidrive_turn_degrees(speed, degrees):
time.sleep(0.010)
front_left_motor.stop_sync(front_right_motor, rear_left_motor, rear_right_motor)
+def speed_to_pwm(speed):
+ speed = max(min(speed, 100), -100)
+ return int((speed / 100) * 512)
+
def run():
print("Driving Forwards")
omnidrive_curve(30, 30, 30, 30)
diff --git a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/sensor.py b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/sensor.py
index 2d5b405e14..b444d9d797 100644
--- a/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/sensor.py
+++ b/OpenRobertaServer/src/test/resources/crossCompilerTests/_expected/robotSpecific/targetLanguage/txt4/sensor.py
@@ -31,9 +31,13 @@
_timer5 = time.time()
def motor_start(motor, speed):
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.start()
+def speed_to_pwm(speed):
+ speed = max(min(speed, 100), -100)
+ return int((speed / 100) * 512)
+
def run():
global _timer1, _timer2, _timer3, _timer4, _timer5
while not(TXT_M_I3_ultrasonic_distance_meter):
diff --git a/OpenRobertaServer/staticResources/blockly/msg/js/es.js b/OpenRobertaServer/staticResources/blockly/msg/js/es.js
index ee4c08dae1..d9ed48b834 100644
--- a/OpenRobertaServer/staticResources/blockly/msg/js/es.js
+++ b/OpenRobertaServer/staticResources/blockly/msg/js/es.js
@@ -100,7 +100,7 @@ Blockly.Msg.ANALOGIN_TOOLTIP = "Representa cualquier actuador conectado a un pin
Blockly.Msg.ANALOGOUT_TOOLTIP = "Representa cualquier sensor conectado a un pin analógico.";
Blockly.Msg.AND = "y";
Blockly.Msg.ARDUBRICK_TOOLTIP = "Representa un tablero de Bot 'n Roll con actuadores y sensores conectados. También hay actuadores y sensores internos disponibles, como teclas, la pantalla, ...";
-Blockly.Msg.AREA = "area"; // untranslated
+Blockly.Msg.AREA = "área";
Blockly.Msg.AUTH = "Autoriza a esta aplicación para guardar tu trabajo y permitir que lo compartas.";
Blockly.Msg.BACKWARD = "hacia atrás";
Blockly.Msg.BACK_LEFT = "atrás izquierda";
@@ -171,7 +171,7 @@ Blockly.Msg.COLOUR_BLEND_RATIO = "proporción";
Blockly.Msg.COLOUR_BLEND_TITLE = "combinar";
Blockly.Msg.COLOUR_BLEND_TOOLTIP = "Combina dos colores con una proporción determinada (0,0–1,0).";
Blockly.Msg.COLOUR_COLOUR_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual de color del sensor.";
-Blockly.Msg.COLOUR_COMPARE_TOOLTIP = "Compares two colors based on their hue values while considering a specified tolerance range [0°-360°]."; // untranslated
+Blockly.Msg.COLOUR_COMPARE_TOOLTIP = "Compara dos colores basándose en sus valores de tono, considerando un rango de tolerancia especificado [0°-360°].";
Blockly.Msg.COLOUR_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de color.";
Blockly.Msg.COLOUR_HSV_RANGE = "Rango HSV";
Blockly.Msg.COLOUR_LIGHT_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual de brillo del sensor.";
@@ -371,17 +371,17 @@ Blockly.Msg.FRONT_RIGHT = "derecha delantera";
Blockly.Msg.FRONT_RIGHT_MIDDLE = "derecha delantera en medio";
Blockly.Msg.FSR_TOOLTIP = "Obtiene la lectura actual del resistor sensible a la fuerza debajo de los pies del robot.";
Blockly.Msg.GAIN = "ganancia";
-Blockly.Msg.GALLERY_ALL_ROBOTS = "All robots/systems"; // untranslated
+Blockly.Msg.GALLERY_ALL_ROBOTS = "Todos los robots/sistemas";
Blockly.Msg.GALLERY_BY = "por";
Blockly.Msg.GALLERY_DATE = "creado el";
Blockly.Msg.GALLERY_DISLIKE = "no me gusta";
Blockly.Msg.GALLERY_LIKE = "Me gusta";
-Blockly.Msg.GALLERY_NEWEST = "Newest first"; // untranslated
-Blockly.Msg.GALLERY_OLDEST = "Oldest first"; // untranslated
-Blockly.Msg.GALLERY_PROGRAM_NAME = "Program name alph."; // untranslated
-Blockly.Msg.GALLERY_ROBOT = "Robot/System alph."; // untranslated
+Blockly.Msg.GALLERY_NEWEST = "Más reciente primero";
+Blockly.Msg.GALLERY_OLDEST = "Más antiguo primero";
+Blockly.Msg.GALLERY_PROGRAM_NAME = "Nombre del programa alfabéticamente";
+Blockly.Msg.GALLERY_ROBOT = "Robot/Sistema alfabéticamente";
Blockly.Msg.GALLERY_SHARED_ALREADY = "Ya has subido este programa a la galería. Si deseas modificarlo, busca la copia en la galería y modifícala. También puedes eliminarlo de la galería al eliminar la copia de la galería.";
-Blockly.Msg.GALLERY_SORT_BY = "Order by"; // untranslated
+Blockly.Msg.GALLERY_SORT_BY = "Ordenar por";
Blockly.Msg.GEARED_MOTOR = "motor reductor";
Blockly.Msg.GET = "obtener";
Blockly.Msg.GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor seleccionado";
@@ -405,7 +405,7 @@ Blockly.Msg.HINT_USER_NAME = "Ingresa tu nombre real aquí si lo deseas. Esto es
Blockly.Msg.HINT_USER_PASSWORT = "12345 no es una contraseña segura. En lugar de eso, piensa en una combinación segura de números y letras que no olvidarás.";
Blockly.Msg.HINT_USER_PASSWORT_CONFIRM = "¿Lo entendiste? ¡Mejor asegúrate!";
Blockly.Msg.HTCOLOUR_TOOLTIP = "Representa un sensor de color HiTechnic NXT V2.";
-Blockly.Msg.HUE_TOLERANCE = "hue tolerance"; // untranslated
+Blockly.Msg.HUE_TOLERANCE = "tolerancia de tono";
Blockly.Msg.HUMIDITY_TOOLTIP = "Representa un sensor de humedad.";
Blockly.Msg.I2CBUS_TOOLTIP = "Representa un byte del espacio de direcciones I2C.";
Blockly.Msg.ICON_BLOCKING_TOOLTIP = "Bloqueo de bloque. Este bloque necesita tiempo para ejecutarse, por lo que otros deben esperar hasta que devuelva el control a la llamada de una funcion.";
@@ -523,7 +523,7 @@ Blockly.Msg.LED_PROXH_ON_TOOLTIP = "Enciende los LEDs inferiores del sensor con
Blockly.Msg.LED_PROXV = "enciende LED inferior del sensor";
Blockly.Msg.LED_PROXV_ON_TOOLTIP = "Enciende los varios LEDs inferiores del sensor de distancia con los valores de brillo proporcionados. Los valores en porcentaje van desde 0% (apagado) hasta 100% (brillo máximo).";
Blockly.Msg.LED_SET_BRIGHTNESS_TOOLTIP = "Ajusta el brillo de todos los LEDs [0-100]";
-Blockly.Msg.LED_SET_BRIGHTNESS_TOOLTIP_PERCENT = "Sets the brightness of the LED [0-100]"; // untranslated
+Blockly.Msg.LED_SET_BRIGHTNESS_TOOLTIP_PERCENT = "Establece el brillo del LED [0-100]";
Blockly.Msg.LED_SET_INTENSITY_TOOLTIP = "Fijarla intensidad de un grupo de LEDs.";
Blockly.Msg.LED_SOUND = "enciende LED del sensor de sonido";
Blockly.Msg.LED_SOUND_ON_TOOLTIP = "Enciende el LED del micrófono con los valores de brillo proporcionados. El valor en porcentaje varía desde 0% (apagado) hasta 100% (brillo máximo).";
@@ -879,14 +879,14 @@ Blockly.Msg.MIN_ANGLE = "Ángulo mínimo";
Blockly.Msg.MIN_PULSE_WIDTH = "Ancho de pulso mínimo";
Blockly.Msg.MODE = "modo";
Blockly.Msg.MODE_ACCELERATION = "accelerar";
-Blockly.Msg.MODE_ACCURACY = "accuracy"; // untranslated
+Blockly.Msg.MODE_ACCURACY = "precisión";
Blockly.Msg.MODE_ALTITUDE = "altitud";
Blockly.Msg.MODE_AMBIENTLIGHT = "luz ambiente";
Blockly.Msg.MODE_ANALOG = "análogo";
Blockly.Msg.MODE_ANGLE = "ángulo";
-Blockly.Msg.MODE_BALL = "ball information"; // untranslated
+Blockly.Msg.MODE_BALL = "información de la bola";
Blockly.Msg.MODE_CALIBRATION = "Valor de calibración";
-Blockly.Msg.MODE_CALIBRATIONNEED = "calibration needed"; // untranslated
+Blockly.Msg.MODE_CALIBRATIONNEED = "calibración necesaria";
Blockly.Msg.MODE_CAPACITIVE = "capacitivo";
Blockly.Msg.MODE_CLAP = "aplauso";
Blockly.Msg.MODE_CLOSE = "cerrar";
@@ -913,14 +913,14 @@ Blockly.Msg.MODE_LIGHT = "luz";
Blockly.Msg.MODE_LINE = "línea";
Blockly.Msg.MODE_LONGITUDE = "longitud";
Blockly.Msg.MODE_MAGNETICFIELD = "campo magnético";
-Blockly.Msg.MODE_MAGNETICFLUX = "magnetic flux"; // untranslated
+Blockly.Msg.MODE_MAGNETICFLUX = "flujo magnético";
Blockly.Msg.MODE_MODULATED = "modulado";
Blockly.Msg.MODE_MOISTURE = "condensación";
-Blockly.Msg.MODE_MOTION = "motion"; // untranslated
+Blockly.Msg.MODE_MOTION = "movimiento";
Blockly.Msg.MODE_NAMEALL = "nombres (lista)";
Blockly.Msg.MODE_NAMEONE = "nombre";
Blockly.Msg.MODE_NOT_SUPPORTED = "¡El modo seleccionado en este bloque no es compatible con este sistema!";
-Blockly.Msg.MODE_NUMBERLINES = "number of lines"; // untranslated
+Blockly.Msg.MODE_NUMBERLINES = "número de líneas";
Blockly.Msg.MODE_OBSTACLE = "obstáculo";
Blockly.Msg.MODE_OPEN = "abrir";
Blockly.Msg.MODE_OPENING = "luz";
@@ -930,7 +930,7 @@ Blockly.Msg.MODE_PM25 = "PM2.5";
Blockly.Msg.MODE_PRESENCE = "presencia";
Blockly.Msg.MODE_PRESSED = "presionado";
Blockly.Msg.MODE_PRESSURE = "presión";
-Blockly.Msg.MODE_PROXIMITY = "proximity"; // untranslated
+Blockly.Msg.MODE_PROXIMITY = "proximidad";
Blockly.Msg.MODE_PULSEHIGH = "tiempo de pulso ALTO";
Blockly.Msg.MODE_PULSELOW = "tiempo de pulso BAJO";
Blockly.Msg.MODE_RATE = "ratio";
@@ -939,7 +939,7 @@ Blockly.Msg.MODE_REFLEXION = "luz reflejada";
Blockly.Msg.MODE_RESISTIVE = "resistivo";
Blockly.Msg.MODE_RGB = "RGB";
Blockly.Msg.MODE_ROTATION = "rotación";
-Blockly.Msg.MODE_SENSIVITY = "sensitivity"; // untranslated
+Blockly.Msg.MODE_SENSIVITY = "sensibilidad";
Blockly.Msg.MODE_SENSOR1 = "Sensor de Luz1";
Blockly.Msg.MODE_SENSOR2 = "Sensor de Luz2";
Blockly.Msg.MODE_SPEED = "velocidad";
@@ -1004,8 +1004,8 @@ Blockly.Msg.MOTOR_OTHER = "otros consumidores de potencia";
Blockly.Msg.MOTOR_PAN = "movimiento horizontal";
Blockly.Msg.MOTOR_PORT = "puerto de motor";
Blockly.Msg.MOTOR_PORT_ARDUINO = "puerto del motor 28BYJ-48";
-Blockly.Msg.MOTOR_REAR_LEFT = "rear left"; // untranslated
-Blockly.Msg.MOTOR_REAR_RIGHT = "rear right"; // untranslated
+Blockly.Msg.MOTOR_REAR_LEFT = "motor trasero izquierdo";
+Blockly.Msg.MOTOR_REAR_RIGHT = "motor trasero derecho";
Blockly.Msg.MOTOR_REGULATION = "regulación";
Blockly.Msg.MOTOR_RIGHT = "derecho";
Blockly.Msg.MOTOR_ROTATION = "rotación";
@@ -1123,21 +1123,21 @@ Blockly.Msg.NEW_VARIABLE = "Variable nueva…";
Blockly.Msg.NEW_VARIABLE_TITLE = "Nombre de variable nueva:";
Blockly.Msg.NN_ACTIVATION = "activación";
Blockly.Msg.NN_BIAS = "sesgo/Bias";
-Blockly.Msg.NN_CHANGE_INPUT_NEURON_VALUE = "type input value for neuron"; // untranslated
+Blockly.Msg.NN_CHANGE_INPUT_NEURON_VALUE = "ingresar valor de entrada para la neurona";
Blockly.Msg.NN_CHANGE_NEURONNAME = "escribe un nuevo nombre de neurona";
Blockly.Msg.NN_CLICK_NODE = "selecciona un nodo haciendo clic y luego cambia";
Blockly.Msg.NN_CLICK_WEIGHT_BIAS = "cambia haciendo clic en peso o sesgo/ Bias";
-Blockly.Msg.NN_EXPLORE_CLICK_NODE = "select node by clicking"; // untranslated
-Blockly.Msg.NN_EXPLORE_FOCUS_OPTION = "show the weight/bias"; // untranslated
-Blockly.Msg.NN_EXPLORE_RESET_VALUES = "Reset neuron output values"; // untranslated
-Blockly.Msg.NN_EXPLORE_RUN_FULL = "Run forward propagation for the whole network"; // untranslated
-Blockly.Msg.NN_EXPLORE_RUN_LAYER = "Run forward propagation layer by layer"; // untranslated
-Blockly.Msg.NN_EXPLORE_RUN_NEURON = "Run forward propagation neuron by neuron"; // untranslated
-Blockly.Msg.NN_EXPLORE_SHOW_ALL = "show all"; // untranslated
-Blockly.Msg.NN_EXPLORE_SHOW_NEXT_NEURON = "next neuron"; // untranslated
+Blockly.Msg.NN_EXPLORE_CLICK_NODE = "seleccionar nodo haciendo clic";
+Blockly.Msg.NN_EXPLORE_FOCUS_OPTION = "mostrar el peso/sesgo";
+Blockly.Msg.NN_EXPLORE_RESET_VALUES = "Restablecer valores de salida de la neurona";
+Blockly.Msg.NN_EXPLORE_RUN_FULL = "Ejecutar propagación hacia adelante para toda la red";
+Blockly.Msg.NN_EXPLORE_RUN_LAYER = "Ejecutar propagación hacia adelante capa por capa";
+Blockly.Msg.NN_EXPLORE_RUN_NEURON = "Ejecutar propagación hacia adelante neurona por neurona";
+Blockly.Msg.NN_EXPLORE_SHOW_ALL = "mostrar todo";
+Blockly.Msg.NN_EXPLORE_SHOW_NEXT_NEURON = "siguiente neurona";
Blockly.Msg.NN_FOCUS_OPTION = "mostrar/cambiar el peso/sesgo/Bias";
-Blockly.Msg.NN_GENERATE_VALUES_FROM = "from"; // untranslated
-Blockly.Msg.NN_GENERATE_VALUES_TO = "to"; // untranslated
+Blockly.Msg.NN_GENERATE_VALUES_FROM = "de";
+Blockly.Msg.NN_GENERATE_VALUES_TO = "a";
Blockly.Msg.NN_GET_BIAS = "obtener sesgo/Bias";
Blockly.Msg.NN_GET_BIAS_TOOLTIP = "devuelve el valor del sesgo/Bias de una neurona.";
Blockly.Msg.NN_GET_OUTPUT_NEURON_VALUE = "obtener valor de neurona de salida";
@@ -1147,23 +1147,23 @@ Blockly.Msg.NN_GET_WEIGHT_TOOLTIP = "devuelve el valor del peso entre dos neuron
Blockly.Msg.NN_HIDDEN_LAYER = "capa oculta";
Blockly.Msg.NN_HIDDEN_LAYERS = "capas ocultas";
Blockly.Msg.NN_INPUT_NEURON = "neurona de entrada";
-Blockly.Msg.NN_INVALID_INPUT_NEURON_VALUE = "invalid input; please enter only numeric values"; // untranslated
+Blockly.Msg.NN_INVALID_INPUT_NEURON_VALUE = "entrada no válida; por favor ingrese solo valores numéricos";
Blockly.Msg.NN_INVALID_NEURONNAME = "nombre de neurona no válido";
Blockly.Msg.NN_INVALID_NEURONNAMES = "las neuronas no están conectadas";
-Blockly.Msg.NN_INVALID_TEST_TRAIN_DATA = "Invalid test/training data uploaded"; // untranslated
-Blockly.Msg.NN_LEARNING_RATE = "learning rate"; // untranslated
-Blockly.Msg.NN_LEARN_EPOCH = "Train the network for one epoch"; // untranslated
-Blockly.Msg.NN_LEARN_EPOCHS_TO_TRAIN = "epochs to train"; // untranslated
-Blockly.Msg.NN_LEARN_EPOCH_NUMBER = "Epoch #"; // untranslated
-Blockly.Msg.NN_LEARN_ITERATION_NUMBER = "test data line #"; // untranslated
-Blockly.Msg.NN_LEARN_ONE_LINE = "Train the network with one line of the training data"; // untranslated
-Blockly.Msg.NN_LEARN_RESET_VALUES = "Reset weights and biases to original values"; // untranslated
-Blockly.Msg.NN_LEARN_RUN = "Start/pause training for the network"; // untranslated
-Blockly.Msg.NN_LEARN_TRAINING_LOSS = "Training loss"; // untranslated
-Blockly.Msg.NN_LEARN_UPLOAD = "Upload test/training data file (semicolon separated data accepted)"; // untranslated
-Blockly.Msg.NN_LEARN_UPLOAD_POPUP = "Open a popup window and enter input-output test/training data"; // untranslated
+Blockly.Msg.NN_INVALID_TEST_TRAIN_DATA = "Datos de prueba/entrenamiento cargados no válidos";
+Blockly.Msg.NN_LEARNING_RATE = "tasa de aprendizaje";
+Blockly.Msg.NN_LEARN_EPOCH = "Entrenar la red para una época";
+Blockly.Msg.NN_LEARN_EPOCHS_TO_TRAIN = "épocas para entrenar";
+Blockly.Msg.NN_LEARN_EPOCH_NUMBER = "Época #";
+Blockly.Msg.NN_LEARN_ITERATION_NUMBER = "línea de datos de prueba #";
+Blockly.Msg.NN_LEARN_ONE_LINE = "Entrenar la red con una línea de los datos de entrenamiento";
+Blockly.Msg.NN_LEARN_RESET_VALUES = "Restablecer pesos y sesgos a los valores originales";
+Blockly.Msg.NN_LEARN_RUN = "Iniciar/pausar entrenamiento para la red";
+Blockly.Msg.NN_LEARN_TRAINING_LOSS = "Pérdida de entrenamiento";
+Blockly.Msg.NN_LEARN_UPLOAD = "Cargar archivo de datos de prueba/entrenamiento (se aceptan datos separados por punto y coma)";
+Blockly.Msg.NN_LEARN_UPLOAD_POPUP = "Abrir una ventana emergente e ingresar datos de prueba/entrenamiento de entrada-salida";
Blockly.Msg.NN_OUTPUT_NEURON = "neurona de salida";
-Blockly.Msg.NN_RANDOM_WEIGHTS_BIASES = "random vals"; // untranslated
+Blockly.Msg.NN_RANDOM_WEIGHTS_BIASES = "valores aleatorios";
Blockly.Msg.NN_REGULARIZATION = "regularización";
Blockly.Msg.NN_SET_BIAS = "establecer sesgo /bias";
Blockly.Msg.NN_SET_BIAS_TOOLTIP = "cambia el sesgo/bias de una neurona.";
@@ -1171,16 +1171,16 @@ Blockly.Msg.NN_SET_INPUT_NEURON_VALUE = "establecer valor neurona de entrada";
Blockly.Msg.NN_SET_INPUT_NEURON_VALUE_TOOLTIP = "establece el valor de una neurona de entrada para el próximo paso de la red neuronal.";
Blockly.Msg.NN_SET_WEIGHT = "establecer peso de";
Blockly.Msg.NN_SET_WEIGHT_TOOLTIP = "cambia el peso entre dos neuronas.";
-Blockly.Msg.NN_SHAPE = "shape"; // untranslated
+Blockly.Msg.NN_SHAPE = "forma";
Blockly.Msg.NN_SHOW_ALL = "mostrar todo, cambiar haciendo clic";
Blockly.Msg.NN_SHOW_MATH = "cálculo de neurona";
Blockly.Msg.NN_SHOW_PRECISION = "decimales";
Blockly.Msg.NN_STEP = "realizar un paso en NN";
Blockly.Msg.NN_STEP_TOOLTIP = "recupera valores de entrada, ejecuta un paso en una red neuronal, genera valores de las neuronas de salida";
Blockly.Msg.NN_TARGET = "a";
-Blockly.Msg.NN_TEST_TRAIN_DATA_UPLOAD_SUCCESS = "Uploaded $ test/training data statements"; // untranslated
-Blockly.Msg.NN_TITLE_TEST_DATA = "test data"; // untranslated
-Blockly.Msg.NN_TITLE_TRAINING_DATA = "training data"; // untranslated
+Blockly.Msg.NN_TEST_TRAIN_DATA_UPLOAD_SUCCESS = "Se han cargado $ declaraciones de datos de prueba/entrenamiento";
+Blockly.Msg.NN_TITLE_TEST_DATA = "datos de prueba";
+Blockly.Msg.NN_TITLE_TRAINING_DATA = "datos de entrenamiento";
Blockly.Msg.NN_USED_NEURONNAME = "nombre de neurona en uso";
Blockly.Msg.NN_WEIGHT = "peso";
Blockly.Msg.NO = "no";
@@ -1192,8 +1192,8 @@ Blockly.Msg.OLDER_THEN_14 = "Tengo 16 años o más!";
Blockly.Msg.OMNIDRIVE_TOOLTIP = "Representa un sistema de conducción omnidireccional.";
Blockly.Msg.ON = "encendido";
Blockly.Msg.OPTICAL_TOOLTIP = "Representa un sensor óptico también llamado sensor de luz reflejada.";
-Blockly.Msg.OPTION_FILE_DOWNLOAD = "Download your program as a file"; // untranslated
-Blockly.Msg.OPTION_WEBUSB = "Connect your micro:bit device to the computer
select it in the next popup and click »Connect«"; // untranslated
+Blockly.Msg.OPTION_FILE_DOWNLOAD = "Descargar tu programa como un archivo";
+Blockly.Msg.OPTION_WEBUSB = "Conecta tu dispositivo micro:bit a la computadora
selecciona en la próxima ventana emergente y haz clic en »Conectar«";
Blockly.Msg.ORA_ACCESS_RIGHT_CHANGED = "El derecho compartido para el usuario »$« se ha actualizado!";
Blockly.Msg.ORA_ACCESS_RIGHT_DELETED = "El derecho compartido para el usuario »$« se ha eliminado!";
Blockly.Msg.ORA_ACCOUNT_NOT_ACTIVATED_TO_SHARE = "No tienes permiso para compartir. ¡Activa tu cuenta!
Más información ...";
@@ -1475,7 +1475,7 @@ Blockly.Msg.PROGLIST_SHARE_WITH_GALLERY = "¿Realmente quieres compartir este pr
Blockly.Msg.PROGLIST_SHARE_WITH_GALLERY_TOOLTIP = "Haz click aquí para subir tu programa a la galería y así compartirlo con todos los usuarios.";
Blockly.Msg.PROGRAM_ERROR_EXPRBLOCK_PARSE = "Esta expresión es sintácticamente incorrecta.";
Blockly.Msg.PROGRAM_ERROR_EXPRBLOCK_TYPECHECK = "Esta expresión no es válida. La comprobación de tipo ha fallado.";
-Blockly.Msg.PROGRAM_IMPORT_ERROR_MISSING_ROBOT_TYPE = "You have tried to import a program that is suitable for »$«, a group of robots/systems.
Please first select the desired robot/system here on the start page."; // untranslated
+Blockly.Msg.PROGRAM_IMPORT_ERROR_MISSING_ROBOT_TYPE = "Has intentado importar un programa adecuado para »$«, un grupo de robots/sistemas.
Por favor, primero selecciona el robot/sistema deseado aquí en la página de inicio.";
Blockly.Msg.PULSEHIGH = "tiempo de pulso ALTO";
Blockly.Msg.PULSELOW = "tiempo de pulso BAJO";
Blockly.Msg.PULSETOOLTIP = "Representa un sensor de pulso.";
@@ -1532,26 +1532,26 @@ Blockly.Msg.SENSOR_ANALOGOUT = "sensor analógico";
Blockly.Msg.SENSOR_ANY = "cualquier lugar";
Blockly.Msg.SENSOR_APDS9960 = "APDS9960";
Blockly.Msg.SENSOR_ARM_TOOLTIP = "Devuelve verdadero si la parte seleccionada del brazo está tocada, de lo contrario, falso.";
-Blockly.Msg.SENSOR_BALLDETECTOR = "ball detector"; // untranslated
+Blockly.Msg.SENSOR_BALLDETECTOR = "detector de pelotas";
Blockly.Msg.SENSOR_BATTERY = "voltaje en mV";
Blockly.Msg.SENSOR_BOTTOM = "abajo";
Blockly.Msg.SENSOR_CALIBRATE = "calibrar";
Blockly.Msg.SENSOR_CAMERA = "cámera";
-Blockly.Msg.SENSOR_CAMERA_BALL_GETSAMPLE_TOOLTIP = "Returns a list [x, y, diameter] representing information about a ball matching the color set in the configuration. If no ball is found, returns a list of [-1, -1, -1]."; // untranslated
-Blockly.Msg.SENSOR_CAMERA_COLOUR_GETSAMPLE_TOOLTIP = "Returns the average color of the specified camera area (configuration)."; // untranslated
+Blockly.Msg.SENSOR_CAMERA_BALL_GETSAMPLE_TOOLTIP = "Devuelve una lista [x, y, diámetro] que representa información sobre una pelota que coincide con el color establecido en la configuración. Si no se encuentra ninguna pelota, devuelve una lista de [-1, -1, -1].";
+Blockly.Msg.SENSOR_CAMERA_COLOUR_GETSAMPLE_TOOLTIP = "Devuelve el color promedio del área de la cámara especificada (configuración).";
Blockly.Msg.SENSOR_CAMERA_GETSAMPLE_TOOLTIP = "Devuelve la posición x en píxeles del punto más a la izquierda de una línea o -1 si no se encontró ninguna línea.";
-Blockly.Msg.SENSOR_CAMERA_MOTION_GETSAMPLE_TOOLTIP = "Returns a boolean (true or false) indicating whether a specified amount of pixel change, as defined by the sensitivity in the configuration, has occurred."; // untranslated
-Blockly.Msg.SENSOR_CAMERA_NUMBERLINES_GETSAMPLE_TOOLTIP = "Returns the number of lines detected by the camera (up to 4)."; // untranslated
+Blockly.Msg.SENSOR_CAMERA_MOTION_GETSAMPLE_TOOLTIP = "Devuelve un booleano (verdadero o falso) que indica si ha ocurrido un cambio especificado de píxeles, según lo definido por la sensibilidad en la configuración.";
+Blockly.Msg.SENSOR_CAMERA_NUMBERLINES_GETSAMPLE_TOOLTIP = "Devuelve el número de líneas detectadas por la cámara (hasta 4).";
Blockly.Msg.SENSOR_CAMERA_THRESHOLD_TOOLTIP = "Establece el umbral para la filtración de color para el reconocimiento de marcadores y colores.";
Blockly.Msg.SENSOR_CODE = "teclado de códigos";
-Blockly.Msg.SENSOR_COLORDETECTOR = "colour detector"; // untranslated
+Blockly.Msg.SENSOR_COLORDETECTOR = "detector de color";
Blockly.Msg.SENSOR_COLOUR = "sensor de color";
Blockly.Msg.SENSOR_COLOURBLOB_TOOLTIP = "Devuelve información en una lista [x, y, tamaño] sobre el área más grande encontrada de un color en un rango HSV específico en píxeles.";
Blockly.Msg.SENSOR_COLOURTCS3472 = "sensor de color TCS3472";
Blockly.Msg.SENSOR_COLOUR_EDISON = "rastreador de línea";
Blockly.Msg.SENSOR_COMPASS = "sensor de brújula";
Blockly.Msg.SENSOR_COMPASS_EV3 = "sensor de brújula HT";
-Blockly.Msg.SENSOR_COUNTER = "counter"; // untranslated
+Blockly.Msg.SENSOR_COUNTER = "contador";
Blockly.Msg.SENSOR_DATA_READY = "¿listo?";
Blockly.Msg.SENSOR_DETECTFACE = "detector de rostros";
Blockly.Msg.SENSOR_DETECTFACE_GETSAMPLE_TOOLTIP = "Detecta un rostro previamente aprendido y guardado.";
@@ -1567,14 +1567,14 @@ Blockly.Msg.SENSOR_ELECTRICCURRENT = "sensor de corriente";
Blockly.Msg.SENSOR_ELECTRICCURRENT_GETSAMPLE_TOOLTIP = "Obtiene la corriente eléctrica de la placa del motor en la articulación seleccionada.";
Blockly.Msg.SENSOR_ENCODER = "encoder";
Blockly.Msg.SENSOR_ENVIRONMENTAL = "sensor ambiental";
-Blockly.Msg.SENSOR_ENVIRONMENTAL_CALIBRATION_TOOLTIP = "Calibrates the environmental sensor. This takes several minutes."; // untranslated
+Blockly.Msg.SENSOR_ENVIRONMENTAL_CALIBRATION_TOOLTIP = "Calibra el sensor ambiental. Esto lleva varios minutos.";
Blockly.Msg.SENSOR_ENVIRONMENTAL_GETSAMPLE_TOOLTIP = "Devuelve valores del sensor ambiental.";
Blockly.Msg.SENSOR_FLAME = "sensor de llamas";
Blockly.Msg.SENSOR_FSR = "resistor de detección de fuerza";
Blockly.Msg.SENSOR_FSR_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del resistor de detección de fuerza debajo de los pies del robot.";
Blockly.Msg.SENSOR_GESTURE = "gesto";
Blockly.Msg.SENSOR_GESTURE_ACTIVE = "¿activo?";
-Blockly.Msg.SENSOR_GESTURE_COLOUR_GETSAMPLE_TOOLTIP = "Gets the current reading from the colour reading of the sensor."; // untranslated
+Blockly.Msg.SENSOR_GESTURE_COLOUR_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de color.";
Blockly.Msg.SENSOR_GESTURE_DOWN = "boca abajo";
Blockly.Msg.SENSOR_GESTURE_DOWN_GETSAMPLE_TOOLTIP = "Devuelve »verdadero« si la postura está hacia abajo.";
Blockly.Msg.SENSOR_GESTURE_FACE_DOWN = "en el frente";
@@ -1583,12 +1583,12 @@ Blockly.Msg.SENSOR_GESTURE_FACE_UP = "en la parte trasera";
Blockly.Msg.SENSOR_GESTURE_FACE_UP_GETSAMPLE_TOOLTIP = "Devuelve »verdadero« si la postura está boca arriba.";
Blockly.Msg.SENSOR_GESTURE_FREEFALL = "cayendo libremente";
Blockly.Msg.SENSOR_GESTURE_FREEFALL_GETSAMPLE_TOOLTIP = "Devuelve »verdadero« si está cayendo libremente.";
-Blockly.Msg.SENSOR_GESTURE_GESTURE_GETSAMPLE_TOOLTIP = "Gets the current gesture reading of the sensor [1-6]."; // untranslated
-Blockly.Msg.SENSOR_GESTURE_PROXIMITY_GETSAMPLE_TOOLTIP = "Gets the current proxmity reading of the sensor in percent."; // untranslated
+Blockly.Msg.SENSOR_GESTURE_GESTURE_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del gesto del sensor [1-6].";
+Blockly.Msg.SENSOR_GESTURE_PROXIMITY_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual de proximidad del sensor en porcentaje.";
Blockly.Msg.SENSOR_GESTURE_SHAKE = "agitar";
Blockly.Msg.SENSOR_GESTURE_SHAKE_GETSAMPLE_TOOLTIP = "Devuelve »verdadero« si está agitándose.";
Blockly.Msg.SENSOR_GESTURE_TOOLTIP = "¿Está el sistema en el estado seleccionado?";
-Blockly.Msg.SENSOR_GESTURE_TXT4 = "RGB gesture sensor"; // untranslated
+Blockly.Msg.SENSOR_GESTURE_TXT4 = "Sensor de gestos RGB";
Blockly.Msg.SENSOR_GESTURE_UP = "erguido";
Blockly.Msg.SENSOR_GESTURE_UP_GETSAMPLE_TOOLTIP = "Devuelve »verdadero« si la postura está erguida.";
Blockly.Msg.SENSOR_GET = "obtener";
@@ -1613,10 +1613,10 @@ Blockly.Msg.SENSOR_HUMIDITY = "sensor humedad";
Blockly.Msg.SENSOR_HUMIDITY_ARDUINO = "sensor de humedad DHT11";
Blockly.Msg.SENSOR_HUMIDITY_GETSAMPLE_TOOLTIP = "Obtiene el valor actual del sensor de humedad";
Blockly.Msg.SENSOR_HUMIDITY_SENSEBOX = "sensor de humedad/temperatura HDC1080";
-Blockly.Msg.SENSOR_IMU = "Inertial measuring unit"; // untranslated
-Blockly.Msg.SENSOR_IMU_GETSAMPLE_TOOLTIP = "Gets the current reading from the inertial measurement unit (IMU)."; // untranslated
-Blockly.Msg.SENSOR_IMU_TOOLTIP = "Represents an Inertial Measurement Unit (IMU)"; // untranslated
-Blockly.Msg.SENSOR_IMU_TXT4 = "Combi-sensor"; // untranslated
+Blockly.Msg.SENSOR_IMU = "Unidad de medición inercial";
+Blockly.Msg.SENSOR_IMU_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual de la unidad de medición inercial (IMU).";
+Blockly.Msg.SENSOR_IMU_TOOLTIP = "Representa una Unidad de Medición Inercial (IMU)";
+Blockly.Msg.SENSOR_IMU_TXT4 = "Sensor combinado";
Blockly.Msg.SENSOR_INFRARED = "sensor de infrarrojos";
Blockly.Msg.SENSOR_INFRAREDLINE = "sensor de detección de línea";
Blockly.Msg.SENSOR_INFRAREDOBSTACLE = "sensor de detección de obstáculos";
@@ -1644,7 +1644,7 @@ Blockly.Msg.SENSOR_KEY_PLAY = "reproducir";
Blockly.Msg.SENSOR_KEY_REC = "grabar";
Blockly.Msg.SENSOR_KEY_RIGHT = "derecha";
Blockly.Msg.SENSOR_KEY_STOP = "detener";
-Blockly.Msg.SENSOR_KEY_TXT4 = "Mini-Switch"; // untranslated
+Blockly.Msg.SENSOR_KEY_TXT4 = "Mini interruptor";
Blockly.Msg.SENSOR_KEY_UP = "arriba";
Blockly.Msg.SENSOR_LIGHT = "sensor de luz";
Blockly.Msg.SENSOR_LIGHTVEML = "sensor de luz visible/UV";
@@ -1653,8 +1653,8 @@ Blockly.Msg.SENSOR_LIGHTVEML_UVLIGHT_GETSAMPLE_TOOLTIP = "Lee el valor actual de
Blockly.Msg.SENSOR_LIGHT_LIGHT_GETSAMPLE_TOOLTIP_EDISON = "Obtiene la lectura actual del sensor de luz";
Blockly.Msg.SENSOR_LIGHT_LINETRACKER = "sensor de seguimiento de línea";
Blockly.Msg.SENSOR_LINE = "sensor infrarrojo inferior";
-Blockly.Msg.SENSOR_LINE_COLOUR_TOOLTIP = "Returns the colour of at the specified index (0-3)."; // untranslated
-Blockly.Msg.SENSOR_LINE_INFORMATION_TOOLTIP = "Returns a list [position [-100;100], width] of the line at the specified index (0-3)."; // untranslated
+Blockly.Msg.SENSOR_LINE_COLOUR_TOOLTIP = "Devuelve el color en el índice especificado (0-3).";
+Blockly.Msg.SENSOR_LINE_INFORMATION_TOOLTIP = "Devuelve una lista [posición [-100;100], ancho] de la línea en el índice especificado (0-3).";
Blockly.Msg.SENSOR_LINE_JOYCAR = "sensor de línea";
Blockly.Msg.SENSOR_LOGOTOUCH = "sensor de logo";
Blockly.Msg.SENSOR_LOGOTOUCH_GETSAMPLE_TOOLTIP = "¿Está tocado el logo?";
@@ -1665,7 +1665,7 @@ Blockly.Msg.SENSOR_MARKERINF_TOOLTIP = "Devuelve los datos de posición como una
Blockly.Msg.SENSOR_MOISTURE = "sensor de humedad";
Blockly.Msg.SENSOR_MOISTURE_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de humedad en porcentaje.";
Blockly.Msg.SENSOR_MOTION = "sensor movimiento";
-Blockly.Msg.SENSOR_MOTIONDETECTOR = "motion detector"; // untranslated
+Blockly.Msg.SENSOR_MOTIONDETECTOR = "detector de movimiento";
Blockly.Msg.SENSOR_MOTION_ARDUINO = "sensor de movimiento HC-SR501";
Blockly.Msg.SENSOR_MOTION_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de movimiento (verdadero/falso).";
Blockly.Msg.SENSOR_MS_TIMER = "en ms";
@@ -1722,7 +1722,7 @@ Blockly.Msg.SENSOR_TIME = "tiempo de espera";
Blockly.Msg.SENSOR_TIMER = "temporizador";
Blockly.Msg.SENSOR_TOP = "superior";
Blockly.Msg.SENSOR_TOUCH = "sensor de contacto";
-Blockly.Msg.SENSOR_TOUCHKEY = "display button"; // untranslated
+Blockly.Msg.SENSOR_TOUCHKEY = "botón de pantalla";
Blockly.Msg.SENSOR_ULTRASONIC = "sensor de ultrasonidos";
Blockly.Msg.SENSOR_ULTRASONIC_ARDUINO = "sensor de ultrasonidos HC-SR04";
Blockly.Msg.SENSOR_ULTRASONIC_DISTANCE_GETSAMPLE_TOOLTIP_ARDUINO = "Obtiene la lectura actual del sensor ultrasónico en centímetros. La distancia máxima para medir es 400 cm.";
@@ -1807,57 +1807,57 @@ Blockly.Msg.SLOT_TILTED_NO = "no";
Blockly.Msg.SLOT_TILTED_UP = "arriba";
Blockly.Msg.SLOT_YAW = "viraje";
Blockly.Msg.SOCKET = "enchufe";
-Blockly.Msg.SOUND_AIRPLANE = "airplane"; // untranslated
-Blockly.Msg.SOUND_ALARM = "alarm"; // untranslated
+Blockly.Msg.SOUND_AIRPLANE = "avión";
+Blockly.Msg.SOUND_ALARM = "alarma";
Blockly.Msg.SOUND_ARROW = "flecha";
Blockly.Msg.SOUND_BADDY = "malo";
Blockly.Msg.SOUND_BA_DING = "ba_ding";
-Blockly.Msg.SOUND_BELL = "bell"; // untranslated
+Blockly.Msg.SOUND_BELL = "campana";
Blockly.Msg.SOUND_BIRTHDAY = "cumpleaños";
Blockly.Msg.SOUND_BLUES = "blues";
-Blockly.Msg.SOUND_BRAKING = "braking"; // untranslated
-Blockly.Msg.SOUND_CARHORN_LONG = "car horn long"; // untranslated
-Blockly.Msg.SOUND_CARHORN_SHORT = "car horn short"; // untranslated
+Blockly.Msg.SOUND_BRAKING = "frenado";
+Blockly.Msg.SOUND_CARHORN_LONG = "bocina de coche larga";
+Blockly.Msg.SOUND_CARHORN_SHORT = "bocina de coche corta";
Blockly.Msg.SOUND_CENTRAL = "central";
Blockly.Msg.SOUND_CHASE = "persecución";
Blockly.Msg.SOUND_COLLISION = "colisión";
-Blockly.Msg.SOUND_CRACKLING_WOOD = "crackling wood"; // untranslated
+Blockly.Msg.SOUND_CRACKLING_WOOD = "madera crepitante";
Blockly.Msg.SOUND_DADADADUM = "dadadadum";
Blockly.Msg.SOUND_ENTERTAINER = "animador";
-Blockly.Msg.SOUND_EXCAVATOR = "excavator"; // untranslated
-Blockly.Msg.SOUND_FANTASY = "fantasy"; // untranslated
-Blockly.Msg.SOUND_FARM = "farm"; // untranslated
-Blockly.Msg.SOUND_FIRE = "fire noises"; // untranslated
-Blockly.Msg.SOUND_FIRE_DEPARTMENT = "fire department"; // untranslated
-Blockly.Msg.SOUND_FORMULAONE = "Formula 1"; // untranslated
+Blockly.Msg.SOUND_EXCAVATOR = "excavadora";
+Blockly.Msg.SOUND_FANTASY = "fantasía";
+Blockly.Msg.SOUND_FARM = "granja";
+Blockly.Msg.SOUND_FIRE = "ruidos de fuego";
+Blockly.Msg.SOUND_FIRE_DEPARTMENT = "departamento de bomberos";
+Blockly.Msg.SOUND_FORMULAONE = "Fórmula 1";
Blockly.Msg.SOUND_FUNERAL = "funeral";
Blockly.Msg.SOUND_FUNK = "funk";
Blockly.Msg.SOUND_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de sonido en el rango de 0 a 100. 0 es silencio y 100 es ruido.";
Blockly.Msg.SOUND_GIGGLE = "risita";
Blockly.Msg.SOUND_HAPPY = "feliz";
-Blockly.Msg.SOUND_HELICOPTER = "helicopter"; // untranslated
+Blockly.Msg.SOUND_HELICOPTER = "helicóptero";
Blockly.Msg.SOUND_HELLO = "hola";
-Blockly.Msg.SOUND_HORN_SHIP = "ships horn"; // untranslated
-Blockly.Msg.SOUND_HYDRAULIC = "hydraulic"; // untranslated
+Blockly.Msg.SOUND_HORN_SHIP = "bocina de barco";
+Blockly.Msg.SOUND_HYDRAULIC = "hidráulico";
Blockly.Msg.SOUND_JUMP_DOWN = "salto hacia abajo";
Blockly.Msg.SOUND_JUMP_UP = "salto hacia arriba";
-Blockly.Msg.SOUND_MOTOR_STARTING = "motor starting"; // untranslated
+Blockly.Msg.SOUND_MOTOR_STARTING = "arranque del motor";
Blockly.Msg.SOUND_MYSTERIOUS = "misterioso";
Blockly.Msg.SOUND_NYAN = "nyan";
Blockly.Msg.SOUND_ODE = "ode";
Blockly.Msg.SOUND_POWER_DOWN = "apagado";
Blockly.Msg.SOUND_POWER_UP = "encendido";
Blockly.Msg.SOUND_PRELUDE = "preludio";
-Blockly.Msg.SOUND_PROPELLER = "propeller"; // untranslated
+Blockly.Msg.SOUND_PROPELLER = "hélice";
Blockly.Msg.SOUND_PUNCHLINE = "remate";
Blockly.Msg.SOUND_PYTHON = "python";
-Blockly.Msg.SOUND_RAISE_HEAD = "raise head"; // untranslated
+Blockly.Msg.SOUND_RAISE_HEAD = "levantar la cabeza";
Blockly.Msg.SOUND_RECORD_DURATION_TOOLTIP = "Obtener la duración del sonido grabado desde la tarjeta SD.";
Blockly.Msg.SOUND_RECORD_STOP_TOOLTIP = "Detener la grabación de sonidos en la tarjeta SD.";
Blockly.Msg.SOUND_RECORD_THYMIO_TOOLTIP = "Comienza a grabar sonidos en una tarjeta SD conectada a tu Thymio. La grabación se guarda como un archivo Rx.wav, donde >>x<< es el nombre de la grabación proporcionada. ¡Se requiere una tarjeta SD!";
Blockly.Msg.SOUND_RECORD_TOOLTIP = "Comenzar o detener la grabación de sonidos";
Blockly.Msg.SOUND_RINGTONE = "tono de llamada";
-Blockly.Msg.SOUND_ROLLER_COASTER = "roller coaster"; // untranslated
+Blockly.Msg.SOUND_ROLLER_COASTER = "montaña rusa";
Blockly.Msg.SOUND_SAD = "triste";
Blockly.Msg.SOUND_SCARY = "aterrador";
Blockly.Msg.SOUND_SHUTDOWN = "apagado";
@@ -1867,15 +1867,15 @@ Blockly.Msg.SOUND_SPRING = "primavera";
Blockly.Msg.SOUND_STARTUP = "inicio";
Blockly.Msg.SOUND_TARGET_DETECTED = "objetivo detectado";
Blockly.Msg.SOUND_TARGET_FRIENDLY = "objetivo amigable";
-Blockly.Msg.SOUND_TILT_HEAD = "tilt head"; // untranslated
+Blockly.Msg.SOUND_TILT_HEAD = "inclinación de la cabeza";
Blockly.Msg.SOUND_TOGGLE_TOOLTIP = "Enciende o apaga el altavoz.";
Blockly.Msg.SOUND_TOOLTIP = "Representa un sensor de sonido";
-Blockly.Msg.SOUND_TRACTOR = "tractor"; // untranslated
-Blockly.Msg.SOUND_TRUCK = "truck"; // untranslated
+Blockly.Msg.SOUND_TRACTOR = "tractor";
+Blockly.Msg.SOUND_TRUCK = "camión";
Blockly.Msg.SOUND_TWINKLE = "destello";
Blockly.Msg.SOUND_WAWAWAWAA = "wawawawaa";
Blockly.Msg.SOUND_WEDDING = "boda";
-Blockly.Msg.SOUND_WINK = "wink"; // untranslated
+Blockly.Msg.SOUND_WINK = "guiño";
Blockly.Msg.SOUND_YAWN = "bostezo";
Blockly.Msg.SOURCE_CODE_EDITOR_BUILD_TOOLTIP = "Compila el código fuente.";
Blockly.Msg.SOURCE_CODE_EDITOR_CLOSE_CONFIRMATION = "¡Se perderán todos tus cambios!";
@@ -1889,44 +1889,44 @@ Blockly.Msg.SSID = "SSID";
Blockly.Msg.START = "Inicio del programa";
Blockly.Msg.START_ACTIVITY = "actividad";
Blockly.Msg.START_ACTIVITY_TOOLTIP = "Inicia una actividad adicional";
-Blockly.Msg.START_ALL_ROBOTS = "All systems and filter options"; // untranslated
-Blockly.Msg.START_BOOKMARK_TOOLTIP = "Create a bookmark directly to your favourite robot/system."; // untranslated
-Blockly.Msg.START_CONNECT_HEADLINE = "Connect your robot"; // untranslated
-Blockly.Msg.START_CONNECT_TEXT = "You can directly connect your robot. The suitable NEPO program opens automatically."; // untranslated
-Blockly.Msg.START_FAQ = "Find answers to questions about the Open Roberta Lab that we have been asked so far or that we have already asked ourselves."; // untranslated
-Blockly.Msg.START_FAQ_HEADLINE = "Find answers to important questions"; // untranslated
-Blockly.Msg.START_FEATURES = "Features"; // untranslated
-Blockly.Msg.START_FIRST_HELP = "First time here? Find support and helpful information."; // untranslated
-Blockly.Msg.START_FOOTER_FRAUNHOFER = "Fraunhofer Institute for Intelligent Analysis and Information Systems IAIS"; // untranslated
-Blockly.Msg.START_FOOTER_INFORMATION = "Information"; // untranslated
-Blockly.Msg.START_FOOTER_RESSOURCES = "Resources"; // untranslated
-Blockly.Msg.START_FOOTER_ROBERTA_IAIS = "Part of the Roberta Initiative® of Fraunhofer IAIS"; // untranslated
-Blockly.Msg.START_FORMATSEARCH = "search robots/systems"; // untranslated
-Blockly.Msg.START_HEADLINE_PART_FOUR = "Boards"; // untranslated
-Blockly.Msg.START_HEADLINE_PART_ONE = "Program"; // untranslated
-Blockly.Msg.START_HEADLINE_PART_THREE = "Robots &"; // untranslated
-Blockly.Msg.START_HEADLINE_PART_TWO = "your"; // untranslated
-Blockly.Msg.START_IMPORT_HEADLINE = "Import your NEPO program"; // untranslated
-Blockly.Msg.START_IMPORT_TEXT = "Upload your XML file to our lab and continue where you left off."; // untranslated
-Blockly.Msg.START_LOGIN_HEADLINE = "Sign in"; // untranslated
-Blockly.Msg.START_LOGIN_TEXT = "Log in and have access to your saved programs and settings."; // untranslated
-Blockly.Msg.START_NN = "Neural networks"; // untranslated
-Blockly.Msg.START_OPTIONS = "More options"; // untranslated
-Blockly.Msg.START_POPULAR_ROBOTS = "Popular systems"; // untranslated
-Blockly.Msg.START_PROGLANG = "Programming languages"; // untranslated
+Blockly.Msg.START_ALL_ROBOTS = "Todos los sistemas y opciones de filtro";
+Blockly.Msg.START_BOOKMARK_TOOLTIP = "Crea un marcador directamente a tu robot/sistema favorito.";
+Blockly.Msg.START_CONNECT_HEADLINE = "Conecta tu robot";
+Blockly.Msg.START_CONNECT_TEXT = "Puedes conectar directamente tu robot. El programa NEPO adecuado se abrirá automáticamente.";
+Blockly.Msg.START_FAQ = "Encuentra respuestas a preguntas sobre el Laboratorio Open Roberta que nos han hecho hasta ahora o que ya nos hemos hecho a nosotros mismos.";
+Blockly.Msg.START_FAQ_HEADLINE = "Encuentra respuestas a preguntas importantes";
+Blockly.Msg.START_FEATURES = "Características";
+Blockly.Msg.START_FIRST_HELP = "¿Es la primera vez aquí? Encuentra soporte e información útil.";
+Blockly.Msg.START_FOOTER_FRAUNHOFER = "Instituto Fraunhofer para Sistemas de Análisis e Información Inteligente IAIS";
+Blockly.Msg.START_FOOTER_INFORMATION = "Información";
+Blockly.Msg.START_FOOTER_RESSOURCES = "Recursos";
+Blockly.Msg.START_FOOTER_ROBERTA_IAIS = "Parte de la Iniciativa Roberta® del Fraunhofer IAIS";
+Blockly.Msg.START_FORMATSEARCH = "buscar robots/sistemas";
+Blockly.Msg.START_HEADLINE_PART_FOUR = "Tableros";
+Blockly.Msg.START_HEADLINE_PART_ONE = "Programa";
+Blockly.Msg.START_HEADLINE_PART_THREE = "Robots &";
+Blockly.Msg.START_HEADLINE_PART_TWO = "tu";
+Blockly.Msg.START_IMPORT_HEADLINE = "Importa tu programa NEPO";
+Blockly.Msg.START_IMPORT_TEXT = "Carga tu archivo XML en nuestro laboratorio y continúa donde lo dejaste.";
+Blockly.Msg.START_LOGIN_HEADLINE = "Iniciar sesión";
+Blockly.Msg.START_LOGIN_TEXT = "Inicia sesión y accede a tus programas y configuraciones guardados.";
+Blockly.Msg.START_NN = "Redes neuronales";
+Blockly.Msg.START_OPTIONS = "Más opciones";
+Blockly.Msg.START_POPULAR_ROBOTS = "Sistemas populares";
+Blockly.Msg.START_PROGLANG = "Lenguajes de programación";
Blockly.Msg.START_PROGRAM = "Inicio del programa";
Blockly.Msg.START_PROGRAM_AUTOMOMOUSLIFE = "comportamiento autónomo";
Blockly.Msg.START_PROGRAM_DEBUG = "mostrar datos de sensor";
-Blockly.Msg.START_RESULTS = "results"; // untranslated
-Blockly.Msg.START_SIMULATION = "Simulation"; // untranslated
-Blockly.Msg.START_START = "get started"; // untranslated
-Blockly.Msg.START_STARTUP_TITLE = "Welcome to Open Roberta Lab"; // untranslated
-Blockly.Msg.START_TEASER = "Our open source platform »Open Roberta Lab« let you create your very own programs in no time at all using drag and drop."; // untranslated
+Blockly.Msg.START_RESULTS = "resultados";
+Blockly.Msg.START_SIMULATION = "Simulación";
+Blockly.Msg.START_START = "empezar";
+Blockly.Msg.START_STARTUP_TITLE = "Bienvenido a Open Roberta Lab";
+Blockly.Msg.START_TEASER = "Nuestra plataforma de código abierto »Open Roberta Lab« te permite crear tus propios programas en muy poco tiempo usando arrastrar y soltar.";
Blockly.Msg.START_TOOLTIP = "Punto de inicio del programa principal";
-Blockly.Msg.START_TOUR_HEADLINE = "Take an interactive tour"; // untranslated
-Blockly.Msg.START_WIKI_HEADLINE = "Take a look at our wiki"; // untranslated
-Blockly.Msg.START_YOUTUBE_HEADLINE = "Visit us on YouTube"; // untranslated
-Blockly.Msg.START_YOUTUBE_TEXT = "On our YouTube channel you will find tutorials, experiments and mini-clips about programming with Open Roberta and robotics in education."; // untranslated
+Blockly.Msg.START_TOUR_HEADLINE = "Realiza un recorrido interactivo";
+Blockly.Msg.START_WIKI_HEADLINE = "Consulta nuestro wiki";
+Blockly.Msg.START_YOUTUBE_HEADLINE = "Visítanos en YouTube";
+Blockly.Msg.START_YOUTUBE_TEXT = "En nuestro canal de YouTube encontrarás tutoriales, experimentos y mini clips sobre programación con Open Roberta y robótica en la educación.";
Blockly.Msg.STEPMOTOR_TOOLTIP = "Representa un motor paso a paso.";
Blockly.Msg.STEPS_PER_REVOLUTION = "pasos por revolución";
Blockly.Msg.STEP_MOTOR = "motor paso a paso";
@@ -1937,8 +1937,8 @@ Blockly.Msg.SWITCH = "interruptor";
Blockly.Msg.SWITCH_LED_MATRIX_TOOLTIP = "Activa/Desactiva la matriz LED para usar los pines de doble propósito.";
Blockly.Msg.TAB_CONFIGURATION = "Configuración del robot";
Blockly.Msg.TAB_NN = "red neuronal";
-Blockly.Msg.TAB_NN_DEFINE = " Define"; // untranslated
-Blockly.Msg.TAB_NN_LEARN = " Learn"; // untranslated
+Blockly.Msg.TAB_NN_DEFINE = "Definir";
+Blockly.Msg.TAB_NN_LEARN = "Aprender";
Blockly.Msg.TAB_PROGRAM = "Programa";
Blockly.Msg.TEMPERATURE_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del sensor de temperatura en °C.";
Blockly.Msg.TEMPERATURE_TOOLTIP = "Representa un sensor de temperatura.";
@@ -2014,8 +2014,8 @@ Blockly.Msg.TIMER_GETSAMPLE_TOOLTIP = "Obtiene la lectura actual del temporizado
Blockly.Msg.TIMER_RESET_TOOLTIP = "Reinicia el temporizador";
Blockly.Msg.TIMER_SET_TOOLTIP = "Establece el temporizador a un período definido en milisegundos.";
Blockly.Msg.TITLE = "título";
-Blockly.Msg.TITLE_GOAL = "Learning objective"; // untranslated
-Blockly.Msg.TITLE_PREVIOUS = "Previous knowledge"; // untranslated
+Blockly.Msg.TITLE_GOAL = "Objetivo de aprendizaje";
+Blockly.Msg.TITLE_PREVIOUS = "Conocimientos previos";
Blockly.Msg.TO = "a";
Blockly.Msg.TODAY = "Hoy";
Blockly.Msg.TOOLBOX_ACTION = "Acción";
@@ -2142,7 +2142,7 @@ Blockly.Msg.WAIT_TIME_TOOLTIP = "Espera un tiempo en milisegundos";
Blockly.Msg.WAIT_TOOLTIP = "espera hasta que la condición sea verdadera";
Blockly.Msg.WAIT_UNTIL = "esperar hasta";
Blockly.Msg.WEIGHT_KG = "peso en kg";
-Blockly.Msg.WHEEL_BASE = "wheel base"; // untranslated
+Blockly.Msg.WHEEL_BASE = "Base de ruedas";
Blockly.Msg.WIRELESS_TOOLTIP = "Representa una conexión inalámbrica.";
Blockly.Msg.WRITE_TO_PIN_TOOLTIP = "Manda el valor al pin elegido";
Blockly.Msg.X = "x";
diff --git a/OpenRobertaServer/staticResources/blockly/msg/json/en.json b/OpenRobertaServer/staticResources/blockly/msg/json/en.json
index 92dff56d98..b184fdb990 100644
--- a/OpenRobertaServer/staticResources/blockly/msg/json/en.json
+++ b/OpenRobertaServer/staticResources/blockly/msg/json/en.json
@@ -1,7 +1,7 @@
{
"@metadata": {
"author": "Ellen Spertus ",
- "lastupdated": "2024-05-10 01:56:32.254437",
+ "lastupdated": "2024-05-13 16:53:23.155520",
"locale": "en",
"messagedocumentation" : "qqq"
},
diff --git a/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4Methods.java b/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4Methods.java
index 7464e98033..00b026b4c9 100644
--- a/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4Methods.java
+++ b/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4Methods.java
@@ -22,5 +22,6 @@ public enum Txt4Methods {
LINEGETCOLOUR,
CLEARDISPLAY,
DIFFERENTIALDRIVECURVE,
- OMNIDRIVECURVE
+ OMNIDRIVECURVE,
+ SPEEDTOPWM
}
diff --git a/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4ValidatorAndCollectorVisitor.java b/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4ValidatorAndCollectorVisitor.java
index 8b720bc9da..2ca0ef1be8 100644
--- a/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4ValidatorAndCollectorVisitor.java
+++ b/RobotFischertechnik/src/main/java/de/fhg/iais/roberta/visitor/Txt4ValidatorAndCollectorVisitor.java
@@ -85,6 +85,7 @@ public Void visitMotorOnAction(MotorOnAction motorOnAction) {
usedHardwareBuilder.addUsedActor(new UsedActor(motor.getOptProperty("PORT"), motor.componentType));
}
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTART);
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
return null;
}
@@ -96,6 +97,7 @@ public Void visitMotorOnForAction(MotorOnForAction motorOnForAction) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOnForAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedHardwareBuilder.addUsedSensor(new UsedSensor(motorOnForAction.getUserDefinedPort(), SC.ENCODER, FischertechnikConstants.ENCODERMOTOR));
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTARTFOR);
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
return null;
}
@@ -113,6 +115,8 @@ public Void visitMotorStopAction(MotorStopAction motorStopAction) {
public Void visitMotorOmniDiffOnAction(MotorOmniDiffOnAction motorOmniDiffOnAction) {
requiredComponentVisited(motorOmniDiffOnAction, motorOmniDiffOnAction.power);
checkDiffOrOmniDrive(motorOmniDiffOnAction);
+
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffOnAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffOnAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
@@ -133,6 +137,7 @@ public Void visitMotorOmniDiffOnForAction(MotorOmniDiffOnForAction motorOmniDiff
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffOnForAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedHardwareBuilder.addUsedSensor(new UsedSensor(motorOmniDiffOnForAction.getUserDefinedPort(), SC.ENCODER, FischertechnikConstants.ENCODERMOTOR));
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTART);
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffOnForAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
addOmnidriveDistanceMethods(motorOmniDiffOnForAction.direction);
@@ -151,7 +156,7 @@ public Void visitMotorOmniDiffCurveAction(MotorOmniDiffCurveAction motorOmniDiff
checkDiffOrOmniDrive(motorOmniDiffCurveAction);
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffCurveAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTART);
-
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffCurveAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
usedMethodBuilder.addUsedMethod(Txt4Methods.OMNIDRIVECURVE);
@@ -169,6 +174,7 @@ public Void visitMotorOmniDiffCurveForAction(MotorOmniDiffCurveForAction motorOm
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffCurveForAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedHardwareBuilder.addUsedSensor(new UsedSensor(motorOmniDiffCurveForAction.getUserDefinedPort(), SC.ENCODER, FischertechnikConstants.ENCODERMOTOR));
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTART);
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffCurveForAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
usedMethodBuilder.addUsedMethod(Txt4Methods.OMNIDRIVECURVE);
@@ -208,6 +214,7 @@ public Void visitMotorOmniDiffTurnAction(MotorOmniDiffTurnAction motorOmniDiffTu
checkDiffOrOmniDrive(motorOmniDiffTurnAction);
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffTurnAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedMethodBuilder.addUsedMethod(Txt4Methods.MOTORSTART);
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffTurnAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
@@ -225,6 +232,7 @@ public Void visitMotorOmniDiffTurnForAction(MotorOmniDiffTurnForAction motorOmni
checkDiffOrOmniDrive(motorOmniDiffTurnForAction);
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffTurnForAction.getUserDefinedPort(), FischertechnikConstants.ENCODERMOTOR));
usedHardwareBuilder.addUsedSensor(new UsedSensor(motorOmniDiffTurnForAction.getUserDefinedPort(), SC.ENCODER, FischertechnikConstants.ENCODERMOTOR));
+ usedMethodBuilder.addUsedMethod(Txt4Methods.SPEEDTOPWM);
if ( configHasOmnidrive() ) {
usedHardwareBuilder.addUsedActor(new UsedActor(motorOmniDiffTurnForAction.getUserDefinedPort(), FischertechnikConstants.OMNIDRIVE));
usedMethodBuilder.addUsedMethod(Txt4Methods.OMNIDRIVETURNDEGREES);
diff --git a/RobotFischertechnik/src/main/resources/txt4.methods.yml b/RobotFischertechnik/src/main/resources/txt4.methods.yml
index 1c5467ecb9..0c1736196a 100644
--- a/RobotFischertechnik/src/main/resources/txt4.methods.yml
+++ b/RobotFischertechnik/src/main/resources/txt4.methods.yml
@@ -2,17 +2,23 @@ include: "classpath:/common.methods.yml"
## FunctionNames
+SPEEDTOPWM:
+ PYTHON: |
+ def speed_to_pwm(speed):
+ speed = max(min(speed, 100), -100)
+ return int((speed / 100) * 512)
+
MOTORSTART:
PYTHON: |
def motor_start(motor, speed):
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.start()
MOTORSTARTFOR:
PYTHON: |
def motor_start_for(motor, speed, degrees):
steps = int((degrees / 360) * STEPS_PER_ROTATION)
- motor.set_speed(int((speed / 100) * 512), Motor.CCW)
+ motor.set_speed(speed_to_pwm(speed), Motor.CCW)
motor.set_distance(steps)
while True:
if not motor.is_running():
@@ -23,7 +29,7 @@ MOTORSTARTFOR:
DIFFERENTIALDRIVE:
PYTHON: |
def diffdrive(speed):
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
left_motor.set_speed(speed, Motor.CCW)
right_motor.set_speed(speed, Motor.CCW)
left_motor.start_sync(right_motor)
@@ -92,10 +98,10 @@ OMNIDRIVESTRAIGHTDISTANCE:
constant = WHEEL_DIAMETER / (2 * 4)
distance_per_wheel = distance / constant / 4
steps_per_wheel = int(distance_per_wheel / (2 * math.pi) * STEPS_PER_ROTATION)
- front_left_motor.set_speed(int((direction * speed_fl / 100) * 512), Motor.CCW)
- front_right_motor.set_speed(int((direction * speed_fr / 100) * 512), Motor.CCW)
- rear_left_motor.set_speed(int((direction * speed_rl / 100) * 512), Motor.CCW)
- rear_right_motor.set_speed(int((direction * speed_rr / 100) * 512), Motor.CCW)
+ front_left_motor.set_speed(speed_to_pwm(direction * speed_fl), Motor.CCW)
+ front_right_motor.set_speed(speed_to_pwm(direction * speed_fr), Motor.CCW)
+ rear_left_motor.set_speed(speed_to_pwm(direction * speed_rl), Motor.CCW)
+ rear_right_motor.set_speed(speed_to_pwm(direction * speed_rr), Motor.CCW)
front_left_motor.set_distance(steps_per_wheel, front_right_motor, rear_left_motor, rear_right_motor)
while True:
if (not front_left_motor.is_running()
@@ -112,7 +118,7 @@ OMNIDRIVEDIAGONALTLDISTANCE:
if distance < 0:
speed = -speed
distance = abs(distance)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
constant = WHEEL_DIAMETER / (2 * 4)
distance_per_wheel = math.sqrt(1 / 2 * math.pow(distance, 2)) / constant / 4
steps_per_wheel = int(distance_per_wheel / (2 * math.pi) * STEPS_PER_ROTATION) * 2
@@ -133,7 +139,7 @@ OMNIDRIVEDIAGONALTRDISTANCE:
if distance < 0:
speed = -speed
distance = abs(distance)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
constant = WHEEL_DIAMETER / (2 * 4)
distance_per_wheel = math.sqrt(1 / 2 * math.pow(distance, 2)) / constant / 4
steps_per_wheel = int(distance_per_wheel / (2 * math.pi) * STEPS_PER_ROTATION) * 2
@@ -154,7 +160,7 @@ OMNIDRIVETURNDEGREES:
if degrees < 0:
speed = -speed
degrees = abs(degrees)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
rotations = (WHEEL_DIAMETER * math.pi * degrees) / (360 * TRACK_WIDTH)
steps_per_wheel = int(rotations * STEPS_PER_ROTATION)
@@ -178,7 +184,7 @@ DIFFDRIVETURNDEGREES:
if degrees < 0:
speed = -speed
degrees = abs(degrees)
- speed = int((speed / 100) * 512)
+ speed = speed_to_pwm(speed)
arc_length = math.radians(degrees) * (TRACK_WIDTH / 2)
rotations = arc_length / (WHEEL_DIAMETER * math.pi)
steps_per_wheel = int(rotations * STEPS_PER_ROTATION)