top of page
Search

Week of 11/21-11/24

  • vvaldezmelgar
  • Jan 24, 2025
  • 4 min read

This week was major progress for the Hunter's Journal project. We didn't have school on Monday due to MLK. Jr day, and I was out sick, so I only had a three day week. Same as last week, I got the OLED code finally finished. The changed the previously planned animated sprite to lines that go around the screen sorta looking like a radio scanner.


That took most of the week as I had to learn the display.drawLine code which takes some time to learn. I really don't have much to talk about this week because that was really all I did this week. I was unfortunately unable to take any pictures this week as well because I was out sick on Thursday that that's the day usually take the blog pictures.

I started working the PCB Schematic wednesday and I plan on finishing it by the end of the week because that shouldn't take me long.


Final Hunter's Journal Code (Holds both OLED and LED code)

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

#include <Adafruit_NeoPixel.h>

#ifdef AVR

#include <avr/power.h> // Required for 16 MHz Adafruit Trinket

#endif


#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels

#define WAIT 400 // Time between a new set of animations

#define STATE_BASE 0 //The starting state

#define STATE_ONE 1 //The first state

#define STATE_TWO 2 //The second state

#define STATE_THREE 3 //The third state

#define NUMPIXELS 8 //Amount of NeoPixel attached to the Strip

#define PIN 6 //The pin connected to the NeoPixel

#define BUTTONPIN 7 //The pin connected to the button

#define DELAYVAL 300 //Time (in milliseconds) to pause between things

#define PAUSE 2000 //Time between OLED display changes

#define REST 800 //Amount time between the inner display changes

#define Scan 250 //Amount of time between the lines changing

#define MODE 3 //The amount of different cases and modes

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)fsssdsd

#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int PRESSCOUNTER = 0; //The amount of time the button is pressed

#define NUMFLAKES 8 // Number of snowflakes in the animation example

#define LOGO_HEIGHT 20

#define LOGO_WIDTH 20

static const unsigned char PROGMEM logo_bmp[] = {};


void setup() {

  Serial.begin(9600);

  pinMode(PIN, OUTPUT);

  pinMode(BUTTONPIN, INPUT);

  pixels.begin(); //INITIALIZE the NeoPixel (REQUIRED)

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally

  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {

    Serial.println(F("SSD1306 allocation failed"));

    for (;;)

      ; // Don't proceed, loop forever

  }

  display.display();

}


void loop() {

  pixels.clear(); //sets all the pixels to 'off'


  if (digitalRead(7) == HIGH) {

    PRESSCOUNTER++;

    delay(DELAYVAL);

  }


  Serial.println(PRESSCOUNTER);


  if (PRESSCOUNTER > MODE) {

    PRESSCOUNTER = 0;

  }


  switch (PRESSCOUNTER) { //choose what to display based on the PRESSCOUNTER value


    case STATE_BASE:

      for (int i = 0; i < NUMPIXELS; i++) {

        pixels.setPixelColor(i, pixels.Color(13, 228, 20)); //colors go from 0,0,0 up to 255,255,255

        pixels.show(); //Sends the updated data to the Strip

      }

      Scanner();

      break;


    case STATE_ONE:

      for (int i = 0; i < NUMPIXELS; i++) {

        pixels.setPixelColor(i, pixels.Color(0, 71, 71));

        pixels.show();

      }

      Drawcircle();

      delay(REST);

      Fillcircle();

      delay(REST);

      break;


    case STATE_TWO:

      for (int i = 0; i < NUMPIXELS; i++) {

        pixels.setPixelColor(i, pixels.Color(191, 64, 191));

        pixels.show();

      }

      Drawtriangle();

      delay(REST);

      Filltriangle();

      delay(REST);

      break;


    case STATE_THREE:

      for (int i = 0; i < NUMPIXELS; i++) {

        pixels.setPixelColor(i, pixels.Color(248, 131, 121));

        pixels.show();

      }

      Drawrect();

      delay(REST);

      Fillrect();

      delay(REST);

      break;

  }

}


