arduino-mpduino/mpduino/serial.ino

89 lines
3.3 KiB
C++

/*
SerialEvent occurs whenever a new data comes in the
hardware serial RX. This routine is run between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
void establishContact(){
while (Serial.available() <= 0) {
Serial.println(KEY_RESET); // send an initial string
delay(300);
}
Serial.println(KEY_RESET+KEY_RESET+KEY_RESET+KEY_RESET);
}
void setFromSerial (String inputString) {
//remove newline
inputString = inputString.substring(0, inputString.length() -1);
char operation1 = inputString.charAt(0);
String string = "";
if ( operation1 == KEY_READ ){
//Echo string like: EV means echo volume
switch ( inputString.charAt(1) ) {
case KEY_VOLUME: string = volume; break;
case KEY_TITLE: string = title; break;
case KEY_ARTIST: string = artist; break;
case KEY_ALBUM: string = album; break;
case KEY_REPEAT: string = repeat_bool; break;
case KEY_SHUFFLE: string = shuffle_bool; break;
case KEY_RANDOM: string = random_bool; break;
// case KEY_CONSUME: string = consume_bool; break;
// case KEY_UPDATE: string = updating_bool; break;
// case KEY_SINGLE: string = single_bool; break;
case KEY_PLAYING: string = playing; break;
case KEY_DHT_HUMIDITY: string = humidity; break;
case KEY_DHT_TEMPERATURE: string = temperature; break;
default: string = KEY_ECHO; break;
}
Serial.println(string);
}
else if ( operation1 == KEY_SET ){
bool success = true;
string = inputString.substring(2);
switch ( inputString.charAt(1) ) {
case KEY_VOLUME: volume = string.toInt(); break;
case KEY_TITLE: title = string; break;
case KEY_ARTIST: artist = string; break;
case KEY_ALBUM: album = string; break;
case KEY_REPEAT: repeat_bool = (string != '0'); break;
case KEY_SHUFFLE: shuffle_bool = (string != '0'); break;
case KEY_RANDOM: random_bool = (string != '0'); break;
// case KEY_CONSUME: consume_bool = (string != '0'); break;
// case KEY_UPDATE: updating_bool = (string != '0'); break;
// case KEY_SINGLE: single_bool = (string != '0'); break;
case KEY_PLAYING: playing = (string != '0'); break;
//Echo
case KEY_ECHO: Serial.println(string); break;
default: success = false; break;
}
calcMaxTicks();
Serial.println(int(success), DEC);
}
else Serial.println(-1, DEC);
}
// write to serial from arduino
void writeDHT(float humidity, float temperature){
Serial.println(KEY_DHT_HUMIDITY+String(humidity));
delay(100);
Serial.println(KEY_DHT_TEMPERATURE+String(temperature));
}