Nespresso RGB Sensor / Mbed 2 deprecated EnvoyNespressoEndpointColorDetectorV2

Dependencies:   ColorDetectorV2 ExternalFlashClient SNICInterface mbed-rtos mbed nsdl

Fork of EnvoyNespressoEndpoint by Nespresso RGB Sensor

Committer:
bridadan
Date:
Tue Jun 30 01:37:33 2015 +0000
Revision:
8:7ba790de76bf
Parent:
7:b2df16ff5076
Child:
9:202680169650
Made detection more "picky" by requiring less variance between measurements.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bridadan 0:0782597771bc 1 #include "mbed.h"
bridadan 0:0782597771bc 2 #include "EthernetInterface.h"
bridadan 0:0782597771bc 3 #include "nsdl_support.h"
bridadan 0:0782597771bc 4 #include "dbg.h"
bridadan 0:0782597771bc 5 #include "GroveColourSensor.h"
bridadan 0:0782597771bc 6 #include "ColorDetector.h"
bridadan 0:0782597771bc 7 #include "color_detector.h"
bridadan 7:b2df16ff5076 8 #include <cmath>
bridadan 0:0782597771bc 9
bridadan 0:0782597771bc 10 Serial pc(USBTX, USBRX); // tx, rx
bridadan 0:0782597771bc 11
bridadan 0:0782597771bc 12 // ****************************************************************************
bridadan 0:0782597771bc 13 // Configuration section
bridadan 0:0782597771bc 14
bridadan 6:9e3f6270fcb0 15 // I2C Settings
bridadan 6:9e3f6270fcb0 16 #define COLOR_SENSOR_SCL I2C_SCL
bridadan 6:9e3f6270fcb0 17 #define COLOR_SENSOR_SDA I2C_SDA
bridadan 6:9e3f6270fcb0 18
bridadan 0:0782597771bc 19 // Ethernet configuration
bridadan 0:0782597771bc 20 /* Define this to enable DHCP, otherwise manual address configuration is used */
bridadan 0:0782597771bc 21 #define DHCP
bridadan 0:0782597771bc 22
bridadan 0:0782597771bc 23 /* Manual IP configurations, if DHCP not defined */
bridadan 0:0782597771bc 24 #define IP "0.0.0.0"
bridadan 0:0782597771bc 25 #define MASK "255.255.255.0"
bridadan 0:0782597771bc 26 #define GW "0.0.0.0"
bridadan 0:0782597771bc 27
bridadan 0:0782597771bc 28 // NSP configuration
bridadan 0:0782597771bc 29 /* Change this IP address to that of your mbed Device Server installation */
bridadan 6:9e3f6270fcb0 30 static const char* NSP_ADDRESS = "barista-mdstest.cloudapp.net";
bridadan 0:0782597771bc 31 static const int NSP_PORT = 5683;
bridadan 0:0782597771bc 32 char endpoint_name[] = "nespresso-client";
bridadan 0:0782597771bc 33 uint8_t ep_type[] = {"mbed_device"};
bridadan 0:0782597771bc 34 uint8_t lifetime_ptr[] = {"1200"};
bridadan 0:0782597771bc 35
bridadan 0:0782597771bc 36 // ****************************************************************************
bridadan 0:0782597771bc 37 // Ethernet initialization
bridadan 0:0782597771bc 38
bridadan 0:0782597771bc 39 EthernetInterface eth;
bridadan 0:0782597771bc 40
bridadan 0:0782597771bc 41 static void ethernet_init()
bridadan 0:0782597771bc 42 {
bridadan 0:0782597771bc 43 // Initialize network
bridadan 0:0782597771bc 44 #ifdef DHCP
bridadan 0:0782597771bc 45 NSDL_DEBUG("DHCP in use\r\n");
bridadan 0:0782597771bc 46 eth.init();
bridadan 0:0782597771bc 47 #else
bridadan 0:0782597771bc 48 eth.init(IP, MASK, GW);
bridadan 0:0782597771bc 49 #endif
bridadan 0:0782597771bc 50 if(eth.connect(30000) == 0)
bridadan 0:0782597771bc 51 pc.printf("Connect OK\n\r");
bridadan 0:0782597771bc 52
bridadan 0:0782597771bc 53 NSDL_DEBUG("IP Address:%s ", eth.getIPAddress());
bridadan 0:0782597771bc 54 }
bridadan 0:0782597771bc 55
bridadan 0:0782597771bc 56 // ****************************************************************************
bridadan 0:0782597771bc 57 // NSP initialization
bridadan 0:0782597771bc 58
bridadan 0:0782597771bc 59 UDPSocket server;
bridadan 0:0782597771bc 60 Endpoint nsp;
bridadan 0:0782597771bc 61
bridadan 0:0782597771bc 62 static void nsp_init()
bridadan 0:0782597771bc 63 {
bridadan 0:0782597771bc 64 server.init();
bridadan 0:0782597771bc 65 server.bind(NSP_PORT);
bridadan 0:0782597771bc 66
bridadan 0:0782597771bc 67 nsp.set_address(NSP_ADDRESS, NSP_PORT);
bridadan 0:0782597771bc 68
bridadan 0:0782597771bc 69 NSDL_DEBUG("name: %s", endpoint_name);
bridadan 0:0782597771bc 70 NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
bridadan 0:0782597771bc 71 }
bridadan 0:0782597771bc 72
bridadan 0:0782597771bc 73 // ****************************************************************************
bridadan 0:0782597771bc 74 // Resource creation
bridadan 0:0782597771bc 75
bridadan 0:0782597771bc 76 static int create_resources()
bridadan 0:0782597771bc 77 {
bridadan 0:0782597771bc 78 sn_nsdl_resource_info_s *resource_ptr = NULL;
bridadan 0:0782597771bc 79
bridadan 0:0782597771bc 80 NSDL_DEBUG("Creating resources");
bridadan 0:0782597771bc 81
bridadan 0:0782597771bc 82 // Create resources
bridadan 0:0782597771bc 83 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
bridadan 0:0782597771bc 84 if(!resource_ptr)
bridadan 0:0782597771bc 85 return 0;
bridadan 0:0782597771bc 86 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
bridadan 0:0782597771bc 87
bridadan 0:0782597771bc 88 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
bridadan 0:0782597771bc 89 if(!resource_ptr->resource_parameters_ptr)
bridadan 0:0782597771bc 90 {
bridadan 0:0782597771bc 91 nsdl_free(resource_ptr);
bridadan 0:0782597771bc 92 return 0;
bridadan 0:0782597771bc 93 }
bridadan 0:0782597771bc 94 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
bridadan 0:0782597771bc 95
bridadan 0:0782597771bc 96 // Dynamic resources
bridadan 0:0782597771bc 97 create_color_detector_resource(resource_ptr);
bridadan 0:0782597771bc 98
bridadan 0:0782597771bc 99 // Register with NSP
bridadan 6:9e3f6270fcb0 100 register_endpoint(true);
bridadan 0:0782597771bc 101
bridadan 0:0782597771bc 102 nsdl_free(resource_ptr->resource_parameters_ptr);
bridadan 0:0782597771bc 103 nsdl_free(resource_ptr);
bridadan 0:0782597771bc 104 return 1;
bridadan 0:0782597771bc 105 }
bridadan 0:0782597771bc 106
bridadan 0:0782597771bc 107 // ****************************************************************************
bridadan 0:0782597771bc 108 // Program entry point
bridadan 0:0782597771bc 109
bridadan 0:0782597771bc 110 int main()
bridadan 0:0782597771bc 111 {
bridadan 0:0782597771bc 112 NSDL_DEBUG("mbed Nespresso Demo\n");
bridadan 0:0782597771bc 113
bridadan 0:0782597771bc 114 // Begin Color Sensor init
bridadan 0:0782597771bc 115
bridadan 0:0782597771bc 116 // First, ensure I2C bus is released by toggling clock (fixes reset errors)
bridadan 6:9e3f6270fcb0 117 DigitalOut scl_dummy(COLOR_SENSOR_SCL);
bridadan 0:0782597771bc 118
bridadan 0:0782597771bc 119 for (int i = 0; i < 100; i++) {
bridadan 0:0782597771bc 120 scl_dummy = !scl_dummy;
bridadan 0:0782597771bc 121 wait_us(2);
bridadan 0:0782597771bc 122 }
bridadan 0:0782597771bc 123
bridadan 0:0782597771bc 124 // Next, initialize I2C
bridadan 6:9e3f6270fcb0 125 I2C i2c(COLOR_SENSOR_SDA, COLOR_SENSOR_SCL);
bridadan 0:0782597771bc 126
bridadan 0:0782597771bc 127 // Create color sensor instance
bridadan 0:0782597771bc 128 GroveColourSensor colorSensor(&i2c);
bridadan 0:0782597771bc 129
bridadan 0:0782597771bc 130 // Various config
bridadan 0:0782597771bc 131 colorSensor.powerUp();
bridadan 0:0782597771bc 132 colorSensor.setGain(1);
bridadan 0:0782597771bc 133 colorSensor.setBlockRead();
bridadan 0:0782597771bc 134
bridadan 0:0782597771bc 135 // Create color detector
bridadan 8:7ba790de76bf 136 ColorDetector detector(&colorSensor, 15, 3, 2, 256);
bridadan 0:0782597771bc 137 detector.setBaseline();
bridadan 0:0782597771bc 138
bridadan 0:0782597771bc 139 // Pass reference to color detector
bridadan 0:0782597771bc 140 set_color_detector(&detector);
bridadan 0:0782597771bc 141
bridadan 0:0782597771bc 142 // Initialize Ethernet interface first
bridadan 0:0782597771bc 143 ethernet_init();
bridadan 0:0782597771bc 144
bridadan 0:0782597771bc 145 // Initialize NSP node
bridadan 0:0782597771bc 146 nsp_init();
bridadan 0:0782597771bc 147
bridadan 0:0782597771bc 148 // Initialize NSDL stack
bridadan 0:0782597771bc 149 nsdl_init();
bridadan 0:0782597771bc 150
bridadan 0:0782597771bc 151 // Create NSDL resources
bridadan 0:0782597771bc 152 create_resources();
bridadan 0:0782597771bc 153
bridadan 0:0782597771bc 154 nsdl_event_loop_init();
bridadan 0:0782597771bc 155
bridadan 0:0782597771bc 156 while(true) {
bridadan 0:0782597771bc 157 // Check if any nsdl events need to be handled
bridadan 0:0782597771bc 158 nsdl_event_loop_run_once();
bridadan 0:0782597771bc 159
bridadan 0:0782597771bc 160 // Sample the color detector and potentially send samples to mDS
bridadan 0:0782597771bc 161 run_color_detector();
bridadan 0:0782597771bc 162 }
bridadan 0:0782597771bc 163 }