int SPEAKERPIN = PIN_PA02; const int BUFFER_SIZE = 4; char buf[BUFFER_SIZE]; int bufIterator = 0; int frequency = 100; // beep every x ms int distanceBuf[5]; long prevBeep = 0; void setup() { delay(2000); pinMode(SPEAKERPIN, OUTPUT); delay(500); tone(SPEAKERPIN, 349, 200); delay(200); tone(SPEAKERPIN, 392, 200); delay(200); tone(SPEAKERPIN, 523, 200); delay(500); Serial.begin(9600); Serial.write("Serial ready.."); Serial1.begin(9600); Serial1.write("Serial1 ready.."); } void loop() { delay(20); if (Serial1.available() > 0) { Serial1.readBytesUntil('\n', buf, BUFFER_SIZE); int distance = atoi(buf); clearBuf(); distanceBuf[bufIterator] = distance; bufIterator = (bufIterator + 1) % 5; determineFreq(); Serial.println(frequency); } determineBeep(); } void determineFreq() { int result = 0; for (int i = 0; i < 5; i++) { result += distanceBuf[i]; } if(result > 0) { frequency = (result / 5); } } void clearBuf() { for (int i = 0; i < BUFFER_SIZE; i++) { buf[i] = 0; } } void determineBeep() { long cFrequency = frequency * 10; if(millis() - prevBeep > cFrequency) { tone(SPEAKERPIN, 700, 75); prevBeep = millis(); } }