UAB3QWX6I6PF4BRKRV6C7QKQMEYESRIALOFSOP3P5NAX2SHXABTQC IPLSYOCQIAQLB6HXL6YBJ5ZKKESCSRO7S7P5SF6I367M6HEJJRNQC QV2QX6JBHGTRCSTNG4VEW6TMX6ACGBTBUBAX6GJ6J4O4OTJBFA2QC TXSGLYOVYQ77EG23PAVW62MBJRHS2WTVAVNQ3NYVBDGKNMSYS7DAC RIKRRTK5ZNVTCDJBS2O54P36TSQXENEZ2DYXJ3WPFW7ZQ6CF4DMQC GSIKHOXLB6QJELAYIGDFLRIG6DRIQFMZG6ZCQ54BNB7FIDBVI5PAC 6GJR2V3AYCEJWLBP2KMTWUNO332MG5OFEUNPCNSSNF5BJKXA3VTQC O7V7LAFPWUJJAVSZ67LQWJWX6GKEG6UOGI7FCJZYC7KK7KFZ6GZAC const pin_conf = pico.pins.GlobalConfiguration{.GPIO14 = .{ .name = "led", .direction = .out },.GPIO16 = .{ .name = "mot2", .direction = .out },.GPIO17 = .{ .name = "mot1", .direction = .out },.GPIO18 = .{ .name = "speed", .function = .PWM1_A },.GPIO26 = .{ .name = "m1emf", .function = .ADC0 },.GPIO27 = .{ .name = "m2emf", .function = .ADC1 },};const pins = pin_conf.pins();
{ // Motor stuffconst PWM_WRAP = 1000;const EMF_ARRAY_SIZE = 100;const EMF_CUTOUT = 15;pins.speed.slice().set_wrap(PWM_WRAP);pins.speed.slice().enable();// stoppins.mot1.put(1);pins.mot2.put(1);std.log.debug("Motor stopped for {d} ms", .{1000});pico.time.sleep_ms(1000);// startvar level: usize = PWM_WRAP / 2;while (level < PWM_WRAP) : (level += 50) {pins.speed.set_level(@truncate(level));pins.mot1.put(1);pins.mot2.put(0);pico.time.sleep_ms(2000);{ // Measure Back-EMF// Switch to free running modepins.mot1.put(0);pins.mot2.put(0);pico.time.sleep_us(100);// Prepare ADCpico.adc.select_input(pins.m1emf);pico.adc.apply(.{.sample_frequency = null,.round_robin = null,.temp_sensor_enabled = false,.fifo = null,}); // apply calls enable// Actual measurringpico.adc.start(.free_running);var emfs: [EMF_ARRAY_SIZE]u12 = undefined;for (0..EMF_ARRAY_SIZE) |i| {emfs[i] = try pico.adc.read_result();}
// preamblefor (0..10) |_| {DDC.Test.sendOne();
// Measuring done, switch the motor back onpico.adc.set_enabled(false);pins.mot1.put(1);pins.mot2.put(0);// Sort results, so we can cut out the low and high partstd.sort.pdq(u12, &emfs, {}, less);// Calculate average EMFvar sum: u16 = 0;for (EMF_CUTOUT..EMF_ARRAY_SIZE - EMF_CUTOUT) |i| {sum += emfs[i];}const m1emf = sum / (EMF_ARRAY_SIZE - 2 * EMF_CUTOUT);std.log.debug("M1EMF: {d} -> {any}", .{ m1emf, emfs[15 .. emfs.len - 15] });}pico.time.sleep_ms(1000);}// pins.mot1.put(1);// pins.mot2.put(0);// pico.time.sleep_ms(5000);
// addressDDC.Test.sendByte(0b00110111);DDC.Test.sendZero();DDC.Test.sendByte(0b01110100);DDC.Test.sendZero();DDC.Test.sendByte(0b01000011);DDC.Test.sendOne();
// { // DDC testing// // preamble// for (0..10) |_| {// DDC.Test.sendOne();// }// DDC.Test.sendZero();
if (ddc.packets.readItem()) |packet| {std.log.debug("packet address: {d} speed: {} instruction: {}",.{ packet.address, packet.speed(), packet.instruction },);}
// // address// DDC.Test.sendByte(0b00110111);// DDC.Test.sendZero();// DDC.Test.sendByte(0b01110100);// DDC.Test.sendZero();// DDC.Test.sendByte(0b01000011);// DDC.Test.sendOne();// if (ddc.packets.readItem()) |packet| {// std.log.debug(// "packet address: {d} speed: {} instruction: {}",// .{ packet.address, packet.speed(), packet.instruction },// );// }
pico.multicore.fifo.write_blocking(12);pico.time.sleep_ms(5000);pico.multicore.fifo.write_blocking(20);pico.time.sleep_ms(5000);
// pico.multicore.fifo.write_blocking(12);// pico.time.sleep_ms(5000);// pico.multicore.fifo.write_blocking(20);// pico.time.sleep_ms(5000);// }