// Multi-Effect
int clockPin = 3; //SCHP
int latchPin = 1; //STCP
int dataPin = 15; //DS
int numOfRegisters = 2;
byte* registerState;
long effectId = 0;
long prevEffect = 0;
long effectRepeat = 0;
long effectSpeed = 30;
const int wifi = 16;
const int gpioPins[] = {13, 12, 14, 27, 26, 25, 33, 32, 2, 4, 5, 18, 19, 21, 22, 23};
const int numPins = sizeof(gpioPins) / sizeof(gpioPins[0]);
bool pinStates[numPins];
void setup() {
//Initialize array
registerState = new byte[numOfRegisters];
for (size_t i = 0; i < numOfRegisters; i++) {
registerState[i] = 0;
}
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for (int i = 0; i < numPins; i++) {
pinMode(gpioPins[i], OUTPUT);
digitalWrite(gpioPins[i], LOW);
}
}
void loop() {
do{
effectId = random(6);
} while (effectId == prevEffect);
prevEffect = effectId;
switch (effectId)
{
case 0:
effectRepeat = random(1, 2);
break;
case 1:
effectRepeat = random(1, 2);
break;
case 3:
effectRepeat = random(1, 5);
break;
case 4:
effectRepeat = random(1, 2);
break;
case 5:
effectRepeat = random(1, 2);
break;
}
for (int i = 0; i < effectRepeat; i++) {
effectSpeed = random(10, 90);
switch (effectId)
{
case 0:
effectA(effectSpeed);
break;
case 1:
effectB(effectSpeed);
break;
case 3:
effectC(effectSpeed);
break;
case 4:
effectD(effectSpeed);
break;
case 6:
effectE(effectSpeed);
break;
}
}
for (int i = 0; i < numPins; i++) {
digitalWrite(gpioPins[i], HIGH);
delay(500);
}
// Turn off each GPIO pin in the reverse order
for (int i = numPins - 1; i >= 0; i--) {
digitalWrite(gpioPins[i], LOW);
delay(500);
}
}
void effectA(int speed){
for (int i = 0; i < 16; i++){
for (int k = i; k < 16; k++){
regWrite(k, HIGH);
delay(speed);
regWrite(k, LOW);
}
regWrite(i, HIGH);
}
}
void effectB(int speed){
for (int i = 15; i >= 0; i--){
for (int k = 0; k < i; k++){
regWrite(k, HIGH);
delay(speed);
regWrite(k, LOW);
}
regWrite(i, HIGH);
}
}
void effectC(int speed){
int prevI = 0;
for (int i = 0; i < 16; i++){
regWrite(prevI, LOW);
regWrite(i, HIGH);
prevI = i;
delay(speed);
}
for (int i = 15; i >= 0; i--){
regWrite(prevI, LOW);
regWrite(i, HIGH);
prevI = i;
delay(speed);
}
}
void effectD(int speed){
for (int i = 0; i < 8; i++){
for (int k = i; k < 8; k++)
{
regWrite(k, HIGH);
regWrite(15 - k, HIGH);
delay(speed);
regWrite(k, LOW);
regWrite(15 - k, LOW);
}
regWrite(i, HIGH);
regWrite(15 - i, HIGH);
}
}
void effectE(int speed){
for (int i = 7; i >= 0; i--){
for (int k = 0; k <= i; k++)
{
regWrite(k, HIGH);
regWrite(15 - k, HIGH);
delay(speed);
regWrite(k, LOW);
regWrite(15 - k, LOW);
}
regWrite(i, HIGH);
regWrite(15 - i, HIGH);
}
}
void regWrite(int pin, bool state){
//Determines register
int reg = pin / 8;
//Determines pin for actual register
int actualPin = pin - (8 * reg);
//Begin session
digitalWrite(latchPin, LOW);
for (int i = 0; i < numOfRegisters; i++){
//Get actual states for register
byte* states = ®isterState[i];
//Update state
if (i == reg){
bitWrite(*states, actualPin, state);
}
//Write
shiftOut(dataPin, clockPin, MSBFIRST, *states);
}
//End session
digitalWrite(latchPin, HIGH);
}
//LED
// int LED = 36;
// void setup() {
// pinMode (LED, OUTPUT);
// }
// void loop() {
// digitalWrite(LED, HIGH);
// delay(1000);
// digitalWrite(LED, LOW);
// delay(1000);
// }
// #include <DHT.h>
// //#define DHT_SENSOR_PIN 39 // ESP32 pin GPIO21 connected to DHT22 sensor
// #define DHT_SENSOR_TYPE DHT22
// const int DHT_SENSOR_PIN = 15;
// DHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
// void setup() {
// pinMode(DHT_SENSOR_PIN, INPUT);
// Serial.begin(9600);
// dht_sensor.begin(); // initialize the DHT sensor
// }
// void loop() {
// // read humidity
// float humi = dht_sensor.readHumidity();
// // read temperature in Celsius
// float tempC = dht_sensor.readTemperature();
// // read temperature in Fahrenheit
// float tempF = dht_sensor.readTemperature(true);
// // check whether the reading is successful or not
// if ( isnan(tempC) || isnan(tempF) || isnan(humi)) {
// Serial.println("Failed to read from DHT sensor!");
// } else {
// Serial.print("Humidity: ");
// Serial.print(humi);
// Serial.print("%");
// Serial.print(" | ");
// Serial.print("Temperature: ");
// Serial.print(tempC);
// Serial.print("°C ~ ");
// Serial.print(tempF);
// Serial.println("°F");
// }
// // wait a 2 seconds between readings
// delay(2000);
// }
// #if defined(ESP8266)
// #include <ESP8266WiFi.h>
// #include <ESPAsyncTCP.h>
// #elif defined(ESP32)
// #include <WiFi.h>
// #include <AsyncTCP.h>
// #endif
// #include <ESPAsyncWebServer.h>
// #include <AsyncElegantOTA.h>
// const char* ssid = "Pramod";
// const char* password = "Pr@m()d_2208";
// const int wifi = 16;
// AsyncWebServer server(80);
// const int gpioPins[] = {13, 12, 14, 27, 26, 25, 33, 32, 2, 4, 5, 18, 19, 21, 22, 23};
// const int numPins = sizeof(gpioPins) / sizeof(gpioPins[0]);
// bool pinStates[numPins];
// void setup() {
// Serial.begin(115200);
// WiFi.mode(WIFI_STA);
// WiFi.begin(ssid, password);
// Serial.println("");
// pinMode(wifi, OUTPUT);
// // Wait for connection
// while (WiFi.status() != WL_CONNECTED) {
// delay(500);
// Serial.print(".");
// }
// Serial.println("");
// Serial.print("Connected to ");
// Serial.println(ssid);
// Serial.print("IP address: ");
// Serial.println(WiFi.localIP());
// digitalWrite(wifi, HIGH);
// server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
// request->send(200, "text/plain", "Hi! This is a sample response.");
// });
// AsyncElegantOTA.begin(&server); // Start AsyncElegantOTA
// server.begin();
// Serial.println("HTTP server started");
// for (int i = 0; i < numPins; i++) {
// pinMode(gpioPins[i], OUTPUT);
// digitalWrite(gpioPins[i], LOW);
// }
// }
// void loop() {
// for (int i = 0; i < numPins; i++) {
// digitalWrite(gpioPins[i], HIGH);
// delay(500);
// }
// // Turn off each GPIO pin in the reverse order
// for (int i = numPins - 1; i >= 0; i--) {
// digitalWrite(gpioPins[i], LOW);
// delay(500);
// }
// }