kopia lustrzana https://github.com/pimoroni/pimoroni-pico
				
				
				
			
		
			
	
	
		
			61 wiersze
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
		
		
			
		
	
	
			61 wiersze
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
| 
								 | 
							
								#include <cstdio>
							 | 
						||
| 
								 | 
							
								#include "pico/stdlib.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "motor2040.hpp"
							 | 
						||
| 
								 | 
							
								#include "button.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								Demonstrates how to read the angles of Motor 2040's four encoders.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Press "Boot" to exit the program.
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								using namespace motor;
							 | 
						||
| 
								 | 
							
								using namespace encoder;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// The gear ratio of the motor
							 | 
						||
| 
								 | 
							
								constexpr float GEAR_RATIO = 50.0f;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// The counts per revolution of the motor's output shaft
							 | 
						||
| 
								 | 
							
								constexpr float COUNTS_PER_REV = MMME_CPR * GEAR_RATIO;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Create an array of encoder pointers
							 | 
						||
| 
								 | 
							
								const pin_pair encoder_pins[] = {motor2040::ENCODER_A, motor2040::ENCODER_B,
							 | 
						||
| 
								 | 
							
								                                 motor2040::ENCODER_C, motor2040::ENCODER_D};
							 | 
						||
| 
								 | 
							
								const char* ENCODER_NAMES[] = {"A", "B", "C", "D"};
							 | 
						||
| 
								 | 
							
								const uint NUM_ENCODERS = count_of(encoder_pins);
							 | 
						||
| 
								 | 
							
								Encoder *encoders[NUM_ENCODERS];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Create the user button
							 | 
						||
| 
								 | 
							
								Button user_sw(motor2040::USER_SW);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								int main() {
							 | 
						||
| 
								 | 
							
								  stdio_init_all();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Fill the array of motors, and initialise them. Up to 8 motors can be created
							 | 
						||
| 
								 | 
							
								  for(auto e = 0u; e < NUM_ENCODERS; e++) {
							 | 
						||
| 
								 | 
							
								    encoders[e] = new Encoder(pio0, e, encoder_pins[e], PIN_UNUSED, NORMAL_DIR, COUNTS_PER_REV, true);
							 | 
						||
| 
								 | 
							
								    encoders[e]->init();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Uncomment the below lines to reverse
							 | 
						||
| 
								 | 
							
								  // the counting direction of an encoder
							 | 
						||
| 
								 | 
							
								  // encoders[0].direction(REVERSED_DIR);
							 | 
						||
| 
								 | 
							
								  // encoders[1].direction(REVERSED_DIR);
							 | 
						||
| 
								 | 
							
								  // encoders[2].direction(REVERSED_DIR);
							 | 
						||
| 
								 | 
							
								  // encoders[3].direction(REVERSED_DIR);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Read the encoders until the user button is pressed
							 | 
						||
| 
								 | 
							
								  while(!user_sw.raw()) {
							 | 
						||
| 
								 | 
							
								    // Print out the angle of each encoder
							 | 
						||
| 
								 | 
							
								    for(auto e = 0u; e < NUM_ENCODERS; e++) {
							 | 
						||
| 
								 | 
							
								      printf("%s = %f, ", ENCODER_NAMES[e], encoders[e]->degrees());
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    printf("\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    sleep_ms(100);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |