Skip to content

Instantly share code, notes, and snippets.

@recyclerobot
Last active March 8, 2021 00:02
Show Gist options
  • Save recyclerobot/0a11aeea8f0a84a4e992 to your computer and use it in GitHub Desktop.
Save recyclerobot/0a11aeea8f0a84a4e992 to your computer and use it in GitHub Desktop.
int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout){
uint8_t x=0, answer=0;
char response[100];
unsigned long previous;
memset(response, '\0', 100); // Clean response buffer
delay(100); // Delay to be sure no passed commands interfere
while( Serial.available() > 0) Serial.read(); // Wait for clean input buffer
Serial.println(ATcommand); // Send the AT command
previous = millis();
// this loop waits for the answer
do{
// if there are data in the UART input buffer, reads it and checks for the asnwer
if(Serial.available() != 0){
response[x] = Serial.read();
x++;
// check if the desired answer is in the response of the module
if (strstr(response, expected_answer) != NULL){
answer = 1;
}
}
// Waits for the answer with time out
} while((answer == 0) && ((millis() - previous) < timeout));
return answer;
}
@peterwliu
Copy link

hello, when i see your code also i think this will work but, when i implement the code for example:
answer = sendATcommand("AT", "OK", 2000);

at serial monitor only AT and keep repeating , there's no "expected_answer" what am i doing wrong?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment