This demonstrates some of the capabilities of the MAX44000. It is written to work with the ARD2PMD adapter board and the MAX44000PMB1. It uses the standard Arduino pin names and will compile for most Arduino form-factor mbed boards.

Dependencies:   ard2pmod mbed

This demonstrates some of the capabilities of the MAX44000.

This is written to work with the ARD2PMD adapter board and the MAX44000PMB1. It uses the standard Arduino pin names and it will compile for most Arduino form-factor mbed boards.

Some boards use D13 for an LED signal, so this example uses the second row (row B, pins 7 through 12) of the Pmod connector.

  • LED1 toggles when something is first detected by the proximity sensor.
  • LED2 indicates when the Ambient Light Sensor reads grater than alsLim.
  • LED3 will stay on whenever something is detected by the proximity sensor and stay on for an additional 5s after it is no longer detected.

The following boards have been tested to work:

  • MAX32600MBED
  • FRDM-KL25Z
  • FRDM-K64F
  • Seeeduino Arch (LEDs inverted)
  • Seeeduino Arch Pro
  • ST Nucleo F401RE (only one LED, inverted)

main.cpp

Committer:
gsteiert
Date:
2014-06-22
Revision:
1:03aeb304d3b3
Parent:
0:803011eae289
Child:
2:405cc6627ffb

File content as of revision 1:03aeb304d3b3:

#include "mbed.h"
#include "MAX14661.h"

MAX14661 mux(D14, D15);
I2C i2c(D14, D15);
DigitalOut r(LED1);
DigitalOut g(LED2);
DigitalOut b(LED3);
//DigitalIn pa3(D12);  // Set as input to remove load from PA3
//DigitalIn pa4(D13);  // Set as input to remove load from PA4
DigitalIn pb3(D6);  // Set as input to remove load from PB3
DigitalIn pb4(D7);  // Set as input to remove load from PB4

const int alsAddr = 0x94;
const char alsLim = 0x01;

int main()
{
    char cmd[2];

/*    //  SDA(D14) + PA4(D13) + PB4(D7)  ,  SCL(D15) + PA3(D12) + PB3(D6)
    mux.setAB((MAX14661::SW10 | MAX14661::SW11 | MAX14661::SW08),
              (MAX14661::SW09 | MAX14661::SW12 | MAX14661::SW07));
*/

    //           SDA (D14)   +   PB4 (D7)         SCL (D15)   +   PB3 (D6)
    mux.setAB((MAX14661::SW10 | MAX14661::SW08),
              (MAX14661::SW09 | MAX14661::SW07));

    cmd[0] = 0x02;  // Receive Register
    cmd[1] = 0xFF;  // 1.56ms, 128x
    i2c.write(alsAddr, cmd, 2);

    cmd[0] = 0x03;  // Transmit Register
    cmd[1] = 0x0F;  // 110mA
    i2c.write(alsAddr, cmd, 2);
    
    cmd[0] = 0x01;  // Config Register
    cmd[1] = 0x10;  // ALS/Prox Mode
    i2c.write(alsAddr, cmd, 2);

    bool lastProx = false;
    int offDelay = 0;
    r = false;
    g = false;
    b = false;

    while (true) {
        wait (0.02);
        cmd[0] = 0x04; // ALS Data Register
        i2c.write(alsAddr, cmd, 1);
        i2c.read(alsAddr, cmd, 1);
        g = (cmd[0] < alsLim);

        cmd[0] = 0x16; // Prox Data Register
        i2c.write(alsAddr, cmd, 1);
        i2c.read(alsAddr, cmd, 1);
        if (cmd[0]) {
            if (!lastProx) {
                r = !r;
            }
            lastProx = true;
            offDelay = 250;
            b = false;
        } else {
            lastProx = false;
        }
        if (offDelay > 0) { offDelay -= 1; }
        else { b = true; }
    }
}