adding code from gemini AI

Create a code to blonk the IP address if prompted for it and display 99 when the wifi is connected
This commit is contained in:
2025-12-01 11:33:41 +00:00
commit 7bbc49a765
+137
View File
@@ -0,0 +1,137 @@
#include <WiFi.h>
// --- Configuration ---
const char* ssid = "YOUR_SSID"; // Your WiFi network SSID
const char* password = "YOUR_PASSWORD"; // Your WiFi network password
const int LED_PIN = 15; // GPIO pin for the LED
const int BUTTON_PIN = 4; // GPIO pin for the button
const int DOT_DURATION = 200; // Duration of a Morse code dot in milliseconds
// Morse code map for numbers 0-9 and the dot character '.'
// The index in the array corresponds to the digit (0-9).
const char* morseCodes[] = {
"-----", // 0
".----", // 1
"..---", // 2
"...--", // 3
"....-", // 4
".....", // 5
"-....", // 6
"--...", // 7
"---..", // 8
"----.", // 9
".-.-.-" // . (period)
};
// --- Variables ---
IPAddress privateIP;
bool buttonPressed = false;
// Function prototypes
void blinkMorse(char character);
void blinkDot();
void blinkDash();
void checkButton();
void signalWifiConnected();
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
// Use internal pull-up resistor for the button pin
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.println("\nConnecting to WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LED_PIN, HIGH); // Quick blink while trying to connect
delay(100);
digitalWrite(LED_PIN, LOW);
delay(400);
Serial.print(".");
}
Serial.println("\nWiFi connected.");
privateIP = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(privateIP);
// Call the new function to signal successful connection
signalWifiConnected();
}
void loop() {
checkButton();
if (buttonPressed) {
Serial.println("Button pressed. Blinking IP in Morse Code: " + privateIP.toString());
String ipStr = privateIP.toString();
for (int i = 0; i < ipStr.length(); i++) {
blinkMorse(ipStr[i]);
delay(DOT_DURATION * 3); // Gap between characters (3 units)
}
buttonPressed = false; // Reset the flag after blinking
Serial.println("Morse code sequence complete. Waiting for button press.");
delay(DOT_DURATION * 7); // Gap between words/sequences (7 units)
}
}
// Function to blink the digit '9' twice when WiFi connects
void signalWifiConnected() {
// '9' in Morse is "----."
for (int j = 0; j < 2; j++) {
blinkMorse('9');
// Short pause between the two '9' signals
delay(DOT_DURATION * 5);
}
Serial.println("WiFi connection signal complete (9 twice).");
}
void checkButton() {
// Read the state of the button. It's LOW when pressed due to pull-up resistor.
if (digitalRead(BUTTON_PIN) == LOW) {
// Debounce delay
delay(50);
if (digitalRead(BUTTON_PIN) == LOW) {
buttonPressed = true;
// Wait until the button is released to prevent multiple triggers
while(digitalRead(BUTTON_PIN) == LOW);
}
}
}
void blinkMorse(char character) {
int index = -1;
if (character >= '0' && character <= '9') {
index = character - '0';
} else if (character == '.') {
index = 10; // Index for the period in the morseCodes array
} else {
return; // Ignore other characters
}
const char* morse = morseCodes[index];
for (int i = 0; i < strlen(morse); i++) {
if (morse[i] == '.') {
blinkDot();
} else {
blinkDash();
}
delay(DOT_DURATION); // Gap between dots and dashes in a character (1 unit)
}
}
void blinkDot() {
digitalWrite(LED_PIN, HIGH);
delay(DOT_DURATION); // Dot duration (1 unit)
digitalWrite(LED_PIN, LOW);
}
void blinkDash() {
digitalWrite(LED_PIN, HIGH);
delay(DOT_DURATION * 3); // Dash duration (3 units)
digitalWrite(LED_PIN, LOW);
}