The discussion of the Alien series of films and the props used in them is the aim, but if it's got Big Bugs and Big Guns, then they are welcome too!





Post new topic Reply to topic  [ 45 posts ]  Go to page Previous  1, 2
Author Message
 Post subject:
PostPosted: Sat Feb 04, 2023 8:35 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, so I had to redo the geometry and thought, why not make it screen size agnostic?
First you have to run the width and heigh calculations based off of a 320 x 240 screen
Then run that decimal into a fraction.
I used a converter here to save some time:
https://www.calculatorsoup.com/calculat ... ulator.php

Now the key is on each function you have to call up and get the height and width and store it in an integer variable.
int myHeight = tft.height();
int myWidth = tft.width();

Then the following lines are going to get replaced:

tft.drawLine(10, 10, 240, 160, GREEN);
tft.drawLine(240, 160, 10, 310, GREEN);
tft.drawCircle(240, 160, 40, GREEN);
tft.drawCircle(240, 160, 80, GREEN);
tft.drawCircle(240, 160, 140, GREEN);
tft.drawCircle(240, 160, 200, GREEN);
tft.drawLine(10,10, myWidth*3/4, myHeight*3/5, GREEN);
tft.drawLine(myWidth*3/4, myHeight*3/5, 10, myWidth*3/32, GREEN);
tft.drawCircle(myWidth*3/4, myHeight*3/5, myWidth*1/8, GREEN);
tft.drawCircle(myWidth*3/4, myHeight*3/5, myWidth*1/4, GREEN);
tft.drawCircle(myWidth*3/4, myHeight*3/5, myWidth*7/16, GREEN);
tft.drawCircle(myWidth*3/4, myHeight*3/5, myWidth*5/8, GREEN);

tft.fillTriangle(240,160,240,200,195,190,GREEN);
tft.fillTriangle(myWidth*3/4, myHeight*3/5, myWidth*3/4, myHeight*83/100, myWidth*39/64, myHeight*79/100, GREEN);

tft.fillTriangle(240,160,240,120,195,130,GREEN);
tft.fillTriangle(myWidth*3/4, myHeight*3/5, myWidth*3/4, myHeight*1/2, myWidth*39/64, myHeight*13/24, GREEN);

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Feb 04, 2023 12:37 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, I got it working and recalibrated for the new screen. And my math was waaaaaay off.

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
 // Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Adafruit_TFTLCD.h> // Hardware-specific library
// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
// defines pins numbers
const int trigPin = 22;
const int echoPin = 23;
const int pirPin = 13;
const int pirPinL = 12;
const int pirPinR = 10;
const int Spin = 16;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup() {
  pinMode(pirPin, INPUT);//Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT); // Output for the triggerpins
  pinMode(Spin, OUTPUT); // pin for the piezo buzzer
  pinMode(echoPin, INPUT); // Input from the Ultrasound sensors
  Serial.begin(9600);
//below line is for the ili9341 display
//  uint16_t identifier = tft.read16();
// this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(3);
  txt();
  tft.setRotation(0);
  tft.fillScreen(BLACK);
}
void loop(void) { table(); // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
//  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH)  { ping(us(), myHeight*1/2); table(); p_s(); digitalWrite(pirPin,LOW); }
  if (digitalRead(pirPinL) == HIGH) {         sideL(); table(); p_s(); digitalWrite(pirPinL,LOW); }
  if (digitalRead(pirPinR) == HIGH) {         sideR(); table(); p_s(); digitalWrite(pirPinR,LOW); }
  }
void table()//create the monitor
{ int myHeight = tft.height(); int myWidth = tft.width();
  tft.drawLine(10,10, myWidth-10, myHeight*1/2, GREEN);
  tft.drawLine(myWidth-10, myHeight*1/2, 10, myHeight-10, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/4, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/16, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*5/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/8, GREEN);
}
void txt() {//Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10,130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for(int i=0;i<16;i++)
  {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) { //Display the motion
  tft.fillCircle(dis, x, 10, GREEN);
//  Serial.println(x);
  delay(100);
  tft.fillCircle(dis, x, 10, BLACK);
}
int us()//ultrasound distance device control
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);// Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2; // Calculating the distance
  return (240 - (distance * 0.7));//This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, BLACK); }
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, BLACK); }
void p_s() { digitalWrite(Spin,HIGH);  delay(100);  digitalWrite(Spin,LOW); }//Tracking sound effect

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Feb 04, 2023 10:20 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
Some progress pictures.

tracker3.JPG
tracker3.JPG [ 1.92 MiB | Viewed 4262 times ]

tracker2.JPG
tracker2.JPG [ 1.64 MiB | Viewed 4262 times ]

tracker1.JPG
tracker1.JPG [ 1.94 MiB | Viewed 4262 times ]

IMG_5515.JPG
IMG_5515.JPG [ 1.77 MiB | Viewed 4262 times ]


_________________
The impossible takes a while longer and goes over budget too...
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sun Feb 05, 2023 4:51 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
Just trying to break up things and add more functionality I stumbled on this as a possible replacement for the buttons to make them all functional:
https://www.adafruit.com/product/5157

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sun Feb 05, 2023 7:32 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
Looking more closely at the game motion tracker:
https://alienanthology.fandom.com/wiki/ ... er_(Arious)?file=Amanda_Ripley_using_MT.png

I may be better off rotating screen pysically 90 degrees, program in the battery status display, the number text at bottom, and add neopixel lights on left and right. Neopixel light bars would be the only option to get a good approximation of the red lights on left and right of the screen. More research and I could install a 4 button neopixel button array which would be a dirct screw in board, but, it is 4 buttons instead of 5 so accuracy would suffer slightly, but the awesome factor of button presses would make up for it. I found that 5 button strip, but, there is not a good way to secure it that would not impair structural integrity of the case housing.

Currently I have a string of LEDs on the way that I hope to wire in and do an approximation of the left and right lights, but, I am just not happy with the rendering of the tracker display.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Feb 11, 2023 12:22 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
This is an alternative option for the left and right red lights on the screen casing if I rotate the monitor 90 degrees:
https://www.adafruit.com/product/1721

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon Feb 13, 2023 9:56 pm 
User avatar

Location: Wellywood.
Service Number: A10/TQ0.0.82146E1
Country: New Zealand
Those bargraphs are very cool, esp as it looks as if the two LED elements could easily be wired separately to the PCB (and therefore more flexibility in mounting), but I don't think they're quite right for this build.

Maybe something simpler like these instead - Rectangular LEDs



EDIT: ah, just noticed this -
knoxvilles_joker wrote:
... have a string of LEDs on the way that I hope to wire in and do an approximation of the left and right lights ...


Nevermind, you're all over it :) 8)

_________________
Cpl Aron "septic" Williams
A10/TQ0.0.82146E1


Top
 Profile  
Reply with quote  
 Post subject: Re:
PostPosted: Tue Feb 14, 2023 5:05 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
septic wrote:
Those bargraphs are very cool, esp as it looks as if the two LED elements could easily be wired separately to the PCB (and therefore more flexibility in mounting), but I don't think they're quite right for this build.

Maybe something simpler like these instead - Rectangular LEDs



EDIT: ah, just noticed this -
knoxvilles_joker wrote:
... have a string of LEDs on the way that I hope to wire in and do an approximation of the left and right lights ...


Nevermind, you're all over it :) 8)


The light bar is 24 individual LEDs. I was just going to light certain ones.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Feb 18, 2023 7:37 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, got the leds wired in. It works ok.

I got a nano with a screw terminal shield and it just barely fits. I was surprised how tiny it is. Still trying to lay hands on a 1500 series powerboost board. Still trying to find a pi in stock but am told that will happen later this year mid year. I will need to do a minor code update tweak to make the code arduino board agnostic.

IMG_5547.JPG
IMG_5547.JPG [ 1.82 MiB | Viewed 4154 times ]

IMG_5546.JPG
IMG_5546.JPG [ 1.79 MiB | Viewed 4154 times ]

IMG_5545.JPG
IMG_5545.JPG [ 1021.25 KiB | Viewed 4154 times ]

IMG_5544.JPG
IMG_5544.JPG [ 1.72 MiB | Viewed 4154 times ]


_________________
The impossible takes a while longer and goes over budget too...
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Feb 18, 2023 7:38 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
I am not happy with the led arrangement on this version but it will do as I was just eyeballing things and doing it by hand.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Feb 18, 2023 9:24 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK with the atmega versions of the arduino SCL/SDA ports are hardware defined. Going over things it looks like I may be stuck using an arduino NANO. The pinouts are all different on the different models. If you stick to an UNO type layout and specify ports such as A5 instead of 22, you can be more board agnostic.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Feb 18, 2023 8:48 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
code update for board agnostic wiring:

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
 // Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Adafruit_TFTLCD.h> // Hardware-specific library
// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET PC6 // Can alternately just connect to Arduino's reset pin,(on nano PC6, on Micro RESET) this is not used.

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
// defines pins numbers
const int trigPin = A4;
const int echoPin = A5;
const int pirPin = 13;
const int pirPinL = 11;
const int pirPinR = 10;
const int Spin = 12;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup() {
  pinMode(pirPin, INPUT);//Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT); // Output for the triggerpins
  pinMode(Spin, OUTPUT); // pin for the piezo buzzer
  pinMode(echoPin, INPUT); // Input from the Ultrasound sensors
  Serial.begin(9600);
//below line is for the ili9341 display
//  uint16_t identifier = tft.read16();
// this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(3);
  txt();
  tft.setRotation(0);
  tft.fillScreen(BLACK);
}
void loop(void) { table(); // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
//  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH)  { ping(us(), myHeight*1/2); table(); p_s(); digitalWrite(pirPin,LOW); }
  if (digitalRead(pirPinL) == HIGH) {         sideL(); table(); p_s(); digitalWrite(pirPinL,LOW); }
  if (digitalRead(pirPinR) == HIGH) {         sideR(); table(); p_s(); digitalWrite(pirPinR,LOW); }
  }
void table()//create the monitor
{ int myHeight = tft.height(); int myWidth = tft.width();
  tft.drawLine(10,10, myWidth-10, myHeight*1/2, GREEN);
  tft.drawLine(myWidth-10, myHeight*1/2, 10, myHeight-10, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/4, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/16, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*5/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/8, GREEN);
}
void txt() {//Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10,130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for(int i=0;i<16;i++)
  {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) { //Display the motion
  tft.fillCircle(dis, x, 10, GREEN);
//  Serial.println(x);
  delay(100);
  tft.fillCircle(dis, x, 10, BLACK);
}
int us()//ultrasound distance device control
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);// Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2; // Calculating the distance
  return (240 - (distance * 0.7));//This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, BLACK); }
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, BLACK); }
void p_s() { digitalWrite(Spin,HIGH);  delay(100);  digitalWrite(Spin,LOW); }//Tracking sound effect

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Mar 04, 2023 5:51 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, I got it all mounted and working. I had to change the rotation to make the mounting setup work properly

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
 // Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include <Adafruit_TFTLCD.h> // Hardware-specific library
// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET PC6 // Can alternately just connect to Arduino's reset pin(PC6 on nano, RESET on Micro) this is not used.

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
// defines pins numbers
const int trigPin = A4;
const int echoPin = A5;
const int pirPin = 13;
const int pirPinL = 11;
const int pirPinR = 10;
const int Spin = 12;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup() {
  pinMode(pirPin, INPUT);//Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT); // Output for the triggerpins
  pinMode(Spin, OUTPUT); // pin for the piezo buzzer
  pinMode(echoPin, INPUT); // Input from the Ultrasound sensors
  Serial.begin(9600);
//below line is for the ili9341 display
//  uint16_t identifier = tft.read16();
// this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(1);
  txt();
  tft.setRotation(2);
  tft.fillScreen(BLACK);
}
void loop(void) { table(); // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
//  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH)  { ping(us(), myHeight*1/2); table(); p_s(); digitalWrite(pirPin,LOW); }
  if (digitalRead(pirPinL) == HIGH) {         sideL(); table(); p_s(); digitalWrite(pirPinL,LOW); }
  if (digitalRead(pirPinR) == HIGH) {         sideR(); table(); p_s(); digitalWrite(pirPinR,LOW); }
  }
