![](images/drone_hat_1.gif)
1. power up --> 4.5V bridge with 2N2222 transistor
2. up (connect) --> 3.3V bridge w/ 2N2222
3. down (connect) --> mechanical relay (5V) to gnd toggle
4. lower button (level) --> 3.3V bridge w/ 2N2222
5. upper button (launch) --> 3.3V bridge w/ 2N2222
6. upper button (land)
![](images/drone_hat_2.jpg)
![](images/drone_hat_1.jpg)
- // pkvi
- #include <Servo.h>
- #include "FastLED.h"
- Servo doors;
- int closed = 5;
- int openned = 40;
- #define NUM_LEDS 60
- CRGB leds[NUM_LEDS];
- #define PIN 4
- const int up = 3; // relay
- const int launch = 6;
- const int button = 7;
- const int level = 8;
- const int down = 10;
- const int power = 12;
- int buttonstate;
- int flystate = 0;
- void setup() {
- FastLED.addLeds<WS2812, PIN, GRB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
- doors.attach(11);
- doors.write(closed);
- pinMode(up, OUTPUT);
- pinMode(launch, OUTPUT);
- pinMode(button, INPUT);
- pinMode(level, OUTPUT);
- pinMode(down, OUTPUT);
- pinMode(power, OUTPUT);
- digitalWrite(up, LOW);
- digitalWrite(launch, LOW);
- digitalWrite(level, LOW);
- digitalWrite(down, LOW);
- digitalWrite(power, LOW);
- delay(500);
- }
- void loop() {
- buttonstate = digitalRead(button);
- if (buttonstate == HIGH) {
- if (flystate == 0) {
- launchit();
- } else if (flystate == 1) {
- land();
- } else {
- // error
- }
- } else {
- Sparkle(0x00, 0x00, 0xff, 0);
- }
- }
- void launchit() {
- doors.write(openned);
- delay(1000);
- doors.write(closed);
- digitalWrite(power, HIGH);
- delay(300);
- digitalWrite(power, LOW);
- delay(300);
- digitalWrite(up, HIGH);
- delay(750);
- digitalWrite(up, LOW);
- delay(300);
- digitalWrite(down, HIGH);
- delay(300);
- digitalWrite(down, LOW);
- delay(300);
- digitalWrite(launch, HIGH);
- delay(300);
- digitalWrite(launch, LOW);
- flystate = 1;
- }
- void land () {
- digitalWrite(launch, HIGH);
- delay(300);
- digitalWrite(launch, LOW);
- delay(300);
- digitalWrite(power, HIGH);
- delay(1500);
- digitalWrite(power, LOW);
- flystate = 0;
- }
- void Sparkle(byte red, byte green, byte blue, int SpeedDelay) {
- int Pixel = random(NUM_LEDS);
- setPixel(Pixel, red, green, blue);
- showStrip();
- delay(SpeedDelay);
- setPixel(Pixel, 0, 0, 0);
- }
- void showStrip() {
- #ifdef ADAFRUIT_NEOPIXEL_H
- // NeoPixel
- strip.show();
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- // FastLED
- FastLED.show();
- #endif
- }
- void setPixel(int Pixel, byte red, byte green, byte blue) {
- #ifdef ADAFRUIT_NEOPIXEL_H
- // NeoPixel
- strip.setPixelColor(Pixel, strip.Color(red, green, blue));
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- // FastLED
- leds[Pixel].r = red;
- leds[Pixel].g = green;
- leds[Pixel].b = blue;
- #endif
- }
- void setAll(byte red, byte green, byte blue) {
- for (int i = 0; i < NUM_LEDS; i++ ) {
- setPixel(i, red, green, blue);
- }
- showStrip();
- }