kopia lustrzana https://github.com/pimoroni/pimoroni-pico
				
				
				
			
		
			
				
	
	
		
			85 wiersze
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			85 wiersze
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
| #pragma once
 | |
| 
 | |
| #include "hardware/i2c.h"
 | |
| #include "hardware/gpio.h"
 | |
| #include "common/pimoroni_i2c.hpp"
 | |
| 
 | |
| namespace pimoroni {
 | |
| 
 | |
|   class Trackball {
 | |
|     //--------------------------------------------------
 | |
|     // Constants
 | |
|     //--------------------------------------------------
 | |
|   public:
 | |
|     static const uint8_t DEFAULT_I2C_ADDRESS        = 0x0A;
 | |
|     static const uint8_t I2C_ADDRESS_ALTERNATIVE    = 0x0B;
 | |
|     static const uint32_t DEFAULT_TIMEOUT           = 5;
 | |
| 
 | |
|   private:
 | |
|     static const uint16_t CHIP_ID = 0xBA11;
 | |
|     static const uint8_t VERSION = 1;
 | |
| 
 | |
| 
 | |
|     //--------------------------------------------------
 | |
|     // Substructures
 | |
|     //--------------------------------------------------
 | |
|   public:
 | |
|     struct State {
 | |
|       uint8_t left;
 | |
|       uint8_t right;
 | |
|       uint8_t up;
 | |
|       uint8_t down;
 | |
|       bool sw_changed;
 | |
|       bool sw_pressed;
 | |
|     };
 | |
| 
 | |
| 
 | |
|     //--------------------------------------------------
 | |
|     // Variables
 | |
|     //--------------------------------------------------
 | |
|   private:
 | |
|     I2C *i2c;
 | |
|     int8_t address      = DEFAULT_I2C_ADDRESS;
 | |
|     uint interrupt      = PIN_UNUSED;
 | |
|     uint32_t timeout    = DEFAULT_TIMEOUT;
 | |
| 
 | |
| 
 | |
|     //--------------------------------------------------
 | |
|     // Constructors/Destructor
 | |
|     //--------------------------------------------------
 | |
|   public:
 | |
|     Trackball(uint8_t address = DEFAULT_I2C_ADDRESS) : i2c(new I2C()), address(address) {};
 | |
| 
 | |
|     Trackball(I2C *i2c, uint8_t address = DEFAULT_I2C_ADDRESS, uint interrupt = PIN_UNUSED, uint32_t timeout = DEFAULT_TIMEOUT) : i2c(i2c), address(address), interrupt(interrupt) {}
 | |
| 
 | |
|     //--------------------------------------------------
 | |
|     // Methods
 | |
|     //--------------------------------------------------
 | |
|   public: 
 | |
|     bool init();
 | |
| 
 | |
|     i2c_inst_t* get_i2c() const;
 | |
|     int get_address() const;
 | |
|     int get_sda() const;
 | |
|     int get_scl() const;
 | |
|     int get_int() const;
 | |
| 
 | |
|     void change_address(uint8_t new_address);
 | |
|         
 | |
|     void enable_interrupt(bool use_interrupt = true);
 | |
|     bool get_interrupt();
 | |
|     void set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w);
 | |
|     void set_red(uint8_t value);
 | |
|     void set_green(uint8_t value);
 | |
|     void set_blue(uint8_t value);
 | |
|     void set_white(uint8_t value);
 | |
|     State read();
 | |
| 
 | |
|   private:
 | |
|     void wait_for_flash();
 | |
| 
 | |
|     uint32_t millis();
 | |
|   };
 | |
| 
 | |
| }
 |