void table()//create the monitor
{ int myHeight = tft.height(); int myWidth = tft.width();
  tft.drawLine(10,10, myWidth-10, myHeight*1/2, GREEN);
  tft.drawLine(myWidth-10, myHeight*1/2, 10, myHeight-10, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*1/4, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/16, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*5/8, GREEN);
  tft.drawCircle(myWidth, myHeight*1/2, myWidth*7/8, GREEN);
}
void txt() {//Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10,130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for(int i=0;i<16;i++)
  {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) { //Display the motion
  tft.fillCircle(dis, x, 10, GREEN);
//  Serial.println(x);
  delay(100);
  tft.fillCircle(dis, x, 10, BLACK);
}
int us()//ultrasound distance device control
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);// Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2; // Calculating the distance
  return (240 - (distance * 0.7));//This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2+5, myWidth, myHeight*3/8, myWidth*13/16-25, myHeight*3/8, BLACK); }
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, GREEN);
  delay(100); tft.fillTriangle(myWidth, myHeight*1/2-5, myWidth, myHeight*5/8, myWidth*13/16-25, myHeight*5/8, BLACK); }
void p_s() { digitalWrite(Spin,HIGH);  delay(100);  digitalWrite(Spin,LOW); }//Tracking sound effect

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Mar 04, 2023 5:52 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
This will be the last update on this until I finish the access tuner code piece and start working on version 2 of the motion tracker that will be more accurate.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Apr 08, 2023 7:53 pm 

Service Number: A05/TQ2.0.32141E1
Country: United States
I am now working on a revamped version that uses a 1x4 button neopixel board using mx cherry keys, a slight deviation from game accuracy, but will add more operational functionality. 2 x 24xled light bars which will replace the ugly wiring hack I have on the current tracker setup, but the screen has to be rotated 90 degrees for this setup, but doing so will allow an absolutely more accurate screen setup.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Mon Apr 10, 2023 2:51 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, I wired in the led bars and switch. I got the bars programmed in, any changes to their light sequence would be after install to make sure things look meh, ok. The switches I have wired in to light when pressed programmatically. I will add logic for those to reboot, reload screen, chirp, and pause the program next week. I ran out of motorvation to start working on redoing the screen geometry as it is a significant amount of math involved.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sat Apr 15, 2023 9:58 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, I made a little progress. I got things rotated. I will most likely have to make another programatic state machine to get the rendering pieces to play nice. Regardless I will need to get all the geometry sorted as I get things figured out.

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
#include "SPI.h"
#include <Wire.h>
#include "Adafruit_GFX.h" // for display
#include "Adafruit_ILI9341.h" //for display
#include <Adafruit_TFTLCD.h>  // Hardware-specific library for display
#include <Adafruit_NeoKey_1x4.h> //for 4button board
#include <seesaw_neopixel.h> // for 4 button board
#include <Adafruit_LEDBackpack.h> //for 24 led bars
#include <avr/wdt.h>

// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3      // Chip Select goes to Analog 3
#define LCD_CD A2      // Command/Data goes to Analog 2
#define LCD_WR A1      // LCD Write goes to Analog 1
#define LCD_RD A0      // LCD Read goes to Analog 0
#define LCD_RESET PC6  // Can alternately just connect to Arduino's reset pin(PC6 on nano, RESET on Micro) this is not used.

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
// defines pins numbers
const int trigPin = A6;
const int echoPin = A7;
const int pirPin = 13;
const int pirPinL = 12;
const int pirPinR = 10;
const int Spin = 11;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
// for nano hardwre spi is miso=12, mosi=11, sck=13,
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// the led bar setup
Adafruit_24bargraph bar1 = Adafruit_24bargraph();
Adafruit_24bargraph bar2 = Adafruit_24bargraph();
// neokey initializer
Adafruit_NeoKey_1x4 neokey;

void setup() {
  pinMode(pirPin, INPUT);  //Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT);  // Output for the triggerpins
  pinMode(Spin, OUTPUT);     // pin for the piezo buzzer
  pinMode(echoPin, INPUT);   // Input from the Ultrasound sensors
  Serial.begin(9600);
  //below line is for the ili9341 display
  //  uint16_t identifier = tft.read16();
  // this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(0);
  txt();
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  // the led bar initializers
    bar1.begin(0x70);  // pass in the address
  bar2.begin(0x71);
  bar1.setBar(0, LED_RED);
  bar1.setBar(2, LED_RED);
  bar1.setBar(4, LED_RED);
  bar1.setBar(6, LED_RED);
  bar1.setBar(8, LED_RED);
  bar1.setBar(10, LED_RED);
  bar1.setBar(12, LED_RED);
  bar1.setBar(14, LED_RED);
  bar1.setBar(16, LED_RED);
  bar1.setBar(18, LED_RED);
  bar1.setBar(20, LED_RED);
  bar1.setBar(22, LED_RED);
  bar1.writeDisplay();
  bar2.setBar(0, LED_RED);
  bar2.setBar(2, LED_RED);
  bar2.setBar(4, LED_RED);
  bar2.setBar(6, LED_RED);
  bar2.setBar(8, LED_RED);
  bar2.setBar(10, LED_RED);
  bar2.setBar(12, LED_RED);
  bar2.setBar(14, LED_RED);
  bar2.setBar(16, LED_RED);
  bar2.setBar(18, LED_RED);
  bar2.setBar(20, LED_RED);
  bar2.setBar(22, LED_RED);
  bar2.writeDisplay();
//neokey initializier
  neokey.begin(0x30);     

}
void loop(void) {
  // neo pixel
    uint8_t buttons = neokey.read();
  if (buttons & (1<<0)) { Serial.println("Button A"); neokey.pixels.setPixelColor(0,255,0,0); tft.fillScreen(BLACK);}
    else { neokey.pixels.setPixelColor(0, 0);}
  if (buttons & (1<<1)) { Serial.println("Button B"); neokey.pixels.setPixelColor(1,0x808080); delay(15000); softwareReset(WDTO_60MS);}
    else { neokey.pixels.setPixelColor(1, 0);}
  if (buttons & (1<<2)) { Serial.println("Button C"); neokey.pixels.setPixelColor(2,0,255,0); }
    else { neokey.pixels.setPixelColor(2, 0); }
  if (buttons & (1<<3)) { Serial.println("Button D"); neokey.pixels.setPixelColor(3,0,0,255); p_s();}
    else { neokey.pixels.setPixelColor(3, 0); } 
  neokey.pixels.show();
  // end neopixel initializer
  table();  // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
  //  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH) { ping(us(), myHeight * 1 / 2); table(); p_s(); digitalWrite(pirPin, LOW); }
  if (digitalRead(pirPinL) == HIGH) { sideL(); table(); p_s(); digitalWrite(pirPinL, LOW);}
  if (digitalRead(pirPinR) == HIGH) { sideR(); table(); p_s(); digitalWrite(pirPinR, LOW); }
}
void table()  //create the monitor
{
  int myHeight = tft.height(); int myWidth = tft.width();
  tft.setCursor(myWidth * 1 /16, 5);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("-CN");
  tft.setCursor(myWidth * 1 /16, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("7-772");
    tft.setCursor(myWidth * 11 /16-10, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("47-CLN");
  tft.drawLine(myWidth *2/16, myHeight * 3/24, myWidth *8/16, myHeight * 14 / 24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 14 / 16, myHeight * 3 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 4 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 11 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 8 / 16, myHeight * 1 /24-5, GREEN);
  tft.fillRect(myWidth*8/16-4, myWidth*1/24,9,9,GREEN);   
  tft.drawCircle(myWidth *8/16, myHeight * 13 / 24, myWidth * 1 / 8, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 1 / 4, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 16, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 5 / 8 +16, GREEN);
  tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
  tft.fillTriangle(myWidth,5,myWidth,myHeight-24,65,myHeight-24,BLACK);   
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16, GREEN);
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16, BLACK);
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*5/16,myHeight*10/24,myWidth*11/16,myHeight*10/24,BLACK);
//  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 8, GREEN);
//l circle
//  tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
// r circle
//  tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
 //this covers the circle artifacts for the tracker grid
  //tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
