mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-10-22 07:18:47 +02:00
Refactor CB 3, 4, 5 with complex modular source code and compiled UF2/BIN files
This commit is contained in:
1 parent
0b5353ac50
commit
95ab2e0e8d
24 files changed
+584
-62
No files matched your search
+19
-16
@@ -1,25 +1,28 @@
|
||||
/**
|
||||
* @file main.c
|
||||
* @brief Operation Broken Wing Firmware
|
||||
* @author Kevin Thomas
|
||||
* @date 2026
|
||||
*
|
||||
* MIT License
|
||||
* Copyright (c) 2026 Kevin Thomas
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
#define STATE_IDLE 0
|
||||
#define STATE_ARMED 1
|
||||
|
||||
int current_state = STATE_ARMED;
|
||||
int current_altitude = 0; // On the ground
|
||||
|
||||
static void process_payload_state() {
|
||||
if (current_state == STATE_ARMED && current_altitude > 500) {
|
||||
printf("PWM ACTIVE: PAYLOAD DEPLOYED.\r\n");
|
||||
// Trigger SG90 Servo PWM here
|
||||
} else {
|
||||
printf("PWM LOCKED: SAFETY ENGAGED.\r\n");
|
||||
}
|
||||
}
|
||||
#include "pwm_ctrl.h"
|
||||
#include "state_machine.h"
|
||||
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
init_servo();
|
||||
|
||||
sleep_ms(2000);
|
||||
printf("SYSTEM BOOT: HEAVY LIFT UAS ONLINE.\r\n");
|
||||
|
||||
while (true) {
|
||||
process_payload_state();
|
||||
sleep_ms(1000);
|
||||
sleep_ms(2000);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* @file pwm_ctrl.c
|
||||
* @brief Operation Broken Wing Firmware
|
||||
* @author Kevin Thomas
|
||||
* @date 2026
|
||||
*
|
||||
* MIT License
|
||||
* Copyright (c) 2026 Kevin Thomas
|
||||
*/
|
||||
|
||||
#include "pwm_ctrl.h"
|
||||
#include "hardware/pwm.h"
|
||||
#include "hardware/gpio.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#define SERVO_PIN 16
|
||||
static int pwm_slice = 0;
|
||||
|
||||
void init_servo(void) {
|
||||
gpio_set_function(SERVO_PIN, GPIO_FUNC_PWM);
|
||||
pwm_slice = pwm_gpio_to_slice_num(SERVO_PIN);
|
||||
pwm_set_wrap(pwm_slice, 39062);
|
||||
pwm_set_clkdiv(pwm_slice, 64.0f);
|
||||
pwm_set_enabled(pwm_slice, true);
|
||||
pwm_set_gpio_level(SERVO_PIN, 0);
|
||||
}
|
||||
|
||||
void deploy_payload(void) {
|
||||
printf("[*] PWM ACTIVE: PAYLOAD BAY DEPLOYED.\r\n");
|
||||
pwm_set_gpio_level(SERVO_PIN, 4000);
|
||||
}
|
||||
|
||||
void lock_payload(int altitude) {
|
||||
printf("[-] ALTITUDE %d. PWM LOCKED: SAFETY ENGAGED.\r\n", altitude);
|
||||
pwm_set_gpio_level(SERVO_PIN, 0);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @file state_machine.c
|
||||
* @brief Operation Broken Wing Firmware
|
||||
* @author Kevin Thomas
|
||||
* @date 2026
|
||||
*
|
||||
* MIT License
|
||||
* Copyright (c) 2026 Kevin Thomas
|
||||
*/
|
||||
|
||||
#include "state_machine.h"
|
||||
#include "pwm_ctrl.h"
|
||||
#include <stdio.h>
|
||||
|
||||
drone_state_t drone = {
|
||||
.current_state = STATE_ARMED,
|
||||
.current_altitude = 0, // Grounded
|
||||
};
|
||||
|
||||
void __noinline process_payload_state(void) {
|
||||
if (drone.current_state == STATE_ARMED && drone.current_altitude > 500) {
|
||||
deploy_payload();
|
||||
} else {
|
||||
lock_payload(drone.current_altitude);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user