void Drawcircle(void) {

  display.clearDisplay();

  for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 2) {


    display.drawCircle(display.width() / 2, display.height() / 2, i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(PAUSE);

}


void Fillcircle(void) {

 display.clearDisplay();

  for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 3) {


    // The INVERSE color is used so circles alternate white/black

    display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE);

    display.display(); // Update screen with each newly-drawn circle

    delay(1);

  }

}


void Drawtriangle(void) {

  display.clearDisplay();

  for (int16_t i = 0; i < max(display.width(), display.height()) / 2; i += 5) {


    display.drawTriangle(

      display.width() / 2, display.height() / 2 - i,

      display.width() / 2 - i, display.height() / 2 + i

      display.width() / 2 + i, display.height() / 2 + i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(PAUSE);

}


void Filltriangle(void) {

  display.clearDisplay();

  for (int16_t i = max(display.width(), display.height()) / 2; i > 0; i -= 5) {


    // The INVERSE color is used so triangles alternate white/black

    display.fillTriangle(

      display.width() / 2, display.height() / 2 - i,

      display.width() / 2 - i, display.height() / 2 + i,

      display.width() / 2 + i, display.height() / 2 + i, SSD1306_INVERSE);

    display.display();

    delay(1);

  }

}


void Drawrect(void) {

  display.clearDisplay();


  for (int16_t i = 0; i < display.height() / 2; i += 2) {

    display.drawRect(i, i, display.width() - 2 i, display.height() - 2 i, SSD1306_WHITE);

    display.display(); // Update screen with each newly-drawn rectangle

    delay(1);

  }

  delay(PAUSE);

}


void Fillrect(void) {

  display.clearDisplay();


  for (int16_t i = 0; i < display.height() / 2; i += 3) {

    // The INVERSE color is used so rectangles alternate white/black

    display.fillRect(i, i, display.width() - i 2, display.height() - i 2, SSD1306_INVERSE);

    display.display(); // Update screen with each newly-drawn rectangle

    delay(1);

  }

}


void Scanner() {

  int16_t i;

  display.clearDisplay(); // Clear display buffer


  for (i = 0; i < display.width(); i += 4) {

    display.drawLine(0, 0, i, display.height() - 1, SSD1306_WHITE);

    display.display(); // Update screen with each newly-drawn line

    delay(1);

  }

  for (i = 0; i < display.height(); i += 4) {

    display.drawLine(0, 0, display.width() - 1, i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(Scan);


  display.clearDisplay();


  for (i = 0; i < display.width(); i += 4) {

    display.drawLine(0, display.height() - 1, i, 0, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  for (i = display.height() - 1; i >= 0; i -= 4) {

    display.drawLine(0, display.height() - 1, display.width() - 1, i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(Scan);


  display.clearDisplay();


  for (i = display.width() - 1; i >= 0; i -= 4) {

    display.drawLine(display.width() - 1, display.height() - 1, i, 0, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  for (i = display.height() - 1; i >= 0; i -= 4) {

    display.drawLine(display.width() - 1, display.height() - 1, 0, i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(Scan);


  display.clearDisplay();


  for (i = 0; i < display.height(); i += 4) {

    display.drawLine(display.width() - 1, 0, 0, i, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  for (i = 0; i < display.width(); i += 4) {

    display.drawLine(display.width() - 1, 0, i, display.height() - 1, SSD1306_WHITE);

    display.display();

    delay(1);

  }

  delay(Scan);

}


 
 
 

Recent Posts

See All
Reworking Gears (Week of 3/24)

Hello Everyone! This week was fairly normal in the Shop. I was only out on Monday due to me coming back from a family trip over the weekend. I mainly worked on reworking the gears this week and I was

 
 
 
Shorten Motor Work (week of 3/17)

Hello all! This week in shop for me was very short, as I was only in for like a day and a half. We didn't have school Friday and I was sick Monday, so I didn't much time to do stuff but I was able to

 
 
 
Gear Prints (Week of 3/9)

Hello Y'all! This was a mix between working on side projects and the mechanical clock. I've moved onto the next big part of the clock this week, so we'll see how long this step takes me. I don't have

 
 
 

Comments


bottom of page