//  tft.fillTriangle(myWidth,5,myWidth,myHeight-24,65,myHeight-24,BLACK);
}
void txt() {  //Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10, 130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for (int i = 0; i < 16; i++) {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) {  //Display the motion
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, GREEN);
  //  Serial.println(x);
  delay(100);
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, BLACK);
}
int us()  //ultrasound distance device control
{
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);  // Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2;    // Calculating the distance
  return (240 - (distance * 0.7));    //This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, BLACK);
}
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, BLACK);
}
void p_s() { digitalWrite(Spin, HIGH); delay(100); digitalWrite(Spin, LOW);}  //Tracking sound effect

void softwareReset(uint8_t prescaller) {
  wdt_enable(prescaller);
  while (1) {}
}

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Sun Apr 16, 2023 8:21 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
Ok, got most of the geometry sorted and it is in a calibration type setup until I am certain it will work. I need to work on a state machine to lower the amount of rerender artifacts

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
#include "SPI.h"
#include <Wire.h>
#include "Adafruit_GFX.h" // for display
#include "Adafruit_ILI9341.h" //for display
#include <Adafruit_TFTLCD.h>  // Hardware-specific library for display
#include <Adafruit_NeoKey_1x4.h> //for 4button board
#include <seesaw_neopixel.h> // for 4 button board
#include <Adafruit_LEDBackpack.h> //for 24 led bars
#include <avr/wdt.h>

// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3      // Chip Select goes to Analog 3
#define LCD_CD A2      // Command/Data goes to Analog 2
#define LCD_WR A1      // LCD Write goes to Analog 1
#define LCD_RD A0      // LCD Read goes to Analog 0
#define LCD_RESET PC6  // Can alternately just connect to Arduino's reset pin(PC6 on nano, RESET on Micro) this is not used.

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
// defines pins numbers
const int trigPin = A6;
const int echoPin = A7;
const int pirPin = 13;
const int pirPinL = 12;
const int pirPinR = 10;
const int Spin = 11;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
// for nano hardwre spi is miso=12, mosi=11, sck=13,
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// the led bar setup
Adafruit_24bargraph bar1 = Adafruit_24bargraph();
Adafruit_24bargraph bar2 = Adafruit_24bargraph();
// neokey initializer
Adafruit_NeoKey_1x4 neokey;

