// Learn about the ESP32 WiFi simulation in
// https://docs.wokwi.com/guides/esp32-wifi
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin Layout
#define SR_DAT 16
#define SR_OEN 2
#define SR_CLK 17
#define SR_LTC 15
#define SR_RST 4
#define BZ_OUT 13
// I2C Devices
#define I2C_LCD 0x27 // Liquid Crystal Display
#define I2C_RTC 0x00 // Real Time Clock
#define I2C_IMU 0x01 // Spedometer
// LCD
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(I2C_LCD, 16, 2);
// This method sends bits to the shift register:
void registerWrite(int whichPin, int whichState) {
// the bits you want to send
byte bitsToSend = 0;
// turn off the output so the pins don't light up
// while you're shifting bits:
digitalWrite(SR_LTC, HIGH);
// turn on the next highest bit in bitsToSend:
bitWrite(bitsToSend, whichPin, whichState);
// shift the bits out:
shiftOut(SR_DAT, SR_CLK, MSBFIRST, bitsToSend);
// turn on the output so the LEDs can light up:
digitalWrite(SR_LTC, LOW);
}
void setup() {
Serial.begin(115200);
// Setup SR
pinMode(SR_DAT, OUTPUT);
pinMode(SR_OEN, OUTPUT);
pinMode(SR_CLK, OUTPUT);
pinMode(SR_LTC, OUTPUT);
pinMode(SR_RST, OUTPUT);
pinMode(BZ_OUT, OUTPUT);
// Default States
digitalWrite(SR_OEN, LOW);
digitalWrite(SR_RST, HIGH);
LCD.init();
LCD.backlight();
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("GoTrax XR Elite");
LCD.setCursor(0, 1);
LCD.println("Please Update FW");
}
void loop() {
tone(BZ_OUT, 800, 1000);
for(int idx=0; idx<16; idx++) {
registerWrite(idx, 255);
delay(250);
registerWrite(idx, 0);
delay(250);
}
delay(250);
}