/*
* WOKWI SIMULATION — Arduino Nano
* Matches Fritzing schematic pin-for-pin.
*
* Buzzer MOSFET Gate: D6 (via 220Ω)
* SD CS: D10
* SD MOSI: D11 (DI on SparkFun board)
* SD MISO: D12 (DO on SparkFun board)
* SD SCK: D13
*
* In Wokwi:
* 1. New Project → Arduino Nano
* 2. Paste this code
* 3. Add components: buzzer, MOSFET, resistor, SD card
* 4. Wire them up (or paste the diagram.json)
* 5. Hit Play
*/
#include <SPI.h>
#include <SD.h>
const int PIN_BUZZER = 6;
const int PIN_SD_CS = 10;
void playTone(int pin, unsigned int freq, unsigned long ms) {
unsigned long halfPeriod = 500000UL / freq;
unsigned long endTime = millis() + ms;
while (millis() < endTime) {
digitalWrite(pin, HIGH);
delayMicroseconds(halfPeriod);
digitalWrite(pin, LOW);
delayMicroseconds(halfPeriod);
}
digitalWrite(pin, LOW);
}
void beepOK() {
playTone(PIN_BUZZER, 2000, 100);
delay(80);
playTone(PIN_BUZZER, 2500, 100);
}
void beepFail() {
playTone(PIN_BUZZER, 400, 500);
}
void beepStartup() {
playTone(PIN_BUZZER, 800, 80);
delay(50);
playTone(PIN_BUZZER, 1200, 80);
delay(50);
playTone(PIN_BUZZER, 1600, 120);
}
// ── Tests ──
bool testBuzzer() {
Serial.println("\n=== TEST 1: Buzzer + MOSFET ===");
Serial.println(" Toggling MOSFET on D6...");
// DC click test
digitalWrite(PIN_BUZZER, HIGH);
delay(200);
digitalWrite(PIN_BUZZER, LOW);
delay(200);
Serial.println(" Playing tones...");
beepStartup();
delay(200);
playTone(PIN_BUZZER, 1000, 300);
Serial.println(" PASS - Buzzer test complete");
return true;
}
bool testSD() {
Serial.println("\n=== TEST 2: SD Card (SPI) ===");
Serial.println(" CS=D10, MOSI=D11, MISO=D12, SCK=D13");
Serial.println(" Initializing...");
if (!SD.begin(PIN_SD_CS)) {
Serial.println(" FAIL - SD card not detected!");
Serial.println(" Check: card inserted? wires correct?");
return false;
}
Serial.println(" SD card OK!");
// Write
if (SD.exists("test.txt")) SD.remove("test.txt");
File f = SD.open("test.txt", FILE_WRITE);
if (!f) {
Serial.println(" FAIL - can't create file!");
return false;
}
f.println("Hello from simulation!");
f.println("All connections verified.");
f.print("Boot time: ");
f.print(millis());
f.println(" ms");
f.close();
Serial.println(" Wrote test.txt");
// Read back
f = SD.open("test.txt");
if (!f) {
Serial.println(" FAIL - can't read file!");
return false;
}
Serial.println(" --- File contents ---");
while (f.available()) {
Serial.write(f.read());
}
Serial.println(" --- End ---");
f.close();
Serial.println(" PASS - SD read/write working!");
return true;
}
// ── Setup ──
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(PIN_BUZZER, OUTPUT);
digitalWrite(PIN_BUZZER, LOW);
Serial.println("========================================");
Serial.println(" CIRCUIT TEST - Arduino Nano");
Serial.println(" SD Card + MOSFET Buzzer");
Serial.println("========================================");
bool bz = testBuzzer();
delay(500);
bool sd = testSD();
delay(500);
Serial.println("\n========== RESULTS ==========");
Serial.println(" Buzzer: " + String(bz ? "PASS" : "FAIL"));
Serial.println(" SD: " + String(sd ? "PASS" : "FAIL"));
Serial.println("=============================");
if (bz && sd) {
Serial.println(" ALL TESTS PASSED!");
beepOK();
} else {
Serial.println(" SOME TESTS FAILED");
beepFail();
}
Serial.println("\n Logging to SD every 5 sec...\n");
}
// ── Loop ──
unsigned long lastLog = 0;
int count = 0;
void loop() {
if (millis() - lastLog >= 5000) {
lastLog = millis();
count++;
File log = SD.open("log.csv", FILE_WRITE);
if (log) {
if (count == 1) log.println("entry,ms,sec");
log.print(count);
log.print(",");
log.print(millis());
log.print(",");
log.println(millis() / 1000);
log.close();
Serial.println("[LOG #" + String(count) + "] " +
String(millis() / 1000) + "s uptime");
playTone(PIN_BUZZER, 1800, 50);
}
}
}
Loading
pi-pico
pi-pico