void setup() {
  pinMode(pirPin, INPUT);  //Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT);  // Output for the triggerpins
  pinMode(Spin, OUTPUT);     // pin for the piezo buzzer
  pinMode(echoPin, INPUT);   // Input from the Ultrasound sensors
  Serial.begin(9600);
  //below line is for the ili9341 display
  //  uint16_t identifier = tft.read16();
  // this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(0);
  txt();
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  // the led bar initializers
    bar1.begin(0x70);  // pass in the address
  bar2.begin(0x71);
  bar1.setBar(0, LED_RED);
  bar1.setBar(2, LED_RED);
  bar1.setBar(4, LED_RED);
  bar1.setBar(6, LED_RED);
  bar1.setBar(8, LED_RED);
  bar1.setBar(10, LED_RED);
  bar1.setBar(12, LED_RED);
  bar1.setBar(14, LED_RED);
  bar1.setBar(16, LED_RED);
  bar1.setBar(18, LED_RED);
  bar1.setBar(20, LED_RED);
  bar1.setBar(22, LED_RED);
  bar1.writeDisplay();
  bar2.setBar(0, LED_RED);
  bar2.setBar(2, LED_RED);
  bar2.setBar(4, LED_RED);
  bar2.setBar(6, LED_RED);
  bar2.setBar(8, LED_RED);
  bar2.setBar(10, LED_RED);
  bar2.setBar(12, LED_RED);
  bar2.setBar(14, LED_RED);
  bar2.setBar(16, LED_RED);
  bar2.setBar(18, LED_RED);
  bar2.setBar(20, LED_RED);
  bar2.setBar(22, LED_RED);
  bar2.writeDisplay();
//neokey initializier
  neokey.begin(0x30);     

}
void loop(void) {
  // neo pixel
    uint8_t buttons = neokey.read();
  if (buttons & (1<<0)) { Serial.println("Button A"); neokey.pixels.setPixelColor(0,255,0,0); tft.fillScreen(BLACK);}
    else { neokey.pixels.setPixelColor(0, 0);}
  if (buttons & (1<<1)) { Serial.println("Button B"); neokey.pixels.setPixelColor(1,0x808080); delay(15000); softwareReset(WDTO_60MS);}
    else { neokey.pixels.setPixelColor(1, 0);}
  if (buttons & (1<<2)) { Serial.println("Button C"); neokey.pixels.setPixelColor(2,0,255,0); }
    else { neokey.pixels.setPixelColor(2, 0); }
  if (buttons & (1<<3)) { Serial.println("Button D"); neokey.pixels.setPixelColor(3,0,0,255); p_s();}
    else { neokey.pixels.setPixelColor(3, 0); } 
  neokey.pixels.show();
  // end neopixel initializer
  table();  // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
  //  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH) { ping(us(), myHeight * 1 / 2); table(); p_s(); digitalWrite(pirPin, LOW); }
  if (digitalRead(pirPinL) == HIGH) { sideL(); table(); p_s(); digitalWrite(pirPinL, LOW);}
  if (digitalRead(pirPinR) == HIGH) { sideR(); table(); p_s(); digitalWrite(pirPinR, LOW); }
}
void table()  //create the monitor
{
  int myHeight = tft.height(); int myWidth = tft.width();
  tft.setCursor(myWidth * 1 /16, 5);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("-CN");
  tft.setCursor(myWidth * 1 /16, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("7-772");
    tft.setCursor(myWidth * 11 /16-10, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("47-CLN");
// draws main grid lines for tracker grid 
  tft.drawLine(myWidth *2/16, myHeight * 3/24, myWidth *8/16, myHeight * 14 / 24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 14 / 16, myHeight * 3 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 4 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 11 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 8 / 16, myHeight * 1 /24-5, GREEN);
// black line left most
  tft.drawLine(myWidth*7/16+11,myHeight*13/24, myWidth*4/16,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+12,myHeight*13/24, myWidth*4/16+1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+13,myHeight*13/24, myWidth*4/16+2,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+5,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+6,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+7,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+8,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+4,myHeight*3/24,YELLOW);
//left inside
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-5,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+14,myHeight*12/24, myWidth*6/16-4,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+13,myHeight*12/24, myWidth*6/16-6,myHeight*3/24,YELLOW);   
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-3,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-2,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16+1,myHeight*3/24,YELLOW);

  tft.drawLine(myWidth*7/16+16,myHeight*12/24, myWidth*7/16+11,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+12,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+13,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+10,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+10,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+9,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+8,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+7,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+6,myHeight*3/24,YELLOW);
// right inside
  tft.drawLine(myWidth*8/16+2,myHeight*12/24, myWidth*10/16+7,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+3,myHeight*12/24, myWidth*10/16+8,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+9,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+10,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+11,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+4,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+5,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+6,myHeight*3/24,YELLOW);
 
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-4,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-3,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-2,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+2,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+3,myHeight*3/24,YELLOW);

//right most
  tft.drawLine(myWidth*8/16+12,myHeight*12/24, myWidth*13/16-5,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+13,myHeight*12/24, myWidth*13/16-4,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+14,myHeight*12/24, myWidth*13/16-3,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16-2,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+16,myHeight*12/24, myWidth*13/16-1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16+1,myHeight*3/24,YELLOW);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16+2,myHeight*3/24,YELLOW);

// draws square on top 
  tft.fillRect(myWidth*8/16-4, myWidth*1/24,9,9,GREEN); 
  // circle geomotry for scanner fields 
  tft.drawCircle(myWidth *8/16, myHeight * 13 / 24, myWidth * 1 / 8, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 1 / 4, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 16, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 5 / 8 +16, GREEN);
// clears circle geomotry out of field 
//  tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
  tft.fillTriangle(0,5,0,myHeight -24, myWidth *8/16, myHeight * 14 / 24, BLACK); 

  tft.fillTriangle(myWidth,5,myWidth,myHeight-24,myWidth *8/16, myHeight * 14 / 24,BLACK);
 
  tft.fillTriangle(myWidth *8/16, myHeight * 14 / 24,0,myHeight-24,myWidth,myHeight-24,BLACK);
// yellow calibration lines
  tft.drawTriangle(0,5,0,myHeight -24, myWidth *8/16, myHeight * 14 / 24, YELLOW);
  tft.drawTriangle(myWidth,5,myWidth,myHeight-24,myWidth *8/16, myHeight * 14 / 24,YELLOW); 
  tft.drawTriangle(myWidth *8/16, myHeight * 14 / 24,0,myHeight-24,myWidth,myHeight-24,YELLOW);

// tracker blip geomoetry 
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16, GREEN);
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16, BLACK);
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*3/16,myHeight*19/24+10,myWidth*3/16,myHeight*16/24,BLACK);
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*13/16,myHeight*19/24+10,myWidth*13/16,myHeight*16/24,BLACK);
// calibration triangles for geometry
  tft.drawTriangle(myWidth*8/16,myHeight*14/24,myWidth*3/16,myHeight*19/24+10,myWidth*3/16,myHeight*16/24,YELLOW);
  tft.drawTriangle(myWidth*8/16,myHeight*14/24,myWidth*13/16,myHeight*19/24+10,myWidth*13/16,myHeight*16/24,YELLOW);

// clears circle geometry inside tracker field 
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*5/16,myHeight*10/24,myWidth*11/16,myHeight*10/24,BLACK);
//  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 8, GREEN);
//l circle
//  tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
// r circle
//  tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
 //this covers the circle artifacts for the tracker grid
  //tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
//  tft.fillTriangle(myWidth,5,myWidth,myHeight-24,65,myHeight-24,BLACK);
}
void txt() {  //Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10, 130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for (int i = 0; i < 16; i++) {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) {  //Display the motion
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, GREEN);
  //  Serial.println(x);
  delay(100);
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, BLACK);
}
int us()  //ultrasound distance device control
{
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);  // Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2;    // Calculating the distance
  return (240 - (distance * 0.7));    //This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, BLACK);
}
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, BLACK);
}
void p_s() { digitalWrite(Spin, HIGH); delay(100); digitalWrite(Spin, LOW);}  //Tracking sound effect

