--- /dev/null
+/**
+ * Program: find out is the user typed in a leap year. The code assumes
+ * the user is not an idiot and only types in numbers that are a valid
+ * year.
+ * Author: Dr. Purdum, Aug. 7, 2012
+ **/
+void setup()
+{
+ Serial.begin(9600);
+}
+void loop()
+{
+ if (Serial.available() > 0) {
+ int bufferCount;
+ int year;
+ char myData[20];
+ bufferCount = ReadLine(myData);
+ year = atoi(myData);
+ Serial.print("Year: ");
+ Serial.print(year);
+ if (IsLeapYear(year)) {
+ Serial.print(" is ");
+ }
+ else {
+ Serial.print(" is not ");
+ }
+ Serial.println("a leap year");
+ }
+}
+// Convert to int
+/*****
+ * Purpose: Determine if a given year is a leap year
+ * Parameters:
+ * int yr
+ * The year to test
+ * Return value:
+ * int
+ * 1 if the year is a leap year, 0 otherwise
+ *****/
+int IsLeapYear(int yr)
+{
+ if (yr % 4 == 0 && yr % 100 != 0 || yr % 400 == 0) {
+ return 1; // It is a leap year
+ }
+ else {
+ return 0;
+ // not a leap year
+ }
+}
+/*****
+ * Purpose: Read data from serial port until a newline character is read ('\n')
+ * Parameters:
+ * char str[]
+ * character array that will be treated as a nul-terminated string
+ * Return value:
+ * int
+ * the number of characters read for the string
+ * CAUTION: This method will sit here forever if no input is read from the serial
+ * port and no newline character is entered.
+ ****/
+int ReadLine(char str[])
+{
+ char c;
+ int index = 0;
+ while (true) {
+ if (Serial.available() > 0) {
+ c = Serial.read();
+ if (c != '\n') {
+ str[index++] = c;
+ }
+ else {
+ str[index] = '\0'; // null termination character
+ break;
+ }
+ }
+ }
+ return index;
+}
+
+