time.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. /**
  2. * @license Licensed under the Apache License, Version 2.0 (the "License"):
  3. * http://www.apache.org/licenses/LICENSE-2.0
  4. */
  5. /**
  6. * @fileoverview Arduino code generator for the Time blocks.
  7. * Arduino built-in function docs: http://arduino.cc/en/Reference/HomePage
  8. */
  9. 'use strict';
  10. goog.provide('Blockly.Python.time');
  11. goog.require('Blockly.Python');
  12. /**
  13. * Code generator for the delay Arduino block.
  14. * Arduino code: loop { delay(X); }
  15. * @param {!Blockly.Block} block Block to generate the code from.
  16. * @return {string} Completed code.
  17. */
  18. Blockly.Python['time_delay'] = function(block) {
  19. // var time_type = block.getFieldValue('type');
  20. Blockly.Python.definitions_['v831_import_time'] = `import time`;
  21. var delayTimeMs = (Blockly.Python.valueToCode(block, 'DELAY_TIME_MILI', Blockly.Python.ORDER_ATOMIC)) || '0';
  22. var code = 'time.sleep(' + delayTimeMs + ' / 1000)\n';
  23. return code;
  24. };
  25. /**
  26. * Code generator for the delayMicroseconds block.
  27. * Arduino code: loop { delayMicroseconds(X); }
  28. * @param {!Blockly.Block} block Block to generate the code from.
  29. * @return {string} Completed code.
  30. */
  31. Blockly.Python['time_delaymicros'] = function(block) {
  32. // var time_type = block.getFieldValue('type');
  33. Blockly.Python.definitions_['v831_import_time']
  34. Blockly.Python.includes_['import_time'] = `def delayMicrosecond(t): # 微秒级延时函数
  35. start,end=0,0 # 声明变量
  36. start=time.time() # 记录开始时间
  37. t=(t-35)/1000000 # 将输入t的单位转换为秒,-35是时间补偿
  38. while end-start<t: # 循环至时间差值大于或等于设定值时
  39. end=time.time() `;
  40. var delayTimeMs = Blockly.Python.valueToCode(block, 'DELAY_TIME_MICRO', Blockly.Python.ORDER_ATOMIC) || '0';
  41. var code = 'delayMicrosecond(' + delayTimeMs + ')\n';
  42. return code;
  43. };
  44. Blockly.Python['time_delayseconds'] = function(block) {
  45. // var time_type = block.getFieldValue('type');
  46. Blockly.Python.definitions_['v831_import_time'] = 'import time';
  47. var delayTimeMs = Blockly.Python.valueToCode(
  48. block, 'DELAY_TIME_MICRO', Blockly.Python.ORDER_ATOMIC) || '0';
  49. var code = 'time.sleep(' + delayTimeMs + ')\n';
  50. return code;
  51. };
  52. /**
  53. * Code generator for the elapsed time in milliseconds block.
  54. * Arduino code: loop { millis() }
  55. * @param {!Blockly.Block} block Block to generate the code from.
  56. * @return {array} Completed code with order of operation.
  57. */
  58. Blockly.Python['time_millis'] = function(block) {
  59. // var time_type = block.getFieldValue('type');
  60. Blockly.Python.definitions_['v831_import_time'] = 'import time';
  61. // if (time_type == 'on_esp32') {
  62. // var code = 'time.ticks_ms()';
  63. //} else if (time_type == 'on_ai') {
  64. var code = 'time.ticks_ms()';
  65. //}
  66. return [code, Blockly.Python.ORDER_ATOMIC];
  67. };
  68. /**
  69. * Code generator for the elapsed time in microseconds block.
  70. * Arduino code: loop { micros() }
  71. * @param {!Blockly.Block} block Block to generate the code from.
  72. * @return {array} Completed code with order of operation.
  73. */
  74. Blockly.Python['time_micros'] = function(block) {
  75. // var time_type = block.getFieldValue('type');
  76. Blockly.Python.definitions_['v831_import_time'] = 'import time';
  77. // if (time_type == 'on_esp32') {
  78. // var code = 'time.time()';
  79. // } else if (time_type == 'on_ai') {
  80. var code = 'time.ticks_us()';
  81. // }
  82. return [code, Blockly.Python.ORDER_ATOMIC];
  83. };
  84. /**
  85. * Code generator for the wait forever (end of program) block
  86. * Arduino code: loop { while(true); }
  87. * @param {!Blockly.Block} block Block to generate the code from.
  88. * @return {string} Completed code.
  89. */
  90. Blockly.Python['infinite_loop'] = function(block) {
  91. return 'while(true)\n';
  92. };
  93. Blockly.Python['time_chrono_setup'] = function(block) {
  94. Blockly.Python.addInclude("chrono.h", "#include <Chrono.h>\n");
  95. Blockly.Python.addDeclaration("chrono_dec", "Chrono myChrono\n");
  96. }
  97. Blockly.Python['time_chrono_reset'] = function(block) {
  98. var code = "myChrono.restart()\n";
  99. return code;
  100. }
  101. Blockly.Python['time_chrono_elapsed'] = function(block) {
  102. var code = "myChrono.elapsed()";
  103. return [code, Blockly.Python.ORDER_ATOMIC];
  104. }
  105. Blockly.Python['time_chrono_timeCheck'] = function(block) {
  106. var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC);
  107. var code = "myChrono.hasPassed(" + time + ")";
  108. return [code, Blockly.Python.ORDER_ATOMIC];
  109. }
  110. Blockly.Python['time_everySecond'] = function(block) {
  111. // var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC);
  112. // Blockly.Python.addDeclaration("everySecondState_"+time ,"int everySecondState_"+time+" = 0;")
  113. // var stack_statements = Blockly.Python.statementToCode(block, "STACK", Blockly.Python.ORDER_ATOMIC)
  114. // if (time >= 2)
  115. // var code = "if ((millis() / 1000) % " + time + " == " + (time - 2) + " && everySecondState_"+time+" == 0) {\n"+
  116. // " "+stack_statements+"\n"+
  117. // " everySecondState_"+time+" = 1\n"+
  118. // "} else if ((millis() / 1000) % " + time + " == " + (time-1) +") {\n"+
  119. // " everySecondState_"+time+" = 0\n"+
  120. // "}\n"
  121. // else {
  122. // var code = "if ((millis() / 100) % 10 == 1 && everySecondState_"+time+" == 0) {\n"+
  123. // " "+stack_statements+"\n"+
  124. // " everySecondState_"+time+" = 1\n"+
  125. // "} else if ((millis() / 100) % 10 == 2 && everySecondState_"+time+" == 1) {\n"+
  126. // " everySecondState_"+time+" = 0\n"+
  127. // "}\n"
  128. // }
  129. code = "";
  130. return code;
  131. }
  132. Blockly.Python['time_everyMilliSecond'] = function(block) {
  133. // var time = Blockly.Python.valueToCode(this, "TIME", Blockly.Python.ORDER_ATOMIC);
  134. // Blockly.Python.addDeclaration("timePeriodExecutionState_" + time, "int timePeriodExecutionState_" + time + " = 0;")
  135. // var stack_statements = Blockly.Python.statementToCode(block, "STACK", Blockly.Python.ORDER_ATOMIC)
  136. // var code = "if ((millis()) % " + time + " == " + (time - 1) + " && timePeriodExecutionState_" + time + " == 0) {\n" +
  137. // " " + stack_statements + "\n" +
  138. // " timePeriodExecutionState_" + time + " = 1\n" +
  139. // "} else if ((millis()) % " + time + " == " + 0 + ") {\n" +
  140. // " timePeriodExecutionState_" + time + " = 0\n" +
  141. // "}\n"
  142. code = "";
  143. return code;
  144. }