Project includes single file led.ino which contains 3 functions: setup(), loop() and ProcessLeds().
Function setup() is called once when a firmware starts. It configures serial port UART1 as 115200, 8N1. Also it prints greeting message to serial port.
Function loop() contains software logic. The logic is very simple: call ProcessLeds() function for each switch/leds group on 8051 I/O Module (red, orange, yellow, green) and wait 5 seconds before next iteration.
Function ProcessLeds() executes code for each switch/leds group:
Each switch/leds group configured using special structure defined in led.h file. each group have its name and also set of pins. Some pins can be marked as UNUSED_PIN. This means that pin cannot be controlled from software. All groups configured as global variables in the beginning of led.ino file.
Please see MINI-MAX Microcontroller Board Family Interchangeable Port Mapping for more information.
When software is running you should see state of switches in console. Also some leds on 8051 I/O Module should be on.
Toolkit:AVR Development System
Location:\bipom\devtools\Arduino\ATmega2560\Examples\Led\
#include "led.h" const IO_GROUP X3_RED = { "X3 LCD CONNECTOR, RED", { {45,"CTRL","HL1","S1-1"}, {44,"READ","HL3","S1-2"}, {43,"STROBE","HL5","S1-3"}, {UNUSED_PIN,"N/C","HL7","S1-4"}, {49,"LD0","HL9","S1-5"}, {48,"LD1","HL11","S1-6"}, {47,"LD2","HL13","S1-7"}, {46,"LD3","HL15","S1-8"} } }; const IO_GROUP X6_ORANGE = { "X6 EXPANSION CONNECTOR, ORANGE", { {11,"IO1","HL17","S2-1"}, {10,"IO0","HL19","S2-2"}, {13,"IO3","HL21","S2-3"}, {12,"IO2","HL23","S2-4"}, {38,"IO5","HL25","S2-5"}, {UNUSED_PIN,"IO4","HL27","S2-6"}, {21,"I2C_SCL","HL29","S2-7"}, {20,"I2C_SDA","HL31","S2-8"} } }; const IO_GROUP X4_YELLOW= { "X4 KEYPAD CONNECTOR, YELLOW", { {62,"KEY0","HL2","S3-1"}, {63,"KEY0","HL4","S3-2"}, {64,"KEY0","HL6","S3-3"}, {65,"KEY0","HL8","S3-4"}, {7,"KEY0","HL10","S3-5"}, {8,"KEY0","HL12","S3-6"}, {9,"KEY0","HL14","S3-7"}, {UNUSED_PIN,"KEY0","HL16","S3-8"} } }; const IO_GROUP X6_GREEN = { "X6 EXPANSION CONNECTOR, GREEN", { {17,"PL4","HL18","S4-1"}, {16,"PL4","HL20","S4-2"}, {UNUSED_PIN,"PL4","HL22","S4-3"}, {50,"PL4","HL24","S4-4"}, {52,"PL4","HL26","S4-5"}, {53,"PL4","HL28","S4-6"}, {30,"PL4","HL30","S4-7"}, {51,"PL4","HL32","S4-8"} } }; void setup() { Serial1.begin(115200); // prints string with ending line break Serial1.println("BiPOM Arduino"); Serial1.println("LED Example"); } void loop() { // RED LED group of input pins, X3 LCD connector ProcessLeds((void*)&X3_RED); // ORANGE LED group of input pins, X7 EXPANSION connector ProcessLeds((void*)&X6_ORANGE); // YELLOW LED group of input pins, X4 KEYPAD connector ProcessLeds((void*)&X4_YELLOW); // GREEN LED group of output pins, X7 EXPANSION connector ProcessLeds((void*)&X6_GREEN); delay(5000); } void ProcessLeds(void *pGroup) { int ndx; IO_GROUP *pGrp = (IO_GROUP *)pGroup; Serial1.println(""); Serial1.println(""); Serial1.print("( "); Serial1.print(pGrp->name); Serial1.println(" LED group )"); for(ndx=0; ndx<MAX_PIN_PER_GROUP; ndx++) { Serial1.print("Switch "); Serial1.print(pGrp->pin[ndx].nameSwitch); if (pGrp->pin[ndx].numPin == UNUSED_PIN) { Serial1.println(" is not connected"); continue; } pinMode(pGrp->pin[ndx].numPin, INPUT); int state = digitalRead(pGrp->pin[ndx].numPin); pinMode(pGrp->pin[ndx].numPin, OUTPUT); digitalWrite(pGrp->pin[ndx].numPin, HIGH); if(state == HIGH) { Serial1.println(" is OFF"); } else { Serial1.println(" is ON"); } } }