increase calibration resolution & make it configurable, cleanup
This commit is contained in:
parent
0e2400a47c
commit
77e8b7aeda
1 changed files with 17 additions and 10 deletions
|
@ -11,16 +11,25 @@
|
|||
#define u16 uint16_t
|
||||
#define u8 uint8_t
|
||||
|
||||
// total calibration time. You must manually rotate the sensor around in this time,
|
||||
// so that every bit gets to read a high and low value
|
||||
#define CALIBRATION_MS 3000
|
||||
// milliseconds per measurement in calibration mode
|
||||
#define CALIBRATION_RESOLUTION 5
|
||||
|
||||
char ssid[] = CONFIG_WIFI_SSID;
|
||||
char pass[] = CONFIG_WIFI_PASSWORD;
|
||||
|
||||
const ip_addr_t SERVER_IP = CONFIG_SERVER_IP;
|
||||
#define SERVER_PORT CONFIG_SERVER_PORT
|
||||
struct tcp_pcb *tcp_controller;
|
||||
|
||||
#define SET_LED(state) cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, state)
|
||||
|
||||
struct tcp_pcb *tcp_controller;
|
||||
// increasing resolution is not possible without more components and logic, as the pico only has 3 analog inputs
|
||||
// (you'd also need to make the encoder pattern bigger etc)
|
||||
#define ENCODER_BITS 3
|
||||
|
||||
u8 rotary_encoder_directon;
|
||||
u8 rotary_encoder_bits;
|
||||
u8 rotary_encoder_bit[ENCODER_BITS];
|
||||
|
@ -31,7 +40,6 @@ u16 rotary_encoder_high[ENCODER_BITS];
|
|||
u16 rotary_encoder_low[ENCODER_BITS];
|
||||
// static const u32 encoder_adc_pins[ENCODER_BITS] = {26, 27, 28};
|
||||
|
||||
|
||||
void update_raw_values() {
|
||||
for (int b = 0; b < ENCODER_BITS; b++) {
|
||||
adc_select_input(b);
|
||||
|
@ -44,7 +52,7 @@ void calibrate_brightness() {
|
|||
rotary_encoder_min[b] = 0xffff;
|
||||
rotary_encoder_max[b] = 0;
|
||||
}
|
||||
for (int i = 0; i < 300; i++) {
|
||||
for (int i = 0; i < CALIBRATION_MS / CALIBRATION_RESOLUTION; i++) {
|
||||
SET_LED(i & 2);
|
||||
update_raw_values();
|
||||
for (int b = 0; b < ENCODER_BITS; b++) {
|
||||
|
@ -53,7 +61,7 @@ void calibrate_brightness() {
|
|||
else if (rotary_encoder_raw[b] < rotary_encoder_min[b])
|
||||
rotary_encoder_min[b] = rotary_encoder_raw[b];
|
||||
}
|
||||
sleep_ms(25);
|
||||
sleep_ms(CALIBRATION_RESOLUTION);
|
||||
}
|
||||
for (int b = 0; b < ENCODER_BITS; b++) {
|
||||
u16 diff = rotary_encoder_max[b] - rotary_encoder_min[b];
|
||||
|
@ -104,10 +112,10 @@ void ensure_server_connection() {
|
|||
|
||||
void send_data() {
|
||||
ensure_server_connection();
|
||||
u8 buf[] = "direction: X=X\n";
|
||||
buf[11] = rotary_encoder_bits + '0';
|
||||
buf[13] = rotary_encoder_directon + '0';
|
||||
int err = tcp_write(tcp_controller, buf, 15, 0);
|
||||
u8 buf[] = "direction: X\n";
|
||||
// buf[11] = rotary_encoder_bits + '0';
|
||||
buf[11] = rotary_encoder_directon + '0';
|
||||
int err = tcp_write(tcp_controller, buf, 13, 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -138,13 +146,12 @@ int main() {
|
|||
|
||||
tcp_controller = tcp_new_ip_type(IPADDR_TYPE_V4);
|
||||
ensure_server_connection();
|
||||
tcp_write(tcp_controller, "be gay do crime :3\n", 19, 0);
|
||||
tcp_write(tcp_controller, "hello server :3\n", 19, 0);
|
||||
SET_LED(1);
|
||||
sleep_ms(200);
|
||||
update_raw_values();
|
||||
SET_LED(0);
|
||||
|
||||
|
||||
// tcp_controller->state
|
||||
calibrate_brightness();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue