kopia lustrzana https://github.com/pimoroni/pimoroni-pico
				
				
				
			
		
			
				
	
	
		
			85 wiersze
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			85 wiersze
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
#include <stdio.h>
 | 
						|
#include "pico/stdlib.h"
 | 
						|
#include <string>
 | 
						|
 | 
						|
// Uncomment the below line to switch from the PMW3901 to the PAA5100
 | 
						|
//#define USE_PAA5100
 | 
						|
 | 
						|
#ifndef USE_PAA5100
 | 
						|
  #include "breakout_pmw3901.hpp"
 | 
						|
#else
 | 
						|
  #include "breakout_paa5100.hpp"
 | 
						|
#endif
 | 
						|
 | 
						|
using namespace pimoroni;
 | 
						|
 | 
						|
#ifndef USE_PAA5100
 | 
						|
  typedef BreakoutPMW3901 FlowSensor;
 | 
						|
#else
 | 
						|
  typedef BreakoutPAA5100 FlowSensor;
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
 | 
						|
FlowSensor flo(BG_SPI_FRONT);
 | 
						|
FlowSensor::Degrees rotation = FlowSensor::DEGREES_0;
 | 
						|
const uint8_t SIZE = FlowSensor::FRAME_SIZE;
 | 
						|
uint8_t data[FlowSensor::FRAME_BYTES];
 | 
						|
 | 
						|
std::string value_to_char(uint8_t value) {
 | 
						|
  const std::string charmap = " .:-=+*#%@";
 | 
						|
  float val = (float)value / 255.0f;
 | 
						|
  val *= charmap.length() - 1;
 | 
						|
  std::string chosen_char = charmap.substr((uint8_t)val, 1);
 | 
						|
  return chosen_char.append(chosen_char);  // Double chars to - sort of - correct aspect ratio
 | 
						|
}
 | 
						|
 | 
						|
int main() {
 | 
						|
  stdio_init_all();
 | 
						|
 | 
						|
  flo.init();
 | 
						|
  flo.set_rotation(rotation);
 | 
						|
 | 
						|
  uint8_t offset = 0;
 | 
						|
  uint8_t value = 0;
 | 
						|
  
 | 
						|
  while(true) {
 | 
						|
    printf("Capturing...\n");
 | 
						|
    uint16_t data_size = 0;
 | 
						|
    if(flo.frame_capture(data, data_size)) {
 | 
						|
      for(uint8_t y = 0; y < SIZE; y++) {
 | 
						|
        if(rotation == FlowSensor::DEGREES_180 || rotation == FlowSensor::DEGREES_270)
 | 
						|
          y = SIZE - y - 1;
 | 
						|
 | 
						|
        for(uint8_t x = 0; x < SIZE; x++) {
 | 
						|
          if(rotation == FlowSensor::DEGREES_180 || rotation == FlowSensor::DEGREES_90)
 | 
						|
            x = SIZE - x - 1;
 | 
						|
 | 
						|
          if(rotation == FlowSensor::DEGREES_90 || rotation == FlowSensor::DEGREES_270)
 | 
						|
            offset = (x * 35) + y;
 | 
						|
          else
 | 
						|
            offset = (y * 35) + x;
 | 
						|
 | 
						|
          value = data[offset];
 | 
						|
          printf("%s", value_to_char(value).c_str());
 | 
						|
        }
 | 
						|
        printf("\n");
 | 
						|
      }
 | 
						|
    }
 | 
						|
    else {
 | 
						|
      printf("Capture failed. %d bytes received, of %d. Recapturing in ", data_size, FlowSensor::FRAME_BYTES);
 | 
						|
    }
 | 
						|
    printf("5...\n");
 | 
						|
    sleep_ms(1000);
 | 
						|
    printf("4...\n");
 | 
						|
    sleep_ms(1000);
 | 
						|
    printf("3...\n");
 | 
						|
    sleep_ms(1000);
 | 
						|
    printf("2...\n");
 | 
						|
    sleep_ms(1000);
 | 
						|
    printf("Get Ready!\n");
 | 
						|
    sleep_ms(1000);
 | 
						|
  };
 | 
						|
  return 0;
 | 
						|
}
 |