void softwareReset(uint8_t prescaller) {
  wdt_enable(prescaller);
  while (1) {}
}

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject: Re: Alien Isolation Motion Tracker
PostPosted: Mon Apr 17, 2023 3:08 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK, more progress. I got the basic geometry piece done other than coding 6 lines for triangles. I am again approaching the program limits for the arduino.

Code:
/***************************************************
  This is our GFX example for the Adafruit ILI9341 Breakout and Shield
  ----> http://www.adafruit.com/products/1651

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 or 5 pins are required to
  interface (RST is optional)
  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.
  MIT license, all text above must be included in any redistribution
 ****************************************************/
// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// IMPORTANT: Adafruit_TFTLCD LIBRARY MUST BE SPECIFICALLY
// CONFIGURED FOR EITHER THE TFT SHIELD OR THE BREAKOUT BOARD.
// SEE RELEVANT COMMENTS IN Adafruit_TFTLCD.h FOR SETUP.
#include "SPI.h"
#include <Wire.h>
#include "Adafruit_GFX.h" // for display
#include "Adafruit_ILI9341.h" //for display
#include <Adafruit_TFTLCD.h>  // Hardware-specific library for display
#include <Adafruit_NeoKey_1x4.h> //for 4button board
#include <seesaw_neopixel.h> // for 4 button board
#include <Adafruit_LEDBackpack.h> //for 24 led bars
#include <avr/wdt.h>

// these are for ili9341 chips
// For the Adafruit shield, these are the default.
//#define TFT_DC 9
//#define TFT_CS 10
//#define TFT_MOSI 11
//#define TFT_CLK 13
//#define TFT_RST 12
//#define TFT_MISO 8
//#define TFT_CS 10
// The control pins for the LCD can be assigned to any digital or
// analog pins...but we'll use the analog pins as this allows us to
// double up the pins with the touch screen (see the TFT paint example).
#define LCD_CS A3      // Chip Select goes to Analog 3
#define LCD_CD A2      // Command/Data goes to Analog 2
#define LCD_WR A1      // LCD Write goes to Analog 1
#define LCD_RD A0      // LCD Read goes to Analog 0
#define LCD_RESET PC6  // Can alternately just connect to Arduino's reset pin(PC6 on nano, RESET on Micro) this is not used.

// When using the BREAKOUT BOARD only, use these 8 data lines to the LCD:
// For the Arduino Uno, Duemilanove, Diecimila, etc.:
//   D0 connects to digital pin 8  (Notice these are
//   D1 connects to digital pin 9   NOT in order!)
//   D2 connects to digital pin 2
//   D3 connects to digital pin 3
//   D4 connects to digital pin 4
//   D5 connects to digital pin 5
//   D6 connects to digital pin 6
//   D7 connects to digital pin 7
// For the Arduino Mega, use digital pins 22 through 29
// (on the 2-row header at the end of the board).

// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
// defines pins numbers
const int trigPin = A6;
const int echoPin = A7;
const int pirPin = 13;
const int pirPinL = 12;
const int pirPinR = 10;
const int Spin = 11;
// defines variables
long duration;
int distance;
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
// for nano hardwre spi is miso=12, mosi=11, sck=13,
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
// If using the breakout, change pins as desired
//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
// below is the invocation for the 3.5" lcd
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
// the led bar setup
Adafruit_24bargraph bar1 = Adafruit_24bargraph();
Adafruit_24bargraph bar2 = Adafruit_24bargraph();
// neokey initializer
Adafruit_NeoKey_1x4 neokey;

