@mixly/arduino-avr
Version:
适用于mixly的arduino avr模块
733 lines (674 loc) • 38.5 kB
JavaScript
import { JSFuncs } from 'mixly';
import { Variables } from 'blockly/core';
export const servo_move = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '0';
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.write(' + value_degree + ');\n' + 'delay(' + delay_time + ');\n';
return code;
};
export const servo_writeMicroseconds = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.writeMicroseconds(' + value_degree + ');\n';
return code;
};
export const servo_read_degrees = function (_, generator) {
var dropdown_pin = this.getFieldValue('PIN');
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.read()';
return [code, generator.ORDER_ATOMIC];
};
export const servo_move1 = function (_, generator) {
var mode = this.getFieldValue('mode');
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
var delay_time = generator.valueToCode(this, 'DELAY_TIME', generator.ORDER_ATOMIC) || '0'
if (mode == 0) {
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
}
if (mode == 1) {
generator.definitions_['include_Servo'] = '#include <Timer2ServoPwm.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Timer2Servo servo_' + dropdown_pin + ';';
}
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.write(' + value_degree + ');\n' + 'delay(' + delay_time + ');\n';
return code;
};
export const servo_writeMicroseconds1 = function (_, generator) {
var mode = this.getFieldValue('mode');
var dropdown_pin = this.getFieldValue('PIN');
var value_degree = generator.valueToCode(this, 'DEGREE', generator.ORDER_ATOMIC);
if (mode == 0) {
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
}
if (mode == 1) {
generator.definitions_['include_Servo'] = '#include <Timer2ServoPwm.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Timer2Servo servo_' + dropdown_pin + ';';
}
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.writeMicroseconds(' + value_degree + ');\n';
return code;
};
export const servo_read_degrees1 = function (_, generator) {
var mode = this.getFieldValue('mode');
var dropdown_pin = this.getFieldValue('PIN');
if (mode == 0) {
generator.definitions_['include_Servo'] = '#include <Servo.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Servo servo_' + dropdown_pin + ';';
}
if (mode == 1) {
generator.definitions_['include_Servo'] = '#include <Timer2ServoPwm.h>';
generator.definitions_['var_declare_servo' + dropdown_pin] = 'Timer2Servo servo_' + dropdown_pin + ';';
}
generator.setups_['setup_servo_' + dropdown_pin] = 'servo_' + dropdown_pin + '.attach(' + dropdown_pin + ');';
var code = 'servo_' + dropdown_pin + '.read()';
return [code, generator.ORDER_ATOMIC];
};
export const tone_notes = function (_, generator) {
var code = this.getFieldValue('STAT');
return [code, generator.ORDER_ATOMIC];
};
export const controls_tone = function (_, generator) {
/*var xmlDom = Blockly.Xml.workspaceToDom(Mixly.Editor.blockEditor);
var xmlText = Blockly.Xml.domToPrettyText(xmlDom);
if (xmlText.indexOf("type=\"ir_recv\"") == -1 && xmlText.indexOf("type=\"ir_recv_enable\"") == -1 && xmlText.indexOf("type=\"ir_recv_raw\"") == -1) {
this.setWarningText(null);
}
else {
this.setWarningText(Blockly.Msg.IR_AND_TONE_WARNING);
}*/
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var fre = generator.valueToCode(this, 'FREQUENCY',
generator.ORDER_ASSIGNMENT) || '0';
var code = "";
if (window.isNaN(dropdown_pin)) {
code = code + 'pinMode(' + dropdown_pin + ', OUTPUT);\n';
} else {
generator.setups_['setup_output_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
}
code += "tone(" + dropdown_pin + "," + fre + ");\n";
return code;
};
export const controls_notone = function (_, generator) {
/*var xmlDom = Blockly.Xml.workspaceToDom(Mixly.Editor.blockEditor);
var xmlText = Blockly.Xml.domToPrettyText(xmlDom);
if (xmlText.indexOf("type=\"ir_recv\"") == -1 && xmlText.indexOf("type=\"ir_recv_enable\"") == -1 && xmlText.indexOf("type=\"ir_recv_raw\"") == -1) {
this.setWarningText(null);
}
else {
this.setWarningText(Blockly.Msg.IR_AND_TONE_WARNING);
}*/
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = '';
if (window.isNaN(dropdown_pin)) {
code = code + 'pinMode(' + dropdown_pin + ', OUTPUT);\n';
} else {
generator.setups_['setup_output_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
}
code += "noTone(" + dropdown_pin + ");\n";
return code;
};
// 执行器-蜂鸣器
export const controls_tone_noTimer = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var fre = generator.valueToCode(this, 'FREQUENCY', generator.ORDER_ASSIGNMENT) || '0';
var dur = generator.valueToCode(this, 'DURATION', generator.ORDER_ASSIGNMENT) || '0';
generator.definitions_['include_NewTone'] = '#include <NewTone.h>';
generator.setups_['setup_output_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
var code = "NewTone(" + dropdown_pin + "," + fre + "," + dur + ");\n";
return code;
};
// 执行器-蜂鸣器结束声音
export const controls_notone_noTimer = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
generator.setups_['setup_output_' + dropdown_pin] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
var code = "NewNoTone(" + dropdown_pin + ");\n";
return code;
};
export const group_stepper_setup = function (_, generator) {
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Variables.NAME_TYPE);
var dropdown_pin1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var dropdown_pin2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
var steps = generator.valueToCode(this, 'steps', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
generator.definitions_['include_Stepper'] = '#include <Stepper.h>';
generator.definitions_['var_declare_stepper' + varName] = 'Stepper ' + varName + '(' + steps + ', ' + dropdown_pin1 + ', ' + dropdown_pin2 + ');';
generator.setups_['setup_stepper' + varName] = varName + '.setSpeed(' + speed + ');';
return '';
};
export const group_stepper_setup2 = function (_, generator) {
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Variables.NAME_TYPE);
var dropdown_pin1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var dropdown_pin2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
var dropdown_pin3 = generator.valueToCode(this, 'PIN3', generator.ORDER_ATOMIC);
var dropdown_pin4 = generator.valueToCode(this, 'PIN4', generator.ORDER_ATOMIC);
var steps = generator.valueToCode(this, 'steps', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
generator.definitions_['include_Stepper'] = '#include <Stepper.h>';
generator.definitions_['var_declare_stepper' + varName] = 'Stepper ' + varName + '(' + steps + ', ' + dropdown_pin1 + ', ' + dropdown_pin2 + ', ' + dropdown_pin3 + ', ' + dropdown_pin4 + ');';
generator.setups_['setup_stepper' + varName] = varName + '.setSpeed(' + speed + ');';
return '';
};
export const group_stepper_move = function (_, generator) {
var varName = generator.variableDB_.getName(this.getFieldValue('VAR'), Variables.NAME_TYPE);
var step = generator.valueToCode(this, 'step', generator.ORDER_ATOMIC);
generator.definitions_['include_Stepper'] = '#include <Stepper.h>';
return varName + '.step(' + step + ');\n';
};
export const RGB_color_seclet = function (_, generator) {
var colour = this.getFieldValue('COLOR');
colour = '0x' + colour.substring(1, colour.length);
return [colour, generator.ORDER_NONE];
};
export const RGB_color_rgb = function (_, generator) {
var R = generator.valueToCode(this, 'R', generator.ORDER_ATOMIC);
var G = generator.valueToCode(this, 'G', generator.ORDER_ATOMIC);
var B = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC);
var colour = "((" + R + " & 0xffffff) << 16) | ((" + G + " & 0xffffff) << 8) | " + B;
return [colour, generator.ORDER_NONE];
};
export const display_rgb_init = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var type = this.getFieldValue('TYPE');
var value_ledcount = generator.valueToCode(this, 'LEDCOUNT', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.definitions_['var_declare_rgb_display' + dropdown_rgbpin] = 'Adafruit_NeoPixel rgb_display_' + dropdown_rgbpin + ' = Adafruit_NeoPixel(' + value_ledcount + ', ' + dropdown_rgbpin + ', ' + type + ' + NEO_KHZ800);';
generator.setups_['setup_rgb_display_begin_' + dropdown_rgbpin] = 'rgb_display_' + dropdown_rgbpin + '.begin();';
return '';
};
export const display_rgb_Brightness = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var Brightness = generator.valueToCode(this, 'Brightness', generator.ORDER_ATOMIC);
generator.definitions_['include_Adafruit_NeoPixel'] = '#include <Adafruit_NeoPixel.h>';
generator.setups_['setup_rgb_display_begin_' + dropdown_rgbpin] = 'rgb_display_' + dropdown_rgbpin + '.begin();';
var code = 'rgb_display_' + dropdown_rgbpin + '.setBrightness(' + Brightness + ');\n';
return code;
};
export const display_rgb = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var COLOR = generator.valueToCode(this, 'COLOR', generator.ORDER_ATOMIC);
COLOR = COLOR.replace(/#/g, "0x");
var code = 'rgb_display_' + dropdown_rgbpin + '.setPixelColor(' + value_led + ' - 1, ' + COLOR + ');\n';
return code;
};
export const RGB_color_HSV = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var value_led = generator.valueToCode(this, '_LED_', generator.ORDER_ATOMIC);
var H = generator.valueToCode(this, 'H', generator.ORDER_ATOMIC);
var S = generator.valueToCode(this, 'S', generator.ORDER_ATOMIC);
var V = generator.valueToCode(this, 'V', generator.ORDER_ATOMIC);
var code = 'rgb_display_' + dropdown_rgbpin + '.setPixelColor(' + value_led + ' - 1, ' + 'rgb_display_' + dropdown_rgbpin + '.ColorHSV(' + H + ', ' + S + ', ' + V + '));\n';
return code;
};
export const display_rgb_show = function () {
var board_type = JSFuncs.getPlatform();
var dropdown_rgbpin = this.getFieldValue('PIN');
var code = 'rgb_display_' + dropdown_rgbpin + '.show();\n';
if (board_type.match(RegExp(/ESP32/))) {
code += 'rgb_display_' + dropdown_rgbpin + '.show();\n';
}
return code;
};
export const display_rgb_rainbow1 = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ATOMIC);
generator.setups_['setup_rgb_display_begin_' + dropdown_rgbpin] = 'rgb_display_' + dropdown_rgbpin + '.begin();\n';
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n'
+ ' if(WheelPos < 85) {\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n'
+ ' } else if (WheelPos < 170) {\n'
+ ' WheelPos -= 85;\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n'
+ ' } else {\n'
+ ' WheelPos -= 170;\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName2] = code2;
var funcName3 = 'rainbow';
var code3 = 'void rainbow(uint8_t wait) {\n'
+ ' uint16_t i, j;\n'
+ ' for(j = 0; j < 256; j++) {\n'
+ ' for(i = 0; i < rgb_display_' + dropdown_rgbpin + '.numPixels(); i++){\n'
+ ' rgb_display_' + dropdown_rgbpin + '.setPixelColor(i, Wheel((i+j) & 255));\n'
+ ' }\n'
+ ' rgb_display_' + dropdown_rgbpin + '.show();\n'
+ ' delay(wait);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName3] = code3;
var code = 'rainbow(' + wait_time + ');\n'
return code;
};
export const display_rgb_rainbow2 = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ATOMIC);
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n'
+ ' if (WheelPos < 85) {\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n'
+ ' } else if (WheelPos < 170) {\n'
+ ' WheelPos -= 85;\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n'
+ ' } else {\n'
+ ' WheelPos -= 170;\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName2] = code2;
var funcName3 = 'rainbow';
var code3 = 'void rainbow(uint8_t wait) {\n'
+ ' uint16_t i, j;\n'
+ ' for(j = 0; j < 256; j++){\n'
+ ' for(i = 0; i < rgb_display_' + dropdown_rgbpin + '.numPixels(); i++) {\n'
+ ' rgb_display_' + dropdown_rgbpin + '.setPixelColor(i, Wheel((i+j) & 255));\n'
+ ' }\n'
+ ' rgb_display_' + dropdown_rgbpin + '.show();\n'
+ ' delay(wait);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName3] = code3;
var funcName4 = 'rainbowCycle';
var code4 = 'void rainbowCycle(uint8_t wait){\n'
+ ' uint16_t i, j;\n'
+ ' for(j = 0; j < 256 * 5; j++) {\n'
+ ' for(i = 0; i < rgb_display_' + dropdown_rgbpin + '.numPixels(); i++){\n'
+ ' rgb_display_' + dropdown_rgbpin + '.setPixelColor(i, Wheel(((i * 256 / rgb_display_' + dropdown_rgbpin + '.numPixels()) + j) & 255));\n'
+ ' }\n'
+ ' rgb_display_' + dropdown_rgbpin + '.show();\n'
+ ' delay(wait);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName4] = code4;
var code = 'rainbowCycle(' + wait_time + ');\n'
return code;
};
export const display_rgb_rainbow3 = function (_, generator) {
var dropdown_rgbpin = this.getFieldValue('PIN');
var rainbow_color = generator.valueToCode(this, 'rainbow_color', generator.ORDER_ATOMIC);
var type = this.getFieldValue('TYPE');
var funcName2 = 'Wheel';
var code2 = 'uint32_t Wheel(byte WheelPos) {\n'
+ ' if (WheelPos < 85) {\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(WheelPos * 3, 255 - WheelPos * 3, 0);\n'
+ ' } else if (WheelPos < 170) {\n'
+ ' WheelPos -= 85;\n'
+ ' return rgb_display_' + dropdown_rgbpin + '.Color(255 - WheelPos * 3, 0, WheelPos * 3);\n'
+ ' } else {\n'
+ ' WheelPos -= 170;return rgb_display_' + dropdown_rgbpin + '.Color(0, WheelPos * 3, 255 - WheelPos * 3);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName2] = code2;
if (type == "normal")
var code3 = 'for (int RGB_RAINBOW_i = 0; RGB_RAINBOW_i < rgb_display_' + dropdown_rgbpin + '.numPixels(); RGB_RAINBOW_i++) {\n'
+ ' rgb_display_' + dropdown_rgbpin + '.setPixelColor(RGB_RAINBOW_i, Wheel(' + rainbow_color + ' & 255));\n'
+ '}\n'
+ 'rgb_display_' + dropdown_rgbpin + '.show();\n';
else
var code3 = 'for (int RGB_RAINBOW_i = 0; RGB_RAINBOW_i < rgb_display_' + dropdown_rgbpin + '.numPixels(); RGB_RAINBOW_i++) {\n'
+ ' rgb_display_' + dropdown_rgbpin + '.setPixelColor(RGB_RAINBOW_i, Wheel(((RGB_RAINBOW_i * 256 / rgb_display_' + dropdown_rgbpin + '.numPixels()) + ' + rainbow_color + ') & 255));\n'
+ '}\n'
+ 'rgb_display_' + dropdown_rgbpin + '.show();\n';
return code3;
};
// 执行器-电机转动
export const Mixly_motor = function (_, generator) {
var PIN1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var PIN2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
var PIN_EN = generator.valueToCode(this, 'PIN_EN', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT) || '0';
var code = 'setMotor(' + PIN1 + ', ' + PIN2 + ', ' + PIN_EN + ', ' + speed + ');\n';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_S'] = 'pinMode(' + PIN1 + ', OUTPUT);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_D'] = 'pinMode(' + PIN2 + ', OUTPUT);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_S_W'] = 'digitalWrite(' + PIN1 + ', LOW);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_D_W'] = 'digitalWrite(' + PIN2 + ', LOW);';
var funcName = 'setMotor';
var code2 = 'void ' + funcName + '(int dirpin1, int dirpin2, int speedpin, int speed) {\n'
+ ' digitalWrite(dirpin2, !digitalRead(dirpin1));\n'
+ ' if (speed == 0) {\n'
+ ' digitalWrite(dirpin1, LOW);\n'
+ ' analogWrite(speedpin, 0);\n'
+ ' } else if (speed > 0) {\n'
+ ' digitalWrite(dirpin1, LOW);\n'
+ ' analogWrite(speedpin, speed);\n'
+ ' } else {\n'
+ ' digitalWrite(dirpin1, HIGH);\n'
+ ' analogWrite(speedpin, -speed);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName] = code2;
return code;
};
export const Motor_8833 = function (_, generator) {
var PIN1 = generator.valueToCode(this, 'PIN1', generator.ORDER_ATOMIC);
var PIN2 = generator.valueToCode(this, 'PIN2', generator.ORDER_ATOMIC);
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ASSIGNMENT) || '0';
var code = 'setMotor8833(' + PIN1 + ', ' + PIN2 + ', ' + speed + ');\n';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_S'] = 'pinMode(' + PIN1 + ', OUTPUT);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_D'] = 'pinMode(' + PIN2 + ', OUTPUT);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_S_W'] = 'digitalWrite(' + PIN1 + ', LOW);';
generator.setups_['setup_output_' + PIN1 + PIN2 + '_D_W'] = 'digitalWrite(' + PIN2 + ', LOW);';
var funcName = 'setMotor8833';
var code2 = 'void ' + funcName + '(int speedpin, int dirpin, int speed) {\n'
+ ' if (speed == 0) {\n'
+ ' digitalWrite(dirpin, LOW);\n'
+ ' analogWrite(speedpin, 0);\n'
+ ' } else if (speed > 0) {\n'
+ ' digitalWrite(dirpin, LOW);\n'
+ ' analogWrite(speedpin, speed);\n'
+ ' } else {\n'
+ ' digitalWrite(dirpin, HIGH);\n'
+ ' analogWrite(speedpin, 255 + speed);\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName] = code2;
return code;
};
// 语音模块(68段日常用语)
export const voice_module = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var dropdown_voice = this.getFieldValue('VOICE');
var wait_time = generator.valueToCode(this, 'WAIT', generator.ORDER_ASSIGNMENT) || '0';
generator.setups_['setup_output_sda'] = 'pinMode(' + dropdown_pin + ', OUTPUT);';
var code = 'send_data(' + dropdown_voice + '); // volume control 0xE0-E7;\n';
code += 'delay(' + wait_time + ');\n'
var code2 = 'void send_data(int addr) {\n'
+ ' int i;\n'
+ ' digitalWrite(' + dropdown_pin + ', LOW);\n'
+ ' delay(3); // >2ms\n'
+ ' for (i = 0; i < 8; i++) {\n'
+ ' digitalWrite(' + dropdown_pin + ', HIGH);\n'
+ ' if (addr & 1) {\n'
+ ' delayMicroseconds(2400); // >2400us\n'
+ ' digitalWrite(' + dropdown_pin + ', LOW);\n'
+ ' delayMicroseconds(800);\n'
+ ' } // >800us\n'
+ ' else {\n'
+ ' delayMicroseconds(800); // >800us\n'
+ ' digitalWrite(' + dropdown_pin + ', LOW);\n'
+ ' delayMicroseconds(2400);\n'
+ ' } // >2400us\n'
+ ' addr >>= 1;\n'
+ ' }\n'
+ ' digitalWrite(' + dropdown_pin + ', HIGH);\n'
+ '}\n';
generator.definitions_['funcName'] = code2;
return code;
};
// gd5800 mp3 控制播放
export const GD5800_MP3_CONTROL = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var CONTROL_TYPE = this.getFieldValue('CONTROL_TYPE');
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.' + CONTROL_TYPE + '\n';
return code;
};
export const GD5800_MP3_Set_Device = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var DEVICEID = this.getFieldValue('DEVICEID');
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.setDevice(' + DEVICEID + ');\n';
return code;
};
// gd5800 mp3 循环模式
export const GD5800_MP3_LOOP_MODE = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var LOOP_MODE = this.getFieldValue('LOOP_MODE');
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.setLoopMode(' + LOOP_MODE + ');\n';
return code;
};
// gd5800 mp3 EQ模式
export const GD5800_MP3_EQ_MODE = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var EQ_MODE = this.getFieldValue('EQ_MODE');
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.setEqualizer(' + EQ_MODE + ');\n';
return code;
};
// gd5800 mp3 设置音量
export const GD5800_MP3_VOL = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var vol = generator.valueToCode(this, 'vol', generator.ORDER_ATOMIC);
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.setVolume(' + vol + ');\n';
return code;
};
// gd5800 mp3 播放第N首
export const GD5800_MP3_PLAY_NUM = function (_, generator) {
var rxpin = generator.valueToCode(this, 'RXPIN', generator.ORDER_ATOMIC);
var txpin = generator.valueToCode(this, 'TXPIN', generator.ORDER_ATOMIC);
var NUM = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
generator.definitions_['include_GD5800'] = '#include <GD5800_Serial.h>';
generator.definitions_['var_declare_GD5800_ mp3' + rxpin + txpin] = 'GD5800_Serial mp3' + rxpin + txpin + '(' + rxpin + ', ' + txpin + ');';
generator.setups_['setup_ mp3' + rxpin + txpin] = 'mp3' + rxpin + txpin + '.begin(9600);';
var code = 'mp3' + rxpin + txpin + '.playFileByIndexNumber(' + NUM + ');\n';
return code;
};
export const AFMotorRun = function (_, generator) {
generator.definitions_['include_AFMotor'] = '#include <AFMotor.h>';
var motorNO = this.getFieldValue('motor');
var direction = this.getFieldValue('direction');
var speed = generator.valueToCode(this, 'speed', generator.ORDER_ATOMIC);
var code = "";
generator.definitions_['var_declare_motor_' + motorNO] = "AF_DCMotor" + ' motor' + motorNO + '(' + motorNO + ');';
code = 'motor' + motorNO + ".setSpeed(" + speed + ");\n" + 'motor' + motorNO + ".run(" + direction + ");\n";
return code;
};
export const AFMotorStop = function (_, generator) {
generator.definitions_['include_AFMotor'] = '#include <AFMotor.h>';
var motorNO = this.getFieldValue('motor');
var code = "";
generator.definitions_['var_declare_motor_' + motorNO] = "AF_DCMotor" + ' motor' + motorNO + '(' + motorNO + ');';
code = 'motor' + motorNO + ".setSpeed(0);\n" + 'motor' + motorNO + ".run(RELEASE);\n";
return code;
};
// 初始化DFPlayer Mini
export const arduino_dfplayer_mini_begin = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_dfplayer_pin = generator.valueToCode(this, 'dfplayer_pin', generator.ORDER_ATOMIC);
generator.definitions_['include_Arduino'] = '#include <Arduino.h>';
generator.definitions_['include_DFRobotDFPlayerMini'] = '#include "DFRobotDFPlayerMini.h"';
generator.definitions_['var_declare_DFPlayerMini_' + text_dfplayer_name] = 'DFRobotDFPlayerMini ' + text_dfplayer_name + ';';
generator.setups_['setup_DFPlayerMini_' + text_dfplayer_name] = '' + text_dfplayer_name + '.begin(' + value_dfplayer_pin + ');';
var code = '';
return code;
};
// 定义DFPlayer Mini 所使用的串口类型
export const arduino_dfplayer_mini_pin = function (_, generator) {
var dropdown_pin_type = this.getFieldValue('pin_type');
generator.definitions_['include_SoftwareSerial'] = '#include <SoftwareSerial.h>';
var code = dropdown_pin_type;
return [code, generator.ORDER_ATOMIC];
};
// DFPlayer Mini 设置串口通信的超时时间
export const arduino_dfplayer_mini_setTimeOut = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_timeout_data = generator.valueToCode(this, 'timeout_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.setTimeOut(' + value_timeout_data + ');\n';
return code;
};
// DFPlayer Mini 设置音量
export const arduino_dfplayer_mini_volume = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_volume_data = generator.valueToCode(this, 'volume_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.volume(' + value_volume_data + ');\n';
return code;
};
// DFPlayer Mini 音量+|-
export const arduino_dfplayer_mini_volume_up_down = function () {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var dropdown_volume_type = this.getFieldValue('volume_type');
var code = '' + text_dfplayer_name + '.' + dropdown_volume_type + '();\n';
return code;
};
// DFPlayer Mini 设置音效
export const arduino_dfplayer_mini_EQ = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_eq_data = generator.valueToCode(this, 'eq_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.EQ(' + value_eq_data + ');\n';
return code;
};
// DFPlayer Mini 定义音效类型
export const arduino_dfplayer_mini_EQ_type = function (_, generator) {
var dropdown_eq_type = this.getFieldValue('eq_type');
var code = dropdown_eq_type;
return [code, generator.ORDER_ATOMIC];
};
// DFPlayer Mini 指定播放设备
export const arduino_dfplayer_mini_outputDevice = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_outputdevice_data = generator.valueToCode(this, 'outputdevice_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.outputDevice(' + value_outputdevice_data + ');\n';
return code;
};
// DFPlayer Mini 定义播放设备类型
export const arduino_dfplayer_mini_outputDevice_type = function (_, generator) {
var dropdown_outputdevice_type = this.getFieldValue('outputdevice_type');
var code = dropdown_outputdevice_type;
return [code, generator.ORDER_ATOMIC];
};
// DFPlayer Mini 设置-1
export const arduino_dfplayer_set_1 = function () {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var dropdown_set_data = this.getFieldValue('set_data');
var code = '' + text_dfplayer_name + '.' + dropdown_set_data + '();\n';
return code;
};
// DFPlayer Mini 播放和循环指定曲目
export const arduino_dfplayer_play_loop = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_play_data = generator.valueToCode(this, 'play_data', generator.ORDER_ATOMIC);
var dropdown_play_type = this.getFieldValue('play_type');
var code = '' + text_dfplayer_name + '.' + dropdown_play_type + '(' + value_play_data + ');\n';
return code;
};
// DFPlayer Mini 播放指定文件夹下的曲目
export const arduino_dfplayer_playFolder = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_fold_data = generator.valueToCode(this, 'fold_data', generator.ORDER_ATOMIC);
var dropdown_fold_type = this.getFieldValue('fold_type');
var value_play_data = generator.valueToCode(this, 'play_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.' + dropdown_fold_type + '(' + value_fold_data + ', ' + value_play_data + ');\n';
return code;
};
// DFPlayer Mini 循环播放指定文件夹下的曲目
export const arduino_dfplayer_loopFolder = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_fold_data = generator.valueToCode(this, 'fold_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.loopFolder(' + value_fold_data + ');\n';
return code;
};
// DFPlayer Mini 获取当前信息
export const arduino_dfplayer_read_now = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var dropdown_read_type = this.getFieldValue('read_type');
var code = '' + text_dfplayer_name + '.' + dropdown_read_type + '()';
return [code, generator.ORDER_ATOMIC];
};
// DFPlayer Mini 获取U盘|SD卡|FLASH的总文件数
export const arduino_dfplayer_readFileCounts = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_device_type = generator.valueToCode(this, 'device_type', generator.ORDER_ATOMIC);
var dropdown_play_data = this.getFieldValue('play_data');
var code = '' + text_dfplayer_name + '.' + dropdown_play_data + '(' + value_device_type + ')';
return [code, generator.ORDER_ATOMIC];
};
// DFPlayer Mini 获取指定文件夹下的文件数
export const arduino_dfplayer_readFileCountsInFolder = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var value_folder_data = generator.valueToCode(this, 'folder_data', generator.ORDER_ATOMIC);
var code = '' + text_dfplayer_name + '.readFileCountsInFolder(' + value_folder_data + ')';
return [code, generator.ORDER_ATOMIC];
};
export const arduino_dfplayer_available = function (_, generator) {
var text_dfplayer_name = this.getFieldValue('dfplayer_name');
var dropdown_type = this.getFieldValue('type');
var code = '' + text_dfplayer_name + '.' + dropdown_type + '()';
return [code, generator.ORDER_ATOMIC];
};
export const I2Cmotor = function (_, generator) {
var motorNO = this.getFieldValue('motor');
var speed = generator.valueToCode(this, 'SPEED', generator.ORDER_ASSIGNMENT) || '0';
generator.definitions_['include_Wire'] = '#include <Wire.h> ';
generator.definitions_['include_Adafruit_PWMServoDriver'] = '#include <Adafruit_PWMServoDriver.h>';
generator.definitions_['var_declare_Adafruit_PWMServoDriver'] = 'Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();';
generator.setups_['setup_pwm_begin'] = 'pwm.begin();\n'
+ 'pwm.setOscillatorFrequency(27000000);\n'
+ 'pwm.setPWMFreq(400);\n'
+ 'Wire.setClock(400000);';
var code2;
code2 = 'void motor(int ID, int SPEED) { // 0-7\n'
+ ' if(SPEED > 0) {\n'
+ ' pwm.setPin(ID * 2, 0);\n'
+ ' pwm.setPin(ID * 2 + 1, (SPEED + 1) * 16 - 1);\n'
+ ' } else if (SPEED == 0) {\n'
+ ' pwm.setPin(ID * 2, 4095);\n'
+ ' pwm.setPin(ID * 2 + 1, 4095);\n'
+ ' } else if (SPEED < 0) {\n'
+ ' pwm.setPin(ID * 2, 1 - (SPEED + 1) * 16);\n'
+ ' pwm.setPin(ID * 2 + 1, 0);\n'
+ ' }\n'
+ '}\n';
generator.definitions_['motor'] = code2;
var code = 'motor(' + motorNO + ',' + speed + ');\n';
return code;
};
// M9101X mp3 单线控制播放
export const M9101X_S_MP3_CONTROL = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var CONTROL_TYPE = this.getFieldValue('CONTROL_TYPE');
generator.definitions_['include_N910X'] = '#include <RL_N910X.h>';
generator.definitions_['var_declare_N910X_ mp3' + dropdown_pin] = 'N910X mp3_' + dropdown_pin + '(' + dropdown_pin + ');';
generator.setups_['setup_ mp3' + dropdown_pin] = 'mp3_' + dropdown_pin + '.begin();';
var code = 'mp3_' + dropdown_pin + '.' + CONTROL_TYPE + '\n';
return code;
};
// M9101X mp3 单线音量控制
export const M9101X_S_MP3_VOL_CONTROL = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var vol = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
generator.definitions_['include_N910X'] = '#include <RL_N910X.h>';
generator.definitions_['var_declare_N910X_ mp3' + dropdown_pin] = 'N910X mp3_' + dropdown_pin + '(' + dropdown_pin + ');';
generator.setups_['setup_ mp3' + dropdown_pin] = ' mp3_' + dropdown_pin + '.begin();';
var code = 'mp3_' + dropdown_pin + '.set_volume(' + vol + ');\n';
return code;
};
// M9101X mp3 单线播放第N首
export const M9101X_S_MP3_PLAY_NUM = function (_, generator) {
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var num = generator.valueToCode(this, 'NUM', generator.ORDER_ATOMIC);
generator.definitions_['include_N910X'] = '#include <RL_N910X.h>';
generator.definitions_['var_declare_N910X_ mp3' + dropdown_pin] = 'N910X mp3_' + dropdown_pin + '(' + dropdown_pin + ');';
generator.setups_['setup_ mp3' + dropdown_pin] = ' mp3_' + dropdown_pin + '.begin();';
var code = 'mp3_' + dropdown_pin + '.set_play_number(' + num + ');\n';
return code;
};