Files
mixly3-server/mixly/boards/default_src/arduino_avr/generators/communicate.js
2026-01-24 16:16:48 +08:00

697 lines
30 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Profile } from 'mixly';
export const ir_recv = function (_, generator) {
/*var xmlDom = Blockly.Xml.workspaceToDom(Mixly.Editor.blockEditor);
var xmlText = Blockly.Xml.domToPrettyText(xmlDom);
if (xmlText.indexOf("type=\"controls_tone\"") === -1 && xmlText.indexOf("type=\"controls_notone\"") === -1) {
this.setWarningText(null);
} else {
this.setWarningText(Blockly.Msg.IR_AND_TONE_WARNING);
}*/
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var branch = generator.statementToCode(this, 'DO');
var branch2 = generator.statementToCode(this, 'DO2');
generator.definitions_['include_IRremote'] = '#include <IRremote.h>\n';
generator.definitions_['var_declare_irProtocolList'] =
`const String IR_PROTOCOL_TYPE[] = {
"UNKNOWN",
"PULSE_DISTANCE",
"PULSE_WIDTH",
"DENON",
"DISH",
"JVC",
"LG",
"LG2",
"NEC",
"PANASONIC",
"KASEIKYO",
"KASEIKYO_JVC",
"KASEIKYO_DENON",
"KASEIKYO_SHARP",
"KASEIKYO_MITSUBISHI",
"RC5",
"RC6",
"SAMSUNG",
"SHARP",
"SONY",
"ONKYO",
"APPLE",
"BOSEWAVE",
"LEGO_PF",
"MAGIQUEST",
"WHYNTER"
};`;
generator.definitions_['var_declare_irrecv_' + dropdown_pin] = `IRrecv irrecv_${dropdown_pin}(${dropdown_pin});\n`;
generator.setups_['setup_ir_recv_' + dropdown_pin] = `irrecv_${dropdown_pin}.enableIRIn();`;
var code =
`if (irrecv_${dropdown_pin}.decode()) {
struct IRData *pIrData = &irrecv_${dropdown_pin}.decodedIRData;
long ir_item = pIrData->decodedRawData;
String irProtocol = IR_PROTOCOL_TYPE[pIrData->protocol];
Serial.print("IR TYPE:" + irProtocol + "\\tVALUE:");
Serial.println(ir_item, HEX);
irrecv_${dropdown_pin}.resume();
${branch}
} else {
${branch2}
}\n`;
return code;
};
export const ir_recv_enable = function (_, generator) {
/*var xmlDom = Blockly.Xml.workspaceToDom(Mixly.Editor.blockEditor);
var xmlText = Blockly.Xml.domToPrettyText(xmlDom);
if (xmlText.indexOf("type=\"controls_tone\"") == -1 && xmlText.indexOf("type=\"controls_notone\"") == -1) {
this.setWarningText(null);
}
else {
this.setWarningText(Blockly.Msg.IR_AND_TONE_WARNING);
}*/
generator.definitions_['include_IRremote'] = '#include <IRremote.h>';
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
var code = 'irrecv_' + dropdown_pin + '.enableIRIn();\n';
return code;
}
export const ir_send_nec = function (_, generator) {
var pin = this.getFieldValue('PIN');
generator.definitions_['include_IRremote'] = '#include <IRremote.h>\n';
generator.definitions_['var_declare_ir_send_' + pin] = `IRsend irsend_${pin}(${pin});`;
var data = generator.valueToCode(this, 'data', generator.ORDER_ATOMIC) || '0';
var bits = generator.valueToCode(this, 'bits', generator.ORDER_ATOMIC) || '0';
var type = this.getFieldValue('TYPE');
var code = `irsend_${pin}.send${type}(${data},${bits});\n`;
return code;
}
export const ir_recv_raw = function (_, generator) {
/*var xmlDom = Blockly.Xml.workspaceToDom(Mixly.Editor.blockEditor);
var xmlText = Blockly.Xml.domToPrettyText(xmlDom);
if (xmlText.indexOf("type=\"controls_tone\"") == -1 && xmlText.indexOf("type=\"controls_notone\"") == -1) {
this.setWarningText(null);
}
else {
this.setWarningText(Blockly.Msg.IR_AND_TONE_WARNING);
}*/
var dropdown_pin = generator.valueToCode(this, 'PIN', generator.ORDER_ATOMIC);
generator.definitions_['include_IRremote'] = '#include <IRremote.h>\n';
generator.definitions_['var_declare_ir_recv' + dropdown_pin] = 'IRrecv irrecv_' + dropdown_pin + '(' + dropdown_pin + ');\ndecode_results results_' + dropdown_pin + ';\n';
if (!generator.setups_['setup_serial_Serial']) {
generator.setups_['setup_serial_Serial'] = 'Serial.begin(' + Profile.default.serial + ');';
}
generator.setups_['setup_ir_recv_' + dropdown_pin] = 'irrecv_' + dropdown_pin + '.enableIRIn();\n';
var code = "if (irrecv_" + dropdown_pin + ".decode(&results_" + dropdown_pin + ")) {\n"
code += ' ' + 'dumpRaw(&results_' + dropdown_pin + ');\n';
code += ' irrecv_' + dropdown_pin + '.resume();\n'
code += '}\n';
var funcode = 'void dumpRaw(decode_results *results) {\n'
+ ' int count = results->rawlen;\n'
+ ' Serial.print("RawData (");\n'
+ ' Serial.print(count, DEC);\n'
+ ' Serial.print("): ");\n'
+ ' for (int i = 0; i < count; i++) {\n'
+ ' Serial.print(results->rawbuf[i]*MICROS_PER_TICK, DEC);\n'
+ ' if(i!=count-1){\n'
+ ' Serial.print(",");\n'
+ ' }\n'
+ ' }\n'
+ ' Serial.println("");\n'
+ '}\n';
generator.definitions_['dumpRaw'] = funcode;
return code;
};
export const ir_send_raw = function (_, generator) {
var pin = this.getFieldValue('PIN');
generator.definitions_['include_IRremote'] = '#include <IRremote.h>\n';
generator.definitions_['var_declare_ir_send_' + pin] = `IRsend irsend_${pin}(${pin});`;
var length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC) || '0';
var freq = generator.valueToCode(this, 'freq', generator.ORDER_ATOMIC) || '0';
var text = this.getFieldValue('TEXT');
var code = 'unsigned int buf_raw[' + length + ']={' + text + '};\n'
code = code + `irsend_${pin}.sendRaw(buf_raw,${length},${freq});\n`;
return code;
}
export const i2c_master_writer = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var device = generator.valueToCode(this, 'device', generator.ORDER_ATOMIC) || '0';
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC) || '0';
var code = "Wire.beginTransmission(" + device + ");\n";
code += "Wire.write(" + value + ");\n";
code += "Wire.endTransmission();\n";
return code;
};
export const i2c_master_reader2 = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
//generator.setups_['setup_wire_begin'] ='Wire.begin();';
var code = "Wire.read()";
return [code, generator.ORDER_ATOMIC];
};
// YANG add slave write
export const i2c_slave_write = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC) || '0';
var code = "Wire.write(" + value + ");\n";
return code;
};
export const RFID_init = function (_, generator) {
var sda = this.getFieldValue('SDA');
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.definitions_['include_RFID'] = '#include <RFID.h>';
generator.definitions_['var_declare_RFID'] = 'RFID rfid(' + sda + ',5);';
generator.definitions_['var_declare__i and tmp'] = 'unsigned char i,tmp;';
generator.definitions_['var_declare__status'] = 'unsigned char status;';
generator.definitions_['var_declare__strmax'] = 'unsigned char str[MAX_LEN];';
generator.definitions_['var_declare__RC_size'] = 'unsigned char RC_size;';
generator.definitions_['var_declare__blockAddr'] = 'unsigned char blockAddr; //选择操作的块地址063';
generator.definitions_['define_1'] = '//4字节卡序列号第5字节为校验字节';
generator.definitions_['define_2'] = 'unsigned char serNum[5];';
generator.definitions_['define_3'] = '//写卡数据';
generator.definitions_['define_5'] = '//原扇区A密码16个扇区每个扇区密码6Byte';
generator.definitions_['define_6'] = 'unsigned char sectorKeyA[16][16] = {';
generator.definitions_['define_7'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},';
generator.definitions_['define_8'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},';
generator.definitions_['define_9'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};';
generator.definitions_['define_10'] = '//新扇区A密码16个扇区每个扇区密码6Byte';
generator.definitions_['define_11'] = 'unsigned char sectorNewKeyA[16][16] = {';
generator.definitions_['define_12'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},';
generator.definitions_['define_13'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},';
generator.definitions_['define_14'] = ' {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xff,0x07,0x80,0x69, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},};';
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
generator.setups_['setup_output_2'] = 'SPI.begin();';
generator.setups_['setup_output_3'] = 'rfid.init();';
return "";
};
export const RFID_on = function (_, generator) {
// Do while/until loop.
var branch = generator.statementToCode(this, 'do_');
if (generator.INFINITE_LOOP_TRAP) {
branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
'\'' + this.id + '\'') + branch;
}
return 'if(rfid.isCard()){\n' + branch + '}\n';
};
export const RFID_readcardnum = function (_, generator) {
var funcName = 'RFID_readcardnum';
var code = 'String ' + funcName + '(){\n'
+ ' rfid.readCardSerial();\n'
+ ' String stringserNum = String(rfid.serNum[0], HEX)+String(rfid.serNum[1], HEX)+String(rfid.serNum[2], HEX)+String(rfid.serNum[3], HEX)+String(rfid.serNum[4], HEX);\n'
+ ' //选卡,返回卡容量(锁定卡片,防止多次读写)\n'
+ ' rfid.selectTag(rfid.serNum);\n'
+ ' return stringserNum;\n'//直接返回string
+ '}\n';
generator.definitions_[funcName] = code;
return [funcName + '()', generator.ORDER_ATOMIC];
};
/* export const RFID_serialprintcardnum = function() {
var funcName='RFID_serialprintcardnum';
var code='void'+ ' ' + funcName + '() {\n'
+"\n"+' //找卡 '
+"\n"+' //读取卡序列号 '
+"\n"+' if (rfid.readCardSerial()) '
+"\n"+' {'
+"\n"+' Serial.print("The card\'s number is : "); '
+"\n"+' Serial.print(rfid.serNum[0],HEX); '
+"\n"+' Serial.print(rfid.serNum[1],HEX); '
+"\n"+' Serial.print(rfid.serNum[2],HEX); '
+"\n"+' Serial.print(rfid.serNum[3],HEX); '
+"\n"+' Serial.print(rfid.serNum[4],HEX); '
+"\n"+' Serial.println(" "); '
+"\n"+' }'
+"\n"+' //选卡,返回卡容量(锁定卡片,防止多次读写)'
+"\n"+' rfid.selectTag(rfid.serNum);'
+ '\n}\n';
generator.definitions_[funcName] = code;
return funcName+'();\n';
}; */
export const RFID_writecarddata = function (_, generator) {
var address2 = generator.valueToCode(this, 'address1', generator.ORDER_ATOMIC);
var data2 = this.getFieldValue('data1');
var funcName = 'RFID_writecarddata';
var code = 'void' + ' ' + funcName + '(int ad2){\n'
+ ' rfid.readCardSerial();\n'
+ ' //选卡,返回卡容量(锁定卡片,防止多次读写)\n'
+ ' rfid.selectTag(rfid.serNum);\n'
+ ' //写数据卡\n'
+ ' blockAddr = ad2;\n'
+ ' if(rfid.auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], rfid.serNum) == MI_OK){\n'
+ ' //写数据\n'
+ ' status = rfid.write(blockAddr, sectorKeyA[blockAddr/4]);\n'
+ ' Serial.print("set the new card password, and can modify the data of the Sector: ");\n'
+ ' Serial.println(blockAddr/4,DEC);\n'
+ ' blockAddr=blockAddr-3;\n'
+ ' status=rfid.write(blockAddr,(unsigned char*)' + data2 + ');\n'
+ ' if(status == MI_OK){\n'
+ ' Serial.println("Write card OK!");\n'
+ ' }\n'
+ ' }\n'
+ '}\n';
generator.definitions_[funcName] = code;
return funcName + '(' + address2 + ');\n';
}
export const RFID_readcarddata = function (_, generator) {
var address3 = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
var funcName = 'RFID_readcarddata'
var code = 'String' + ' ' + funcName + '(int ad3){\n'
+ ' //读卡\n'
+ ' blockAddr =ad3;\n'
+ ' status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum);\n'
+ ' if(status == MI_OK){ //认证\n'
+ ' //读数据\n'
+ ' if(rfid.read(blockAddr, str) == MI_OK)\n'
+ ' {\n'
+ ' Serial.print("Read from the card ,the data is : ");\n'
+ ' Serial.println((char *)str);\n'
+ ' }\n'
+ ' }\n'
+ ' rfid.halt();\n'
+ ' String stringstr((char*)str);\n'//str是一个char数组必须先转换成char*才能继续转换成string
+ ' return stringstr;\n'
+ '}\n';
generator.definitions_[funcName] = code;
return [funcName + '(' + address3 + ')', generator.ORDER_ATOMIC];
};
/* export const RFID_serialprintcarddata = function() {
var address3 = generator.valueToCode(this, 'address', generator.ORDER_ATOMIC);
var funcName='RFID_serialprintcarddata';
var code='void'+ ' ' + funcName + '(int ad3) {\n'
+"\n"+'//读卡 '
+"\n"+' blockAddr =ad3; '
+"\n"+' status = rfid.auth(PICC_AUTHENT1A, blockAddr, sectorNewKeyA[blockAddr/4], rfid.serNum);'
+"\n"+' if (status == MI_OK) //认证'
+"\n"+' {'
+"\n"+' //读数据'
+"\n"+' if( rfid.read(blockAddr, str) == MI_OK)'
+"\n"+' {'
+"\n"+' Serial.print("Read from the card ,the data is : ");'
+"\n"+' Serial.println((char *)str);'
+"\n"+' } '
+"\n"+' } '
+"\n"+' rfid.halt();'
+ '\n}\n';
generator.definitions_[funcName] = code;
return funcName+'('+address3+');\n';
}; */
export const RFID_off = function (_, generator) {
var funcName = 'RFID_off';
var code = 'void' + ' ' + funcName + '() {\n'
+ "\n" + ' rfid.halt(); '
+ '\n}\n';
generator.definitions_[funcName] = code;
return funcName + '();\n';
};
export const RFID_in = function (_, generator) {
// Do while/until loop.
var funcName = 'RFID_readcardnum';
var code = 'String' + ' ' + funcName + '() {\n'
+ "\n" + ' rfid.readCardSerial(); '
+ "\n" + ' String stringserNum=String(rfid.serNum[0], HEX)+String(rfid.serNum[1], HEX)+String(rfid.serNum[2], HEX)+String(rfid.serNum[3], HEX)+String(rfid.serNum[4], HEX);'
+ "\n" + ' //选卡,返回卡容量(锁定卡片,防止多次读写)'
+ "\n" + ' rfid.selectTag(rfid.serNum);'
+ "\n" + ' return stringserNum; '//直接返回string
+ '\n}\n';
generator.definitions_[funcName] = code;
var argument0 = generator.valueToCode(this, 'uid_',
generator.ORDER_NONE) || 'false';
var branch = generator.statementToCode(this, 'do_');
if (generator.INFINITE_LOOP_TRAP) {
branch = generator.INFINITE_LOOP_TRAP.replace(/%1/g,
'\'' + this.id + '\'') + branch;
}
/*
fixed bug caused by parameter of strcmp() must be const char*
author:zyc
date:2018-12-7
*/
if (argument0 != 'false') {
if (argument0.indexOf('"') === 0)
return 'if (' + 'strcmp(RFID_readcardnum().c_str(),' + argument0 + ')==0' + ') {\n' + branch + '}\n';
return 'if (' + 'strcmp(RFID_readcardnum().c_str(),' + argument0 + '.c_str())==0' + ') {\n' + branch + '}\n';
}
return '';
};
// 初始化RFID
export const MFRC522_init = function (_, generator) {
var text_rfid_name = this.getFieldValue('rfid_name');
var value_PIN_SDA = generator.valueToCode(this, 'PIN_SDA', generator.ORDER_ATOMIC);
var value_PIN_RST = generator.valueToCode(this, 'PIN_RST', generator.ORDER_ATOMIC);
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.definitions_['include_MFRC522'] = '#include <MFRC522.h>';
generator.definitions_['var_declare_' + text_rfid_name] = 'MFRC522 ' + text_rfid_name + '(' + value_PIN_SDA + ', ' + value_PIN_RST + ');';
generator.setups_['setup_spi'] = 'SPI.begin();';
generator.setups_['setup_mfc522_' + text_rfid_name] = text_rfid_name + '.PCD_Init();';
var code = '';
return code;
};
// RFID侦测到信号
export const MFRC522_IsNewCard = function (_, generator) {
var text_rfid_name = this.getFieldValue('rfid_name');
var statements_DO = generator.statementToCode(this, 'DO');
generator.definitions_['function_MFRC522_IsNewCard'] = 'boolean MFRC522_IsNewCard(MFRC522 *_name){\n'
+ ' if(!_name->PICC_IsNewCardPresent())\n'
+ ' return false;\n'
+ ' if(!_name->PICC_ReadCardSerial())\n'
+ ' return false;\n'
+ ' return true;\n'
+ '}\n';
var code = 'if(MFRC522_IsNewCard(&' + text_rfid_name + ')){\n'
+ (statements_DO != '' ? statements_DO : '')
+ ' ' + text_rfid_name + '.PICC_HaltA();\n'
+ ' ' + text_rfid_name + '.PCD_StopCrypto1();\n'
+ '}\n';
return code;
};
// RFID读取卡号
export const MFRC522_ReadCardUID = function (_, generator) {
var text_rfid_name = this.getFieldValue('rfid_name');
generator.definitions_['function_MFRC522_ReadCardUID'] = 'String MFRC522_ReadCardUID(MFRC522 *_name){\n'
+ ' String _CardUID = "";\n'
+ ' for (byte _i = 0; _i < _name->uid.size; _i++){\n'
+ ' if(_name->uid.uidByte[_i] < 0x10)\n'
+ ' _CardUID += "0";\n'
+ ' _CardUID += String(_name->uid.uidByte[_i], HEX);\n'
+ ' }\n'
+ ' return _CardUID;\n'
+ '}\n';
var code = 'MFRC522_ReadCardUID(&' + text_rfid_name + ')';
return [code, generator.ORDER_ATOMIC];
};
// RFID写卡
export const MFRC522_WriteCard = function (_, generator) {
var text_rfid_name = this.getFieldValue('rfid_name');
var value_block = generator.valueToCode(this, 'block', generator.ORDER_ATOMIC);
var value_buffer = generator.valueToCode(this, 'buffer', generator.ORDER_ATOMIC);
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
generator.definitions_['function_MFRC522_WriteCard'] = 'boolean MFRC522_WriteCard(MFRC522 *_name, byte _block, byte *_buffer, byte _length){\n'
+ ' MFRC522::MIFARE_Key _key;\n'
+ ' for(byte i = 0; i < 6; i++)\n'
+ ' _key.keyByte[i] = 0xFF;\n'
+ ' MFRC522::StatusCode _status;\n'
+ ' _status = _name->PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, _block, &_key, &(_name->uid));\n'
+ ' if(_status != MFRC522::STATUS_OK){\n'
+ ' Serial.print(F("PCD_Authenticate() failed: "));\n'
+ ' Serial.println(_name->GetStatusCodeName(_status));\n'
+ ' return false;\n'
+ ' }\n'
+ ' else{\n'
+ ' Serial.println(F("PCD_Authenticate() success;"));\n'
+ ' }\n'
+ ' _status = _name->MIFARE_Write(_block, _buffer, _length);\n'
+ ' if(_status != MFRC522::STATUS_OK){\n'
+ ' Serial.print(F("MIFARE_Write() failed: "));\n'
+ ' Serial.println(_name->GetStatusCodeName(_status));\n'
+ ' return false;\n'
+ ' }\n'
+ ' else{\n'
+ ' Serial.println(F("MIFARE_Write() success;"));\n'
+ ' }\n'
+ ' return true;\n'
+ '}\n'
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
var code = 'MFRC522_WriteCard(&' + text_rfid_name + ', ' + value_block + ', ' + value_buffer + ', ' + value_length + ');\n';
return code;
};
// RFID读卡
export const MFRC522_ReadCard = function (_, generator) {
var text_rfid_name = this.getFieldValue('rfid_name');
var value_block = generator.valueToCode(this, 'block', generator.ORDER_ATOMIC);
var value_buffer = generator.valueToCode(this, 'buffer', generator.ORDER_ATOMIC);
var value_length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC);
generator.definitions_['function_MFRC522_ReadCard'] = 'boolean MFRC522_ReadCard(MFRC522 *_name, byte _block, byte *_buffer, byte _length){\n'
+ ' MFRC522::MIFARE_Key _key;\n'
+ ' for(byte i = 0; i < 6; i++)\n'
+ ' _key.keyByte[i] = 0xFF;\n'
+ ' MFRC522::StatusCode _status;\n'
+ ' _status = _name->PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, _block, &_key, &(_name->uid));\n'
+ ' if(_status != MFRC522::STATUS_OK){\n'
+ ' Serial.print(F("PCD_Authenticate() failed: "));\n'
+ ' Serial.println(_name->GetStatusCodeName(_status));\n'
+ ' return false;\n'
+ ' }\n'
+ ' else{\n'
+ ' Serial.println(F("PCD_Authenticate() success;"));\n'
+ ' }\n'
+ ' if(_length < 18){\n'
+ ' byte _Read_buffer[18];\n'
+ ' byte _Read_buffer_length = 18;\n'
+ ' _status = _name->MIFARE_Read(_block, _Read_buffer, &_Read_buffer_length);\n'
+ ' if(_status != MFRC522::STATUS_OK){\n'
+ ' Serial.print(F("MIFARE_Read() failed: "));\n'
+ ' Serial.println(_name->GetStatusCodeName(_status));\n'
+ ' return false;\n'
+ ' }\n'
+ ' else{\n'
+ ' Serial.println(F("MIFARE_Read() success;"));\n'
+ ' }\n'
+ ' for(byte _i = 0; _i < _length; _i++)\n'
+ ' _buffer[_i] = _Read_buffer[_i];\n'
+ ' }\n'
+ ' else{\n'
+ ' _status = _name->MIFARE_Read(_block, _buffer, &_length);\n'
+ ' if(_status != MFRC522::STATUS_OK){\n'
+ ' Serial.print(F("MIFARE_Read() failed: "));\n'
+ ' Serial.println(_name->GetStatusCodeName(_status));\n'
+ ' return false;\n'
+ ' }\n'
+ ' else{\n'
+ ' Serial.println(F("MIFARE_Read() success;"));\n'
+ ' }\n'
+ ' }\n'
+ ' return true;\n'
+ '}\n'
generator.setups_['setup_serial_Serial'] = 'Serial.begin(9600);';
var code = 'MFRC522_ReadCard(&' + text_rfid_name + ', ' + value_block + ', ' + value_buffer + ', ' + value_length + ');\n';
return code;
};
// IIC主机初始化
export const i2c_master_Init = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var code = '';
return code;
};
// IIC从机初始化
export const i2c_slave_Init = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
var value_i2c_address = generator.valueToCode(this, 'i2c_address', generator.ORDER_ATOMIC);
generator.setups_['setup_i2c'] = 'Wire.begin(' + value_i2c_address + ');';
var code = '';
return code;
};
// IIC发送数据
export const i2c_begin_end_transmission = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
var value_i2c_address = generator.valueToCode(this, 'i2c_address', generator.ORDER_ATOMIC);
var statements_transmission_data = generator.statementToCode(this, 'transmission_data');
var code = 'Wire.beginTransmission(' + value_i2c_address + ');\n'
+ statements_transmission_data
+ 'Wire.endTransmission();\n';
return code;
};
// IIC写入数据
export const i2c_write = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
var value_i2c_write_data = generator.valueToCode(this, 'i2c_write_data', generator.ORDER_ATOMIC);
var code = 'Wire.write(' + value_i2c_write_data + ');\n';
return code;
};
export const i2c_slave_write_array = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var array = generator.valueToCode(this, 'array', generator.ORDER_ATOMIC);
var length = generator.valueToCode(this, 'length', generator.ORDER_ATOMIC) || '1';
var code = "Wire.write(" + array + "," + length + ");\n";
return code;
};
export const i2c_available = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
var workspace = this.workspace;
var blocks = workspace.getAllBlocks();
var y = 0;
for (y = 0; y < blocks.length; y++) {
if (blocks[y].type == 'i2c_slave_Init')
break;
}
if (y == blocks.length)
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var code = "Wire.available()";
return [code, generator.ORDER_ATOMIC];
};
// 从机接收字节数
export const i2c_howmany = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var code = "howMany";
return [code, generator.ORDER_ATOMIC];
};
// IIC读取数据
export const i2c_read = function (_, generator) {
var code = "Wire.read()";
return [code, generator.ORDER_ATOMIC];
};
// SPI
export const spi_transfer = function (_, generator) {
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.setups_['setup_spi'] = 'SPI.begin();';
var pin = generator.valueToCode(this, 'pin', generator.ORDER_ATOMIC);
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC);
generator.setups_['setup_output_' + pin] = 'pinMode(' + pin + ', OUTPUT);';
var code = "digitalWrite(" + pin + ", LOW);\n";
code += "SPI.transfer(" + value + ");\n";
code += "digitalWrite(" + pin + ", HIGH);\n";
return code;
};
// SPI 初始化从机
export const spi_begin_slave = function (_, generator) {
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.setups_['setup_spi'] = 'pinMode(12, OUTPUT);'
+ '\n SPCR |= _BV(SPE);';
var code = '';
return code;
};
// 寄存器读写
export const i2c_master_writerReg = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var device = generator.valueToCode(this, 'device', generator.ORDER_ATOMIC) || '0';
var regadd = generator.valueToCode(this, 'regadd', generator.ORDER_ATOMIC) || '0';
var value = generator.valueToCode(this, 'value', generator.ORDER_ATOMIC) || '0';
var code = "Wire.beginTransmission(" + device + ");\n";
code += "Wire.write(" + regadd + ");\n";
code += "Wire.write(" + value + ");\n";
code += "Wire.endTransmission();\n";
return code;
};
export const i2c_master_readerReg = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
generator.setups_['setup_wire_begin'] = 'Wire.begin();';
var device = generator.valueToCode(this, 'device', generator.ORDER_ATOMIC) || '0';
var regadd = generator.valueToCode(this, 'regadd', generator.ORDER_ATOMIC) || '0';
var bytes = generator.valueToCode(this, 'bytes', generator.ORDER_ATOMIC) || '0';
var code = "Wire.beginTransmission(" + device + ");\n";
code += "Wire.write(" + regadd + ");\n";
code += "Wire.requestFrom(" + device + ", " + bytes + ");\n";
code += "Wire.endTransmission();\n";
return code;
};
export const i2c_slave_onreceive = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
var value_onReceive_length = generator.valueToCode(this, 'onReceive_length', generator.ORDER_ATOMIC);
var statements_i2c_onReceive_data = generator.statementToCode(this, 'DO');
generator.definitions_['function_receiveEvent'] = 'void receiveEvent(int ' + value_onReceive_length + ')'
+ '\n{'
+ ' ' + statements_i2c_onReceive_data
+ '\n}\n'
generator.setups_['setup_i2c_receiveEvent'] = 'Wire.onReceive(receiveEvent);';
var code = '';
return code;
}
export const i2c_slave_onrequest = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
generator.setups_['setup_i2c_slave'] = 'Wire.setClock(400000);';
generator.setups_['setup_i2c_onRequest'] = 'Wire.onRequest(i2cRequestEvent);';
var funcName = 'i2cRequestEvent';
var branch = generator.statementToCode(this, 'DO');
var code2 = 'void' + ' ' + funcName + '() {\n' + branch + '}\n';
generator.definitions_[funcName] = code2;
return '';
}
export const i2c_master_reader = function (_, generator) {
generator.definitions_['include_Wire'] = '#include <Wire.h>\n';
var device = generator.valueToCode(this, 'device', generator.ORDER_ATOMIC) || '0';
var bytes = generator.valueToCode(this, 'bytes', generator.ORDER_ATOMIC) || '0';
var code = "Wire.requestFrom(" + device + ", " + bytes + ");\n";
return code;
};
export const spi_begin_master = function (_, generator) {
var value_spi_slave_pin = generator.valueToCode(this, 'spi_slave_pin', generator.ORDER_ATOMIC);
generator.definitions_['include_SPI'] = '#include <SPI.h>';
generator.setups_['setup_spi'] = 'SPI.begin();';
generator.setups_['setup_spi_divider'] = 'SPI.setClockDivider(SPI_CLOCK_DIV8);';
generator.setups_['setup_spi_pin_' + value_spi_slave_pin] = 'digitalWrite(' + value_spi_slave_pin + ', HIGH);';
var code = '';
return code;
};
export const spi_transfer_Init = function (_, generator) {
var value_slave_pin = generator.valueToCode(this, 'slave_pin', generator.ORDER_ATOMIC);
var statements_transfer_data = generator.statementToCode(this, 'transfer_data');
var code = 'digitalWrite(' + value_slave_pin + ', LOW);\n'
+ statements_transfer_data
+ 'digitalWrite(' + value_slave_pin + ', HIGH);\n';
return code;
};
export const spi_transfer_1 = function (_, generator) {
var value_transfer_data = generator.valueToCode(this, 'transfer_data', generator.ORDER_ATOMIC);
var code = 'SPI.transfer(' + value_transfer_data + ');\n';
return code;
};
export const spi_transfer_2 = function (_, generator) {
var value_transfer_data = generator.valueToCode(this, 'transfer_data', generator.ORDER_ATOMIC);
var code = 'SPI.transfer(' + value_transfer_data + ')';
return [code, generator.ORDER_ATOMIC];
};
export const spi_slave_interrupt = function (_, generator) {
var statements_slave_interrupt_data = generator.statementToCode(this, 'slave_interrupt_data');
generator.definitions_['function_ISR'] = 'ISR(SPI_STC_vect)'
+ '\n{'
+ '\n' + statements_slave_interrupt_data
+ '\n}\n'
generator.setups_['setup_spi_interrupt'] = 'SPI.attachInterrupt();';
var code = '';
return code;
};
export const spi_slave_receive = function (_, generator) {
generator.definitions_['function_SPI_SlaveReceive'] = 'char SPI_SlaveReceive()'
+ '\n{'
+ '\n while(!(SPSR&(1<<SPIF)));'
+ '\n return SPDR;'
+ '\n}\n'
var code = 'SPI_SlaveReceive()';
return [code, generator.ORDER_ATOMIC];
};