void setup() {
  pinMode(pirPin, INPUT);  //Input from the PIR sensors
  pinMode(pirPinL, INPUT);
  pinMode(pirPinR, INPUT);
  pinMode(trigPin, OUTPUT);  // Output for the triggerpins
  pinMode(Spin, OUTPUT);     // pin for the piezo buzzer
  pinMode(echoPin, INPUT);   // Input from the Ultrasound sensors
  Serial.begin(9600);
  //below line is for the ili9341 display
  //  uint16_t identifier = tft.read16();
  // this is for the 3.5" screen ID
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(0);
  txt();
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  // the led bar initializers
    bar1.begin(0x70);  // pass in the address
  bar2.begin(0x71);
  bar1.setBar(0, LED_RED);
  bar1.setBar(2, LED_RED);
  bar1.setBar(4, LED_RED);
  bar1.setBar(6, LED_RED);
  bar1.setBar(8, LED_RED);
  bar1.setBar(10, LED_RED);
  bar1.setBar(12, LED_RED);
  bar1.setBar(14, LED_RED);
  bar1.setBar(16, LED_RED);
  bar1.setBar(18, LED_RED);
  bar1.setBar(20, LED_RED);
  bar1.setBar(22, LED_RED);
  bar1.writeDisplay();
  bar2.setBar(0, LED_RED);
  bar2.setBar(2, LED_RED);
  bar2.setBar(4, LED_RED);
  bar2.setBar(6, LED_RED);
  bar2.setBar(8, LED_RED);
  bar2.setBar(10, LED_RED);
  bar2.setBar(12, LED_RED);
  bar2.setBar(14, LED_RED);
  bar2.setBar(16, LED_RED);
  bar2.setBar(18, LED_RED);
  bar2.setBar(20, LED_RED);
  bar2.setBar(22, LED_RED);
  bar2.writeDisplay();
//neokey initializier
  neokey.begin(0x30);     

}
void loop(void) {
  // neo pixel
    uint8_t buttons = neokey.read();
  if (buttons & (1<<0)) { Serial.println("Button A"); neokey.pixels.setPixelColor(0,255,0,0); tft.fillScreen(BLACK);}
    else { neokey.pixels.setPixelColor(0, 0);}
  if (buttons & (1<<1)) { Serial.println("Button B"); neokey.pixels.setPixelColor(1,0x808080); delay(15000); softwareReset(WDTO_60MS);}
    else { neokey.pixels.setPixelColor(1, 0);}
  if (buttons & (1<<2)) { Serial.println("Button C"); neokey.pixels.setPixelColor(2,0,255,0); }
    else { neokey.pixels.setPixelColor(2, 0); }
  if (buttons & (1<<3)) { Serial.println("Button D"); neokey.pixels.setPixelColor(3,0,0,255); p_s();}
    else { neokey.pixels.setPixelColor(3, 0); } 
  neokey.pixels.show();
  // end neopixel initializer
  table();  // render bars
  // check if motion detected
  int myHeight = tft.height(); int myWidth = tft.width();
  //  ping(us(), myHeight*1/2);
  if (digitalRead(pirPin) == HIGH) { ping(us(), myHeight * 1 / 2); table(); p_s(); digitalWrite(pirPin, LOW); }
  if (digitalRead(pirPinL) == HIGH) { sideL(); table(); p_s(); digitalWrite(pirPinL, LOW);}
  if (digitalRead(pirPinR) == HIGH) { sideR(); table(); p_s(); digitalWrite(pirPinR, LOW); }
}
void table()  //create the monitor
{
  int myHeight = tft.height(); int myWidth = tft.width();
  tft.setCursor(myWidth * 1 /16, 5);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("-CN");
  tft.setCursor(myWidth * 1 /16, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("7-772");
  tft.setCursor(myWidth * 11 /16-10, myHeight*23/24);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("47-CLN");
// draws main grid lines for tracker grid 
  tft.drawLine(myWidth *2/16, myHeight * 3/24, myWidth *8/16, myHeight * 14 / 24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 14 / 16, myHeight * 3 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 4 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 11 / 16+10, myHeight * 1 /24, GREEN);
  tft.drawLine(myWidth *8/16, myHeight * 14 / 24, myWidth * 8 / 16, myHeight * 1 /24-5, GREEN);
// black line left most
  tft.drawLine(myWidth*7/16+11,myHeight*13/24, myWidth*4/16,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+12,myHeight*13/24, myWidth*4/16+1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+13,myHeight*13/24, myWidth*4/16+2,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+5,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+6,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+7,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+8,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+10,myHeight*13/24, myWidth*4/16+4,myHeight*3/24,BLACK);
//left inside
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-5,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+14,myHeight*12/24, myWidth*6/16-4,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+13,myHeight*12/24, myWidth*6/16-6,myHeight*3/24,BLACK);   
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-3,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-2,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16-1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16,myHeight*3/24,  BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*6/16+1,myHeight*3/24,BLACK);

  tft.drawLine(myWidth*7/16+16,myHeight*12/24, myWidth*7/16+11,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+12,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+13,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+10,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+10,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+9,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+8,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+7,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*7/16+15,myHeight*12/24, myWidth*7/16+6,myHeight*3/24,BLACK);
// right inside
  tft.drawLine(myWidth*8/16+2,myHeight*12/24, myWidth*10/16+7,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+3,myHeight*12/24, myWidth*10/16+8,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+9,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+10,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+11,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+4,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+5,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*10/16+6,myHeight*3/24,BLACK);
 
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-4,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-3,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-2,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16-1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16,myHeight*3/24,  BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+2,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+4,myHeight*12/24, myWidth*9/16+3,myHeight*3/24,BLACK);

//right most
  tft.drawLine(myWidth*8/16+12,myHeight*12/24, myWidth*13/16-5,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+13,myHeight*12/24, myWidth*13/16-4,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+14,myHeight*12/24, myWidth*13/16-3,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16-2,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+16,myHeight*12/24, myWidth*13/16-1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16,myHeight*3/24,  BLACK);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16+1,myHeight*3/24,BLACK);
  tft.drawLine(myWidth*8/16+15,myHeight*12/24, myWidth*13/16+2,myHeight*3/24,BLACK);

// draws square on top 
  tft.fillRect(myWidth*8/16-4, myWidth*1/24,9,9,GREEN); 
  // circle geomotry for scanner fields 
//  tft.drawCircle(myWidth *8/16, myHeight * 13 / 24, myWidth * 1 / 8, GREEN);
  tft.drawCircle(myWidth *8/16, myHeight * 13 / 24, myWidth * 3 / 16+15, GREEN); 
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 1 / 4+20, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 16, GREEN);
  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 5 / 8 +16, GREEN);
// clears circle geomotry out of field 
//  tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
  tft.fillTriangle(0,5,0,myHeight -24, myWidth *8/16, myHeight * 14 / 24, BLACK); 

  tft.fillTriangle(myWidth,5,myWidth,myHeight-24,myWidth *8/16, myHeight * 14 / 24,BLACK);
 
  tft.fillTriangle(myWidth *8/16, myHeight * 14 / 24,0,myHeight-24,myWidth,myHeight-24,BLACK);
// yellow calibration lines
  tft.drawTriangle(0,5,0,myHeight -24, myWidth *8/16, myHeight * 14 / 24, YELLOW);
  tft.drawTriangle(myWidth,5,myWidth,myHeight-24,myWidth *8/16, myHeight * 14 / 24,YELLOW); 
  tft.drawTriangle(myWidth *8/16, myHeight * 14 / 24,0,myHeight-24,myWidth,myHeight-24,YELLOW);

// tracker blip geomoetry 
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16, GREEN);
  tft.fillCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16, BLACK);
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*3/16,myHeight*19/24+10,myWidth*3/16,myHeight*16/24,BLACK);
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*13/16,myHeight*19/24+10,myWidth*13/16,myHeight*16/24,BLACK);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16+1, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16-1, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16-2, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16-3, RED);   
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*4/16-4, RED);   
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16+1, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16+2, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16+3, RED);
  tft.drawCircle(myWidth*8/16,myHeight*14/24, myWidth*2/16+4, RED); 
// calibration triangles for geometry
  tft.drawTriangle(myWidth*8/16,myHeight*14/24,myWidth*3/16,myHeight*19/24+10,myWidth*3/16,myHeight*16/24,YELLOW);
  tft.drawTriangle(myWidth*8/16,myHeight*14/24,myWidth*13/16,myHeight*19/24+10,myWidth*13/16,myHeight*16/24,YELLOW);
