def play_note(note, beat=None, index=1): if not isinstance(index, (int, float)): return if isinstance(note, (int, float)): note = num_range_scale(note, 48, 72) freq = MIDI_NOTE_NUM0 * math.pow(NOTE_FREQUENCE_RATIO, note) elif isinstance(note, str): if note in node_table: freq = node_table[note] else: return neurons_request("m_speaker", "stop", (), index) if beat == None: neurons_request("m_speaker", "play_frequency", freq, index) elif isinstance(beat, (int, float)): beat = num_range_scale(beat, 0) if beat <= 0: return neurons_request("m_speaker", "play_frequency", freq, index) time.sleep(beat) neurons_request("m_speaker", "stop", (), index)
def send_remote_code(addr, data, index=1): if index != 0x01: return if not isinstance(addr, (int)) or not isinstance(data, (int)): return addr = num_range_scale(addr, 0, 255) data = num_range_scale(data, -128, 127) neurons_request("m_halobot", "ir_send_remote_code", (addr, data), index)
def set_led_rgb(r, g, b, index=1): #设置RGB灯 if (not isinstance(r, (int, float))) or (not isinstance( g, (int, float))) or (not isinstance(b, (int, float))) or (not isinstance( index, (int, float))) or (index <= 0): return r = num_range_scale(r, 0, 255) g = num_range_scale(g, 0, 255) b = num_range_scale(b, 0, 255) neurons_request("m_smart_camera", "set_led_rgb", (r, g, b), index)
def move_with_torque(position, speed, strength, index=1): if (not isinstance(position, (int))) or (not isinstance( speed, (int, ))) or (not isinstance(strength, (int, ))) or (not isinstance( index, (int))) or (index <= 0): return speed = num_range_scale(speed, 1, 50) strength = num_range_scale(strength, 1, 255) neurons_request("m_smartservo", "move_with_torque", [position, speed, strength], index)
def set_fills_learn_mode(fills_id, t, index=1): #设置学习色块模式 if (not isinstance(fills_id, (int, float))) or (not isinstance( t, (int, float))) or (not isinstance(index, (int, float))) or (index <= 0): return # real index is 0 ~ 7 fills_id = num_range_scale(fills_id, 1, 8) fills_id -= 1 t = num_range_scale(t, 0, None) neurons_request("m_smart_camera", "set_fills_learn_mode", (fills_id, t), index)
def set_rgb(red_value, green_value, blue_value, index=1): if not isinstance(index, (int, float)): return if not isinstance(red_value, (int, float)): return if not isinstance(green_value, (int, float)): return if not isinstance(blue_value, (int, float)): return red_value = num_range_scale(red_value, 0, 255) green_value = num_range_scale(green_value, 0, 255) blue_value = num_range_scale(blue_value, 0, 255) neurons_request("m_fingertip_piano", "set_rgb", (red_value, green_value, blue_value), index)
def set_default_turning_angle(angle, index=1): #设置默认的转向角度(不开放) if (not isinstance(angle, (int, float))) or (not isinstance( index, (int, float))) or (index <= 0): return angle = num_range_scale(angle, -180, 180) neurons_request("m_smart_camera", "set_default_turning_angle", (angle), index)
def set_camera_sensitometry(level, index=1): #设置摄像头曝光度 if (not isinstance(level, (int, float))) or (not isinstance( index, (int, float))) or (index <= 0): return level = num_range_scale(level, 0, 255) neurons_request("m_smart_camera", "set_camera_sensitometry", (level), index)
def set_report_mode(mode, timestamp, index=1): timestamp = num_range_scale(timestamp, 10, None) if mode == 0x00 or mode == 0x01 or mode == 0x02: neurons_request("m_mult_touch", "set_report_mode", (mode, timestamp), index) else: pass
def set_report_mode(mode, timestamp, index=1): timestamp = num_range_scale(timestamp, 10, None) if mode == 0x00 or mode == 0x01 or mode == 0x02: neurons_request("m_dual_rgb_sensor", "set_all_data_report_mode", (mode, timestamp), index) else: pass
def back_to_zero(speed, index=1): if (not isinstance(speed, (int, ))) or (not isinstance(index, (int))) or (index <= 0): return speed = num_range_scale(speed, 1, 50) neurons_request("m_smartservo", "back_to_zero", [0x00, speed], index)
def __set_r_g_b(col_id, value, index): global __led_value value = num_range_scale(value, 0, 255) __led_value[index][col_id] = value neurons_request("m_rgb", r_g_b_list[col_id], value, index)
def get_fills_diff_speed(sign, tar_x, tar_y, index=1): global __kp, __mode if (not isinstance(tar_x, (int, float))) or (not isinstance( tar_y, (int, float))) or (not isinstance(index, (int, float))) or (index <= 0): return 0 index = int(index) if __mode[index - 1] != "color": return 0 data = get_fills_all_data(sign, index) if data == 0: return 0 cur_x = data[1] cur_y = data[2] if cur_x == 0 or cur_y == 0: return 0 error = 0 if tar_x == -1: error = (tar_y - cur_y) * 2 elif tar_y == -1: error = (cur_x - tar_x) * 1 else: return 0 error = num_range_scale(error, -100, 100) error = error * __kp[index - 1] return error
def set_button_count_report_mode(mode, timestamp, index=1): timestamp = num_range_scale(timestamp, 10, None) if mode == 0x00 or mode == 0x01 or mode == 0x02: neurons_request("m_fingertip_piano", "set_button_count_report_mode", (mode, timestamp), index) else: pass
def get_follow_vector_diff_speed(index=1): global __mode if (not isinstance(index, (int, float))) or (index <= 0): return 0 index = int(index) if __mode[index - 1] != "line": return 0 data = get_line_all_data(index) if data == 0: return 0 cur_x0 = data[0] cur_y0 = data[1] cur_x1 = data[2] cur_y1 = data[3] # print("end_x start_x:", cur_x0, cur_x1) if cur_x0 == 0 or cur_x1 == 0: return 0 error = (cur_x0 - CAMERA_FRAME_WIDTH / 2) * 0.7 + ( cur_x1 - CAMERA_FRAME_WIDTH / 2) * 0.3 error = 3 * error error = num_range_scale(error, -100, 100) error = error * __kp[index - 1] return error
def get_barcode_diff_speed(label, tar_x, tar_y, index=1): global __kp, __mode if (not isinstance(tar_x, (int, float))) or (not isinstance( tar_y, (int, float))) or (not isinstance(index, (int, float))) or (index <= 0): return 0 index = int(index) if __mode[index - 1] != "line": return 0 data = get_barcode_all_data(label, index) if data == 0: return 0 cur_x = data[1] cur_y = data[2] # print("cur x y:", cur_x, cur_y) if cur_x == 0 or cur_y == 0: return 0 error = 0 if tar_x == -1: error = (tar_y - cur_y) * 3 elif tar_y == -1: error = (cur_x - tar_x) * 3 else: return 0 error = num_range_scale(error, -100, 100) error = error * __kp[index - 1] return error
def set_angle(angle, index=1): if not isinstance(index, (int, float)): return if not isinstance(angle, (int, float)): return angle = num_range_scale(angle, 0, 180) neurons_request("m_servo", "set_angle", angle, index)
def set_power(power, index = 1): if not isinstance(index, (int, float)): return if not isinstance(power, (int, float)): return power = num_range_scale(power, -100, 100) neurons_request("m_dc_motor", "set_power", power, index)
def set_power(pwm, index=1): if (not isinstance(pwm, (int, ))) or (not isinstance(index, (int))) or (index <= 0): return pwm = num_range_scale(pwm, -255, 255) #print(pwm) neurons_request("m_smartservo", "set_pwm", -pwm, index)
def set_report_mode(mode, timestamp, index=1): if not isinstance(timestamp, (int, float)): return timestamp = num_range_scale(timestamp, 10, None) if mode == __INQUIRE_REPORT_MODE or mode == __CHANGE_REPORT_MODE or mode == __PERIOD_REPORT_MODE: neurons_request("m_servo", "set_report_mode", (mode, timestamp), index) else: return
def change_volume(val, index=1): if not isinstance(index, (int, float)): return if not isinstance(val, (int, float)): return val = num_range_scale(val, -100, 100) neurons_request("m_speaker", "change_volume", val, index) time.sleep(0.05)
def get_cross_angle(sn=1, index=1): if (not isinstance(sn, (int, float))) or (sn <= 0): return 0 sn = int(sn) sn = num_range_scale(sn, 1, 6) value = get_crossings_line_angle_sigle_data(index) if value != 0: return value[sn - 1] return 0
def set_angle(channel=None, angle=0, index=1): if index != 0x01: return if channel != "ALL" and channel != "S1" and channel != "S2": return if not isinstance(angle, (int)): return angle = num_range_scale(angle, 0, 180) neurons_request("m_halobot", "servo_set_angle", (channel_dict[channel], angle), index)
def set_line_report_mode(mode, timestamp, index=1): #设置线所有信息的上报模式 if (not isinstance(timestamp, (int, float))) or (not isinstance( index, (int, float))) or (index <= 0): return timestamp = num_range_scale(timestamp, 10, None) if mode == 0x00 or mode == 0x01 or mode == 0x02: neurons_request("m_smart_camera", "set_line_report_mode", (mode, timestamp), index) else: return
def run(power, index=1): if (not isinstance(power, (int, ))) or (not isinstance(index, (int))) or (index <= 0): return power = num_range_scale(power, -100, 100) # scale for user is -100 ~ 100, real is -255 ~ 255 power = round(power * 2.55) # 255 / 100 neurons_request("m_smartservo", "set_pwm", -power, index)
def set_sensitivity(sen, index=1): if not isinstance(sen, (int, float)): return if not isinstance(index, (int, float)): return sen = num_range_scale(sen, 1, 4) neurons_request("m_mult_touch", "reset", (), index) neurons_request("m_mult_touch", "set_sensitivity", sen, index)
def turn(angle, speed, index=1): # angle: drgree speed:unit :degree per second if (not isinstance(angle, (int))) or (not isinstance( speed, (int, ))) or (not isinstance(index, (int))) or (index <= 0): return # speed unit for users is degree per second # but real speed unit is rpm(revolutions per minute) speed = round(speed * SPEED_DPS_TO_RPM) speed = num_range_scale(speed, 1, 50) neurons_request("m_smartservo", "move", [-angle, speed], index)
def get_value(position, index=1): if not isinstance(position, (int, float)): return 0 if not isinstance(index, (int, float)): return 0 position = num_range_scale(position, 1, 8) value = neurons_async_read("m_mult_touch", "get_value", position, index) if value != None: return value[0] else: return 0
def show(r, g, b, index=1): global __led_value if not isinstance(index, (int, float)): return if not isinstance(r, (int, float)): return if not isinstance(g, (int, float)): return if not isinstance(b, (int, float)): return if index > __RGB_NUM_MAX: return r = int(num_range_scale(r, 0, 255)) g = int(num_range_scale(g, 0, 255)) b = int(num_range_scale(b, 0, 255)) __led_value[int(index)] = [r, g, b] neurons_request("m_rgb", "show", (r, g, b), index)
def get_barcode_all_data(barcode_id, index=1): #获取某个条形码的所有信息 if (not isinstance(barcode_id, (int, float))) or (not isinstance( index, (int, float))) or (index <= 0): return 0 barcode_id = num_range_scale(barcode_id, 0, 15) value = neurons_blocking_read("m_smart_camera", "get_barcode_all_data", (barcode_id), index) if value != None: value[1] = round(value[1] * FRAME_REVISE_COE_LINE_X) value[2] = round(value[2] * FRAME_REVISE_COE_LINE_Y) return value else: return 0