serialport-0.4.7: tests/haskell_serial_test/haskell_serial_test.ino
static int test_running;
static uint8_t expected_char;
static const uint8_t lowest_expected_char = 0x00;
static const uint8_t highest_expected_char = 0xff;
// the setup routine runs once when you press reset:
void setup()
{
// initialize the digital pin as an output.
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void ConsumeAllSerial()
{
while( Serial.available() )
Serial.read();
}
// the loop routine runs over and over again forever:
void loop()
{
if( Serial.available() )
{
int i = Serial.read();
switch(i)
{
case 'a':
Serial.write(i);
Serial1.end();
Serial1.begin(1200);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'b':
Serial.write(i);
Serial1.end();
Serial1.begin(2400);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'c':
Serial.write(i);
Serial1.end();
Serial1.begin(4800);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'd':
Serial.write(i);
Serial1.end();
Serial1.begin(9600);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'e':
Serial.write(i);
Serial1.end();
Serial1.begin(19200);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'f':
Serial.write(i);
Serial1.end();
Serial1.begin(57600);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'g':
Serial.write(i);
Serial1.end();
Serial1.begin(115200);
ConsumeAllSerial();
test_running = 1;
expected_char = lowest_expected_char;
break;
case 'h':
Serial.write(i);
Serial1.end();
Serial1.begin(9600);
ConsumeAllSerial();
test_running = 2;
break;
}
}
if( test_running == 1 )
{
while( Serial1.available() )
{
uint8_t i = Serial1.read() & 0xff;
if( i == expected_char)
{
Serial1.write(expected_char);
if( expected_char == highest_expected_char )
{
// test successfull
Serial.println("ok");
Serial1.flush();
Serial1.end();
test_running = 0;
}
else
expected_char++;
}
else
{
Serial.print("expected char('");
Serial.print(expected_char, HEX);
Serial.print("') got ('");
Serial.print(i, HEX);
Serial.println("') test failed");
}
}
}
else if( test_running == 2 )
{
while( Serial1.available() )
{
uint8_t i = Serial1.read() & 0xff;
switch( i )
{
case 'a':
Serial1.write('a');
Serial1.write('A');
break;
case 'b':
Serial1.write('b');
delay(50);
Serial1.write('B');
break;
case 'c':
Serial1.write('c');
delay(150);
Serial1.write('C');
break;
case 'd':
Serial1.write('d');
delay(200);
Serial1.write('D');
break;
case 'e':
// 50 ms delay
delay(500);
Serial1.write('E');
break;
default:
test_running = 0;
break;
}
}
}
}