//  right bottom
  tft.drawLine(myWidth*10/16-1,myHeight*15/24-5,myWidth*12/16-6,myHeight*16/24-12,RED);
  tft.drawLine(myWidth*10/16-1,myHeight*15/24-4,myWidth*12/16-6,myHeight*16/24-11,RED);
  tft.drawLine(myWidth*10/16-1,myHeight*15/24-3,myWidth*12/16-6,myHeight*16/24-10,RED);
// right top
//  tft.drawLine(myWidth*9/16+5,myHeight*13/24-12,myWidth*11/16-11,myHeight*11/24-5,RED);
//  tft.drawLine(myWidth*9/16+5,myHeight*13/24-7,myWidth*11/16-11,myHeight*11/24,RED);
  tft.fillTriangle(myWidth*9/16+5,myHeight*13/24-12,myWidth*9/16+5,myHeight*13/24-7,myWidth*11/16-11,myHeight*11/24-5,RED);
  tft.fillTriangle(myWidth*9/16+5,myHeight*13/24-7,myWidth*11/16-11,myHeight*11/24,myWidth*11/16-11,myHeight*11/24-5,RED);
 // myWidth*11/16-11,myHeight*11/24,BLUE);
// bottom right
//  tft.drawLine(myWidth*9/16+8,myHeight*16/24-10,myWidth*11/16-7,myHeight*17/24-2,RED);   
//  tft.drawLine(myWidth*9/16+4,myHeight*16/24-8,myWidth*11/16-10,myHeight*17/24+2,RED);

  tft.fillTriangle(myWidth*9/16+8,myHeight*16/24-10,myWidth*9/16+4,myHeight*16/24-8,myWidth*11/16-7,myHeight*17/24-2,RED);
  tft.fillTriangle(myWidth*11/16-7,myHeight*17/24-2, myWidth*11/16-10,myHeight*17/24+2,             myWidth*9/16+4,myHeight*16/24-8, RED);
// left top

  tft.drawLine(myWidth*7/16-6,myHeight*13/24-14,myWidth*5/16+11,myHeight*11/24-4,RED);
  tft.drawLine(myWidth*7/16-8,myHeight*13/24-8,myWidth*5/16+6,myHeight*11/24-1,RED); 



//left bottomt

  tft.drawLine(myWidth*6/16+3,myHeight*15/24-4,myWidth*4/16+5,myHeight*15/24+10,RED);
  tft.drawLine(myWidth*6/16+2,myHeight*15/24-8,myWidth*4/16+4,myHeight*15/24+6,RED);   



//bottom left

  tft.drawLine(myWidth*7/16-8,myHeight*16/24-10,myWidth*5/16+7,myHeight*17/24-1,RED);   
  tft.drawLine(myWidth*7/16-4,myHeight*16/24-8,myWidth*5/16+11,myHeight*17/24+2,RED);

// clears circle geometry inside tracker field 
  tft.fillTriangle(myWidth*8/16,myHeight*14/24,myWidth*5/16,myHeight*10/24,myWidth*11/16,myHeight*10/24,BLACK);
//  tft.drawCircle(myWidth*8/16, myHeight * 1 / 2, myWidth * 7 / 8, GREEN);
//l circle
//  tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
// r circle
  //tft.fillTriangle(myWidth*8/16, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
 //this covers the circle artifacts for the tracker grid
//  tft.fillTriangle(0,5,0,myHeight -24, myWidth-65,myHeight-24, BLACK);
  //tft.fillTriangle(myWidth,5,myWidth,myHeight-24,65,myHeight-24,BLACK);
}
void txt() {  //Starting :)
  tft.fillScreen(BLACK);
  tft.setCursor(60, 20);
  tft.setTextColor(WHITE);
  tft.setTextSize(5);
  tft.println("B2-LAB");
  tft.setCursor(20, 80);
  tft.setTextColor(GREEN);
  tft.setTextSize(3);
  tft.println("MOTION-TRACKER");
  tft.setCursor(10, 130);
  tft.setTextColor(RED);
  tft.setTextSize(2);
  tft.println("^VERTICAL WHEN OPERATING^");
  tft.setCursor(60, 150);
  tft.setTextColor(GREEN);
  tft.setTextSize(2);
  tft.print("Calibrate Sensors");
  tft.setCursor(10, 170);
  tft.setTextSize(3);
  for (int i = 0; i < 16; i++) {
    tft.print(".");
    delay(200);
  }
}
void ping(int dis, int x) {  //Display the motion
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, GREEN);
  //  Serial.println(x);
  delay(100);
  tft.fillCircle((((320 * 8/16)+dis)),(480*2/24 -x), 10, BLACK);
}
int us()  //ultrasound distance device control
{
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);  // Reads the echoPins, returns the sound wave travel time in microseconds
  distance = duration * 0.034 / 2;    // Calculating the distance
  return (240 - (distance * 0.7));    //This needed for the proper displaying
}
//right PIR sensor event
void sideR() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 + 5, myWidth, myHeight * 3 / 8, myWidth * 13 / 16 - 25, myHeight * 3 / 8, BLACK);
}
//left PIR sensor event
void sideL() { int myHeight = tft.height(); int myWidth = tft.width();
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, GREEN);
  delay(100);
  tft.fillTriangle(myWidth, myHeight * 1 / 2 - 5, myWidth, myHeight * 5 / 8, myWidth * 13 / 16 - 25, myHeight * 5 / 8, BLACK);
}
void p_s() { digitalWrite(Spin, HIGH); delay(100); digitalWrite(Spin, LOW);}  //Tracking sound effect

void softwareReset(uint8_t prescaller) {
  wdt_enable(prescaller);
  while (1) {}
}

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: Sat Aug 05, 2023 6:20 am 

Service Number: A05/TQ2.0.32141E1
Country: United States
OK I had a con snafu with the tracker. The box that attaches to the main assembly requires a support and I would reccoment 100% infill on the support piece where it attaches to the body. I will use some flashing to beef up where it broke and add a screw to make it a solid piece.

_________________
The impossible takes a while longer and goes over budget too...


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 45 posts ]  Go to page Previous  1, 2



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: