mirror of
				https://github.com/eclipse/upm.git
				synced 2025-10-31 07:04:14 +03:00 
			
		
		
		
	examples: Remove heap allocation from C++ examples
Cleanup of UPM C++ examples.  Switched from heap allocation to
stack allocation when possible.  This simplifies the samples since it
removes the need for explicit memory management.  A script was used to
identify and replace pointer use.  To simplify the replace script, I
re-formatted the C++ examples using the UPM .clang-format file.
Unfortuantely this changes the look of the UPM C++ examples to a large
degree.  However, examples will now have a standard look/feel and
uniform formatting.
    * Ran clang-format w/provided UPM .clang-format file
    * Removed new's/delete's whenever possible (left those in interface
      examples)
    * Added IIO sensor library implementation of callback void* arg
    * Converted all sleeps to upm defined delays (added header when
      necessary)
    * Scrubbed CXX example includes
Signed-off-by: Noel Eck <noel.eck@intel.com>
			
			
This commit is contained in:
		 Noel Eck
					Noel Eck
				
			
				
					committed by
					
						 Mihai Tudor Panu
						Mihai Tudor Panu
					
				
			
			
				
	
			
			
			 Mihai Tudor Panu
						Mihai Tudor Panu
					
				
			
						parent
						
							bd6e4ec786
						
					
				
				
					commit
					5cefe7f5f3
				
			| @@ -99,7 +99,7 @@ function (add_example example_src) | ||||
|  | ||||
|     # Add each dependency to the library target | ||||
|     foreach(_dep_target ${lib_target_names}) | ||||
|         target_link_libraries(${this_target_name} ${_dep_target} ${CMAKE_THREAD_LIBS_INIT}) | ||||
|         target_link_libraries(${this_target_name} ${_dep_target} ${CMAKE_THREAD_LIBS_INIT} utilities-c) | ||||
|     endforeach () | ||||
| endfunction (add_example example_src) | ||||
|  | ||||
|   | ||||
| @@ -22,55 +22,58 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stddef.h> | ||||
|  | ||||
| #include "a110x.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| // Our pulse counter | ||||
| volatile unsigned int counter = 0; | ||||
|  | ||||
| // Our interrupt handler | ||||
| void hallISR(void *arg) | ||||
| void | ||||
| hallISR(void* arg) | ||||
| { | ||||
|   counter++; | ||||
|     counter++; | ||||
| } | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an A110X sensor on digital pin D2 | ||||
|   upm::A110X* hall = new upm::A110X(2); | ||||
|    | ||||
|   // This example uses a user-supplied interrupt handler to count | ||||
|   // pulses that occur when a magnetic field of the correct polarity | ||||
|   // is detected.  This could be used to measure the rotations per | ||||
|   // minute (RPM) of a rotor for example. | ||||
|     //! [Interesting] | ||||
|     // Instantiate an A110X sensor on digital pin D2 | ||||
|     upm::A110X hall(2); | ||||
|  | ||||
|   hall->installISR(hallISR, NULL); | ||||
|     // This example uses a user-supplied interrupt handler to count | ||||
|     // pulses that occur when a magnetic field of the correct polarity | ||||
|     // is detected.  This could be used to measure the rotations per | ||||
|     // minute (RPM) of a rotor for example. | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "Pulses detected: " << counter << endl; | ||||
|     hall.installISR(hallISR, NULL); | ||||
|  | ||||
|       sleep(1); | ||||
|     while (shouldRun) { | ||||
|         cout << "Pulses detected: " << counter << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete hall; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,46 +22,46 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "a110x.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an A110X sensor on digital pin D2 | ||||
|   upm::A110X* hall = new upm::A110X(2); | ||||
|    | ||||
|   // check every second for the presence of a magnetic field (south | ||||
|   // polarity) | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       bool val = hall->magnetDetected(); | ||||
|       if (val) | ||||
|         cout << "Magnet (south polarity) detected." << endl; | ||||
|       else | ||||
|         cout << "No magnet detected." << endl; | ||||
|     //! [Interesting] | ||||
|     // Instantiate an A110X sensor on digital pin D2 | ||||
|     upm::A110X hall(2); | ||||
|  | ||||
|       sleep(1); | ||||
|     // check every second for the presence of a magnetic field (south | ||||
|     // polarity) | ||||
|     while (shouldRun) { | ||||
|         bool val = hall.magnetDetected(); | ||||
|         if (val) | ||||
|             cout << "Magnet (south polarity) detected." << endl; | ||||
|         else | ||||
|             cout << "No magnet detected." << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete hall; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -21,41 +21,42 @@ | ||||
|  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|   | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "abp.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     // Instantiate an ABP sensor on i2c bus 0 | ||||
|     upm::ABP* abp = new upm::ABP(0, ABP_DEFAULT_ADDRESS); | ||||
|     upm::ABP abp(0, ABP_DEFAULT_ADDRESS); | ||||
|     while (shouldRun) { | ||||
|         abp->update(); | ||||
|         cout << "Retrieved pressure: " << abp->getPressure() << endl; | ||||
|         cout << "Retrieved Temperature: " << abp->getTemperature() << endl; | ||||
|         abp.update(); | ||||
|         cout << "Retrieved pressure: " << abp.getPressure() << endl; | ||||
|         cout << "Retrieved Temperature: " << abp.getTemperature() << endl; | ||||
|  | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     delete abp; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,44 +22,45 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "ad8232.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Ad8232 sensor on digital pins 10 (LO+), 11 (LO-) | ||||
|   // and an analog pin, 0 (OUTPUT) | ||||
|   upm::AD8232 *ad8232 = new upm::AD8232(10, 11, 0); | ||||
|    | ||||
|   // Output the raw numbers from the ADC, for plotting elsewhere. | ||||
|   // A return of 0 indicates a Lead Off (LO) condition. | ||||
|   // In theory, this data could be fed to software like Processing  | ||||
|   // (https://www.processing.org/) to plot the data just like an  | ||||
|   // EKG you would see in a hospital. | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << ad8232->value() << endl;       | ||||
|       usleep(1000); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Ad8232 sensor on digital pins 10 (LO+), 11 (LO-) | ||||
|     // and an analog pin, 0 (OUTPUT) | ||||
|     upm::AD8232 ad8232(10, 11, 0); | ||||
|  | ||||
|     // Output the raw numbers from the ADC, for plotting elsewhere. | ||||
|     // A return of 0 indicates a Lead Off (LO) condition. | ||||
|     // In theory, this data could be fed to software like Processing | ||||
|     // (https://www.processing.org/) to plot the data just like an | ||||
|     // EKG you would see in a hospital. | ||||
|     while (shouldRun) { | ||||
|         cout << ad8232.value() << endl; | ||||
|         upm_delay_us(1000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete ad8232; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,61 +22,56 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
|  | ||||
| #include "adafruitms1438.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|   // Instantiate an Adafruit MS 1438 on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an Adafruit MS 1438 on I2C bus 0 | ||||
|  | ||||
|   upm::AdafruitMS1438 *ms =  | ||||
|     new upm::AdafruitMS1438(ADAFRUITMS1438_I2C_BUS,  | ||||
|                             ADAFRUITMS1438_DEFAULT_I2C_ADDR); | ||||
|     upm::AdafruitMS1438 ms(ADAFRUITMS1438_I2C_BUS, ADAFRUITMS1438_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // Setup for use with a stepper motor connected to the M1 & M2 ports | ||||
|     // Setup for use with a stepper motor connected to the M1 & M2 ports | ||||
|  | ||||
|   // set a PWM period of 50Hz | ||||
|     // set a PWM period of 50Hz | ||||
|  | ||||
|   // disable first, to be safe | ||||
|   ms->disableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|     // disable first, to be safe | ||||
|     ms.disableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|  | ||||
|   // configure for a NEMA-17, 200 steps per revolution | ||||
|   ms->stepConfig(AdafruitMS1438::STEPMOTOR_M12, 200); | ||||
|     // configure for a NEMA-17, 200 steps per revolution | ||||
|     ms.stepConfig(AdafruitMS1438::STEPMOTOR_M12, 200); | ||||
|  | ||||
|   // set speed at 10 RPM's | ||||
|   ms->setStepperSpeed(AdafruitMS1438::STEPMOTOR_M12, 10); | ||||
|   ms->setStepperDirection(AdafruitMS1438::STEPMOTOR_M12,  | ||||
|                           AdafruitMS1438::DIR_CW); | ||||
|     // set speed at 10 RPM's | ||||
|     ms.setStepperSpeed(AdafruitMS1438::STEPMOTOR_M12, 10); | ||||
|     ms.setStepperDirection(AdafruitMS1438::STEPMOTOR_M12, AdafruitMS1438::DIR_CW); | ||||
|  | ||||
|   // enable | ||||
|   cout << "Enabling..." << endl; | ||||
|   ms->enableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|     // enable | ||||
|     cout << "Enabling..." << endl; | ||||
|     ms.enableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|  | ||||
|   cout << "Rotating 1 full revolution at 10 RPM speed." << endl; | ||||
|   ms->stepperSteps(AdafruitMS1438::STEPMOTOR_M12, 200); | ||||
|     cout << "Rotating 1 full revolution at 10 RPM speed." << endl; | ||||
|     ms.stepperSteps(AdafruitMS1438::STEPMOTOR_M12, 200); | ||||
|  | ||||
|   cout << "Sleeping for 2 seconds..." << endl; | ||||
|   sleep(2); | ||||
|   cout << "Rotating 1/2 revolution in opposite direction at 10 RPM speed."  | ||||
|        << endl; | ||||
|     cout << "Sleeping for 2 seconds..." << endl; | ||||
|     upm_delay(2); | ||||
|     cout << "Rotating 1/2 revolution in opposite direction at 10 RPM speed." << endl; | ||||
|  | ||||
|   ms->setStepperDirection(AdafruitMS1438::STEPMOTOR_M12,  | ||||
|                           AdafruitMS1438::DIR_CCW); | ||||
|   ms->stepperSteps(AdafruitMS1438::STEPMOTOR_M12, 100); | ||||
|     ms.setStepperDirection(AdafruitMS1438::STEPMOTOR_M12, AdafruitMS1438::DIR_CCW); | ||||
|     ms.stepperSteps(AdafruitMS1438::STEPMOTOR_M12, 100); | ||||
|  | ||||
|   cout << "Disabling..." << endl; | ||||
|   ms->disableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|     cout << "Disabling..." << endl; | ||||
|     ms.disableStepper(AdafruitMS1438::STEPMOTOR_M12); | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete ms; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,54 +22,51 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
|  | ||||
| #include "adafruitms1438.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|   // Instantiate an Adafruit MS 1438 on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an Adafruit MS 1438 on I2C bus 0 | ||||
|  | ||||
|   upm::AdafruitMS1438 *ms =  | ||||
|     new upm::AdafruitMS1438(ADAFRUITMS1438_I2C_BUS,  | ||||
|                             ADAFRUITMS1438_DEFAULT_I2C_ADDR); | ||||
|     upm::AdafruitMS1438 ms(ADAFRUITMS1438_I2C_BUS, ADAFRUITMS1438_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // Setup for use with a DC motor connected to the M3 port | ||||
|     // Setup for use with a DC motor connected to the M3 port | ||||
|  | ||||
|   // set a PWM period of 50Hz | ||||
|   ms->setPWMPeriod(50); | ||||
|     // set a PWM period of 50Hz | ||||
|     ms.setPWMPeriod(50); | ||||
|  | ||||
|   // disable first, to be safe | ||||
|   ms->disableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|     // disable first, to be safe | ||||
|     ms.disableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|  | ||||
|   // set speed at 50% | ||||
|   ms->setMotorSpeed(AdafruitMS1438::MOTOR_M3, 50); | ||||
|   ms->setMotorDirection(AdafruitMS1438::MOTOR_M3, AdafruitMS1438::DIR_CW); | ||||
|     // set speed at 50% | ||||
|     ms.setMotorSpeed(AdafruitMS1438::MOTOR_M3, 50); | ||||
|     ms.setMotorDirection(AdafruitMS1438::MOTOR_M3, AdafruitMS1438::DIR_CW); | ||||
|  | ||||
|   cout << "Spin M3 at half speed for 3 seconds, then reverse for 3 seconds." | ||||
|        << endl; | ||||
|     cout << "Spin M3 at half speed for 3 seconds, then reverse for 3 seconds." << endl; | ||||
|  | ||||
|   ms->enableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|     ms.enableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|  | ||||
|   sleep(3); | ||||
|     upm_delay(3); | ||||
|  | ||||
|   cout << "Reversing M3" << endl; | ||||
|   ms->setMotorDirection(AdafruitMS1438::MOTOR_M3, AdafruitMS1438::DIR_CCW); | ||||
|     cout << "Reversing M3" << endl; | ||||
|     ms.setMotorDirection(AdafruitMS1438::MOTOR_M3, AdafruitMS1438::DIR_CCW); | ||||
|  | ||||
|   sleep(3); | ||||
|     upm_delay(3); | ||||
|  | ||||
|   cout << "Stopping M3" << endl; | ||||
|   ms->disableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|     cout << "Stopping M3" << endl; | ||||
|     ms.disableMotor(AdafruitMS1438::MOTOR_M3); | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete ms; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,56 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Description | ||||
|  * Demo program for Adafruit 16 channel servo shield/controller | ||||
|  * Physical setup for tests is a single servo attached to one channel. | ||||
|  * Note - when 3 or more GWS servos attached results unpredictable. | ||||
|  * Adafruit do recommend a Cap be installed on the board which should alleviate the issue. | ||||
|  * Adafruit do recommend a Cap be installed on the board which should alleviate | ||||
|  * the issue. | ||||
|  * I (and Adafruit) are unable to give any Capacitor sizing data. | ||||
|  */ | ||||
|  | ||||
| #include <iostream> | ||||
|  | ||||
| #include "adafruitss.hpp" | ||||
| #include <unistd.h> | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main() { | ||||
| int | ||||
| main() | ||||
| { | ||||
|     int n; | ||||
|  | ||||
| int n; | ||||
|     //! [Interesting] | ||||
|     upm::adafruitss servos(6, 0x40); | ||||
|  | ||||
| //! [Interesting] | ||||
|   upm::adafruitss* servos = new upm::adafruitss(6,0x40); | ||||
|     for (;;) { | ||||
|         cout << "Setting all to 0" << endl; | ||||
|         for (n = 0; n < 16; n++) | ||||
|             servos.servo(n, 1, 0); // GWS Mini Servo = Type 1. | ||||
|         upm_delay_us(1000000);     // Wait 1 second | ||||
|  | ||||
|   for (;;) | ||||
|   { | ||||
|     cout << "Setting all to 0" << endl; | ||||
|     for (n = 0; n < 16; n++) | ||||
|         servos->servo(n, 1, 0); // GWS Mini Servo = Type 1. | ||||
|     usleep(1000000); // Wait 1 second | ||||
|         cout << "Setting all to 45" << endl; | ||||
|         for (n = 0; n < 16; n++) | ||||
|             servos.servo(n, 1, 45); | ||||
|         upm_delay_us(1000000); // Wait 1 second | ||||
|  | ||||
|     cout << "Setting all to 45" << endl; | ||||
|     for (n = 0; n < 16; n++) | ||||
|         servos->servo(n, 1, 45); | ||||
|     usleep(1000000); // Wait 1 second | ||||
|         cout << "Setting all to 90" << endl; | ||||
|         for (n = 0; n < 16; n++) | ||||
|             servos.servo(n, 1, 90); | ||||
|         upm_delay_us(1000000); // Wait 1 second | ||||
|  | ||||
|     cout << "Setting all to 90" << endl; | ||||
|     for (n = 0; n < 16; n++) | ||||
|         servos->servo(n, 1, 90); | ||||
|     usleep(1000000); // Wait 1 second | ||||
|         cout << "Setting all to 135" << endl; | ||||
|         for (n = 0; n < 16; n++) | ||||
|             servos.servo(n, 1, 135); | ||||
|         upm_delay_us(1000000); // Wait 1 second | ||||
|  | ||||
|     cout << "Setting all to 135" << endl; | ||||
|     for (n = 0; n < 16; n++) | ||||
|         servos->servo(n, 1, 135); | ||||
|     usleep(1000000); // Wait 1 second | ||||
|  | ||||
|     cout << "Setting all to 180" << endl; | ||||
|     for (n = 0; n < 16; n++) | ||||
|         servos->servo(n, 1, 160); | ||||
|     usleep(2000000); // Wait 1 second | ||||
|   } | ||||
| //! [Interesting] | ||||
|   return 0; | ||||
|         cout << "Setting all to 180" << endl; | ||||
|         for (n = 0; n < 16; n++) | ||||
|             servos.servo(n, 1, 160); | ||||
|         upm_delay_us(2000000); // Wait 1 second | ||||
|     } | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,44 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "adc121c021.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an ADC121C021 on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an ADC121C021 on I2C bus 0 | ||||
|  | ||||
|   upm::ADC121C021 *adc = new upm::ADC121C021(ADC121C021_I2C_BUS,  | ||||
|                                              ADC121C021_DEFAULT_I2C_ADDR); | ||||
|     upm::ADC121C021 adc(ADC121C021_I2C_BUS, ADC121C021_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // An analog sensor, such as a Grove light sensor, | ||||
|   // must be attached to the adc  | ||||
|   // Prints the value and corresponding voltage every 50 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       uint16_t val = adc->value(); | ||||
|       cout << "ADC value: " << val << " Volts = "  | ||||
|            << adc->valueToVolts(val) << endl; | ||||
|       usleep(50000); | ||||
|     // An analog sensor, such as a Grove light sensor, | ||||
|     // must be attached to the adc | ||||
|     // Prints the value and corresponding voltage every 50 milliseconds | ||||
|     while (shouldRun) { | ||||
|         uint16_t val = adc.value(); | ||||
|         cout << "ADC value: " << val << " Volts = " << adc.valueToVolts(val) << endl; | ||||
|         upm_delay_us(50000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete adc; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -12,9 +12,12 @@ | ||||
| // This example code runs on an Intel Edison and uses mraa to acquire data | ||||
| // from an ADIS16448. This data is then scaled and printed onto the terminal. | ||||
| // | ||||
| // This software has been tested to connect to an ADIS16448 through a level shifter | ||||
| // such as the TI TXB0104. The SPI lines (DIN, DOUT, SCLK, /CS) are all wired through | ||||
| // the level shifter and the ADIS16448 is also being powered by the Intel Edison. | ||||
| // This software has been tested to connect to an ADIS16448 through a level | ||||
| // shifter | ||||
| // such as the TI TXB0104. The SPI lines (DIN, DOUT, SCLK, /CS) are all wired | ||||
| // through | ||||
| // the level shifter and the ADIS16448 is also being powered by the Intel | ||||
| // Edison. | ||||
| // | ||||
| // Permission is hereby granted, free of charge, to any person obtaining | ||||
| // a copy of this software and associated documentation files (the | ||||
| @@ -36,31 +39,29 @@ | ||||
| // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| // | ||||
| ////////////////////////////////////////////////////////////////////////////////////// | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "adis16448.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     while(true) | ||||
|     { | ||||
|     //! [Interesting] | ||||
|         upm::ADIS16448* imu = new upm::ADIS16448(0,3); //upm::ADIS16448(SPI,RST) | ||||
|     while (true) { | ||||
|         //! [Interesting] | ||||
|         upm::ADIS16448 imu(0, 3); // upm::ADIS16448(SPI,RST) | ||||
|  | ||||
|         //Read the specified register, scale it, and display it on the screen | ||||
|         std::cout << "XGYRO_OUT:" << imu->gyroScale(imu->regRead(XGYRO_OUT)) << std::endl; | ||||
|         std::cout << "YGYRO_OUT:" << imu->gyroScale(imu->regRead(YGYRO_OUT)) << std::endl; | ||||
|         std::cout << "ZGYRO_OUT:" << imu->gyroScale(imu->regRead(ZGYRO_OUT)) << std::endl; | ||||
|         // Read the specified register, scale it, and display it on the screen | ||||
|         std::cout << "XGYRO_OUT:" << imu.gyroScale(imu.regRead(XGYRO_OUT)) << std::endl; | ||||
|         std::cout << "YGYRO_OUT:" << imu.gyroScale(imu.regRead(YGYRO_OUT)) << std::endl; | ||||
|         std::cout << "ZGYRO_OUT:" << imu.gyroScale(imu.regRead(ZGYRO_OUT)) << std::endl; | ||||
|         std::cout << " " << std::endl; | ||||
|         std::cout << "XACCL_OUT:" << imu->accelScale(imu->regRead(XACCL_OUT)) << std::endl; | ||||
|         std::cout << "YACCL_OUT:" << imu->accelScale(imu->regRead(YACCL_OUT)) << std::endl; | ||||
|         std::cout << "ZACCL_OUT:" << imu->accelScale(imu->regRead(ZACCL_OUT)) << std::endl; | ||||
|         std::cout << "XACCL_OUT:" << imu.accelScale(imu.regRead(XACCL_OUT)) << std::endl; | ||||
|         std::cout << "YACCL_OUT:" << imu.accelScale(imu.regRead(YACCL_OUT)) << std::endl; | ||||
|         std::cout << "ZACCL_OUT:" << imu.accelScale(imu.regRead(ZACCL_OUT)) << std::endl; | ||||
|         std::cout << " " << std::endl; | ||||
|     //! [Interesting] | ||||
|         sleep(1); | ||||
|         //! [Interesting] | ||||
|         upm_delay(1); | ||||
|     } | ||||
|     return (0); | ||||
| } | ||||
|   | ||||
| @@ -22,59 +22,50 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <exception> | ||||
| #include <iostream> | ||||
| #include <stddef.h> | ||||
|  | ||||
| #include "ads1015.hpp" | ||||
| #include "iADC.hpp" | ||||
| #include "mraa/gpio.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| #define EDISON_I2C_BUS 1 | ||||
| #define FT4222_I2C_BUS 0 | ||||
| #define EDISON_GPIO_SI7005_CS 20 | ||||
|  | ||||
|  | ||||
| //! [Interesting] | ||||
| // Simple example of using IADC to determine | ||||
| // which sensor is present and return its name. | ||||
| // IADC is then used to get readings from sensor | ||||
|  | ||||
|  | ||||
| upm::IADC* getADC() | ||||
| int | ||||
| main() | ||||
| { | ||||
|    upm::IADC* adc = NULL; | ||||
|    try { | ||||
|       adc = new upm::ADS1015(EDISON_I2C_BUS); | ||||
|       mraa::Gpio gpio(EDISON_GPIO_SI7005_CS); | ||||
|       gpio.dir(mraa::DIR_OUT_HIGH); | ||||
|       return adc; | ||||
|    } catch (std::exception& e) { | ||||
|       std::cerr << "ADS1015: " << e.what() << std::endl; | ||||
|    } | ||||
|    return adc; | ||||
| } | ||||
|     /* Create an instance of the ADS1015 sensor */ | ||||
|     upm::ADS1015 sensor(EDISON_I2C_BUS); | ||||
|     mraa::Gpio gpio(EDISON_GPIO_SI7005_CS); | ||||
|     gpio.dir(mraa::DIR_OUT_HIGH); | ||||
|  | ||||
| int main () | ||||
| { | ||||
|    upm::IADC* adc = getADC(); | ||||
|    if (adc == NULL) { | ||||
|       std::cout << "ADC not detected" << std::endl; | ||||
|       return 1; | ||||
|    } | ||||
|    std::cout << "ADC " << adc->getModuleName() << " detected. " ; | ||||
|    std::cout << adc->getNumInputs() << " inputs available" << std::endl; | ||||
|    while (true) { | ||||
|       for (unsigned int i=0; i<adc->getNumInputs(); ++i) { | ||||
|          std::cout << "Input " << i; | ||||
|          try { | ||||
|             float voltage = adc->getVoltage(i); | ||||
|             std::cout << ": Voltage = " << voltage << "V" << std::endl; | ||||
|          } catch (std::exception& e) { | ||||
|             std::cerr << e.what() << std::endl; | ||||
|          } | ||||
|       } | ||||
|       sleep(1); | ||||
|    } | ||||
|    delete adc; | ||||
|    return 0; | ||||
|     /* Show usage from the IADC interface */ | ||||
|     upm::IADC* adc = static_cast<upm::IADC*>(&sensor); | ||||
|  | ||||
|     if (adc == NULL) { | ||||
|         std::cout << "ADC not detected" << std::endl; | ||||
|         return 1; | ||||
|     } | ||||
|     std::cout << "ADC " << adc->getModuleName() << " detected. "; | ||||
|     std::cout << adc->getNumInputs() << " inputs available" << std::endl; | ||||
|     while (true) { | ||||
|         for (unsigned int i = 0; i < adc->getNumInputs(); ++i) { | ||||
|             std::cout << "Input " << i; | ||||
|             try { | ||||
|                 float voltage = adc->getVoltage(i); | ||||
|                 std::cout << ": Voltage = " << voltage << "V" << std::endl; | ||||
|             } catch (std::exception& e) { | ||||
|                 std::cerr << e.what() << std::endl; | ||||
|             } | ||||
|         } | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -29,11 +29,13 @@ | ||||
|  */ | ||||
|  | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <thread> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include "ads1015.hpp" | ||||
| #include "ads1x15.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
| @@ -41,39 +43,41 @@ using namespace upm; | ||||
| bool running = true; // Controls main read/write loop | ||||
|  | ||||
| // Thread function | ||||
| void stop() | ||||
| void | ||||
| stop() | ||||
| { | ||||
|     sleep(10); | ||||
|     upm_delay(10); | ||||
|     running = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     //! [Interesting] | ||||
|     long id = 0; // Sample number | ||||
|     long id = 0;                        // Sample number | ||||
|     string fileName = "./ads1015.data"; // Output filename | ||||
|     ofstream f; | ||||
|  | ||||
|     // Initialize and configure the ADS1015 | ||||
|     ADS1015 *ads1015 = new upm::ADS1015(0, 0x48); | ||||
|     ADS1015 ads1015(0, 0x48); | ||||
|  | ||||
|     // Put the ADC into differential mode for pins A0 and A1 | ||||
|     ads1015->getSample(ADS1X15::DIFF_0_1); | ||||
|     ads1015.getSample(ADS1X15::DIFF_0_1); | ||||
|  | ||||
|     // Set the gain based on expected VIN range to -/+ 2.048 V | ||||
|     // Can be adjusted based on application to as low as -/+ 0.256 V, see API | ||||
|     // documentation for details | ||||
|     ads1015->setGain(ADS1X15::GAIN_TWO); | ||||
|     ads1015.setGain(ADS1X15::GAIN_TWO); | ||||
|  | ||||
|     // Set the sample rate to 3300 samples per second (max) and turn on continuous | ||||
|     // sampling | ||||
|     ads1015->setSPS(ADS1015::SPS_3300); | ||||
|     ads1015->setContinuous(true); | ||||
|     ads1015.setSPS(ADS1015::SPS_3300); | ||||
|     ads1015.setContinuous(true); | ||||
|  | ||||
|     // Enable exceptions from the output stream | ||||
|     f.exceptions(ofstream::failbit | ofstream::badbit); | ||||
|     // Open the file | ||||
|     try{ | ||||
|     try { | ||||
|         f.open(fileName); | ||||
|  | ||||
|         // Output formatting | ||||
| @@ -81,19 +85,18 @@ int main() | ||||
|         f.precision(7); | ||||
|  | ||||
|         // Start the thread that will stop logging after 10 seconds | ||||
|         thread timer (stop); | ||||
|         thread timer(stop); | ||||
|  | ||||
|         // Read sensor data and write it to the output file every ms | ||||
|         while(running){ | ||||
|             f << id++ << " " << ads1015->getLastSample() << endl; | ||||
|             usleep(1000); | ||||
|         while (running) { | ||||
|             f << id++ << " " << ads1015.getLastSample() << endl; | ||||
|             upm_delay_us(1000); | ||||
|         } | ||||
|  | ||||
|         // Clean-up and exit | ||||
|         timer.join(); | ||||
|         f.close(); | ||||
|         delete ads1015; | ||||
|     } catch (ios_base::failure &e) { | ||||
|     } catch (ios_base::failure& e) { | ||||
|         cout << "Failed to write to file: " << e.what() << endl; | ||||
|         return 1; | ||||
|     } | ||||
| @@ -101,4 +104,3 @@ int main() | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -28,11 +28,13 @@ | ||||
|  */ | ||||
|  | ||||
| #include <fstream> | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <thread> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include "ads1115.hpp" | ||||
| #include "ads1x15.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
| @@ -40,16 +42,18 @@ using namespace upm; | ||||
| bool running = true; // Controls main read/write loop | ||||
|  | ||||
| // Thread function | ||||
| void stop() | ||||
| void | ||||
| stop() | ||||
| { | ||||
|     sleep(10); | ||||
|     upm_delay(10); | ||||
|     running = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     //! [Interesting] | ||||
|     long id = 0; // Sample number | ||||
|     long id = 0;                        // Sample number | ||||
|     string fileName = "./ads1115.data"; // Output filename | ||||
|     ofstream f; | ||||
|  | ||||
| @@ -57,26 +61,26 @@ int main() | ||||
|     // There are two ADS1115 chips on the DFRobot Joule Shield on the same I2C bus | ||||
|     //     - 0x48 gives access to pins A0 - A3 | ||||
|     //     - 0x49 gives access to pins A4 - A7 | ||||
|     ADS1115 *ads1115 = new upm::ADS1115(0, 0x48); | ||||
|     ADS1115 ads1115(0, 0x48); | ||||
|  | ||||
|     // Put the ADC into differential mode for pins A0 and A1, | ||||
|     // the SM-24 Geophone is connected to these pins | ||||
|     ads1115->getSample(ADS1X15::DIFF_0_1); | ||||
|     ads1115.getSample(ADS1X15::DIFF_0_1); | ||||
|  | ||||
|     // Set the gain based on expected VIN range to -/+ 2.048 V | ||||
|     // Can be adjusted based on application to as low as -/+ 0.256 V, see API | ||||
|     // documentation for details | ||||
|     ads1115->setGain(ADS1X15::GAIN_TWO); | ||||
|     ads1115.setGain(ADS1X15::GAIN_TWO); | ||||
|  | ||||
|     // Set the sample rate to 860 samples per second (max) and turn on continuous | ||||
|     // sampling | ||||
|     ads1115->setSPS(ADS1115::SPS_860); | ||||
|     ads1115->setContinuous(true); | ||||
|     ads1115.setSPS(ADS1115::SPS_860); | ||||
|     ads1115.setContinuous(true); | ||||
|  | ||||
|     // Enable exceptions from the output stream | ||||
|     f.exceptions(ofstream::failbit | ofstream::badbit); | ||||
|     // Open the file | ||||
|     try{ | ||||
|     try { | ||||
|         f.open(fileName); | ||||
|  | ||||
|         // Output formatting | ||||
| @@ -84,19 +88,18 @@ int main() | ||||
|         f.precision(7); | ||||
|  | ||||
|         // Start the thread that will stop logging after 10 seconds | ||||
|         thread timer (stop); | ||||
|         thread timer(stop); | ||||
|  | ||||
|         // Read sensor data and write it to the output file every ms | ||||
|         while(running){ | ||||
|             f << id++ << " " << ads1115->getLastSample() << endl; | ||||
|             usleep(1000); | ||||
|         while (running) { | ||||
|             f << id++ << " " << ads1115.getLastSample() << endl; | ||||
|             upm_delay_us(1000); | ||||
|         } | ||||
|  | ||||
|         // Clean-up and exit | ||||
|         timer.join(); | ||||
|         f.close(); | ||||
|         delete ads1115; | ||||
|     } catch (ios_base::failure &e) { | ||||
|     } catch (ios_base::failure& e) { | ||||
|         cout << "Failed to write to file: " << e.what() << endl; | ||||
|         return 1; | ||||
|     } | ||||
| @@ -104,4 +107,3 @@ int main() | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -22,301 +22,306 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include "mraa.hpp" | ||||
|  | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include "ads1015.hpp" | ||||
| #include "ads1115.hpp" | ||||
| #include "ads1x15.hpp" | ||||
|  | ||||
|  | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     using namespace std; | ||||
|     using namespace upm; | ||||
|     int command; | ||||
|     //! [Interesting] | ||||
|     // Select the device you are testing here and adjust case 6 for the correct | ||||
|     // sample rates. | ||||
|     upm::ADS1115 ads(1, 0x49); | ||||
|     float inputVoltage; | ||||
|     int ans; | ||||
|  | ||||
|      using namespace std; | ||||
|      using namespace upm; | ||||
|      int command; | ||||
|      //! [Interesting] | ||||
|      //Select the device you are testing here and adjust case 6 for the correct sample rates. | ||||
|      //upm::ADS1015 *ads = new upm::ADS1015(1); | ||||
|      upm::ADS1115 *ads = new upm::ADS1115(1, 0x49); | ||||
|      float inputVoltage; | ||||
|      int ans; | ||||
|     do { | ||||
|         cout << endl; | ||||
|         cout << "1 - get Conversion \t"; | ||||
|         cout << "2 - get last conversion" << endl; | ||||
|         cout << "3 - get Gain \t\t"; | ||||
|         cout << "4 - set Gain" << endl; | ||||
|         ; | ||||
|         cout << "5 - get Data Rate \t"; | ||||
|         cout << "6 - set Data Rate" << endl; | ||||
|         cout << "7 - Set Upper Threshold \t"; | ||||
|         cout << "8 - Set Lower Threshold \t"; | ||||
|         cout << "9 - Display Thresholds \t"; | ||||
|         cout << "10 - Set Default Thresholds \t"; | ||||
|         cout << "11 - Set conversion ready" << endl; | ||||
|         cout << "12 - get Comp Que \t"; | ||||
|         cout << "13 - set Comp Que" << endl; | ||||
|         cout << "14 - get Comp Pol \t"; | ||||
|         cout << "15 - set Comp Pol" << endl; | ||||
|         cout << "16 - get Comp mode \t"; | ||||
|         cout << "17 - set Comp mode " << endl; | ||||
|         cout << "18 - get Comp Latch\t"; | ||||
|         cout << "19 - set Comp Latch " << endl; | ||||
|         cout << "20 - get Continuous \t"; | ||||
|         cout << "21 - set Continuous \t" << endl; | ||||
|         cout << "-1 - exit" << endl; | ||||
|         cout << "Enter a command: "; | ||||
|         cin >> command; | ||||
|  | ||||
|      do | ||||
|      { | ||||
|  | ||||
|           cout << endl; | ||||
|           cout << "1 - get Conversion \t" ; | ||||
|           cout << "2 - get last conversion" << endl; | ||||
|           cout << "3 - get Gain \t\t"; | ||||
|           cout << "4 - set Gain"  << endl;; | ||||
|           cout << "5 - get Data Rate \t"; | ||||
|           cout << "6 - set Data Rate" << endl; | ||||
|           cout << "7 - Set Upper Threshold \t" ; | ||||
|           cout << "8 - Set Lower Threshold \t"; | ||||
|           cout << "9 - Display Thresholds \t"; | ||||
|           cout << "10 - Set Default Thresholds \t"; | ||||
|           cout << "11 - Set conversion ready" << endl; | ||||
|           cout << "12 - get Comp Que \t" ; | ||||
|           cout << "13 - set Comp Que" << endl; | ||||
|           cout << "14 - get Comp Pol \t"; | ||||
|           cout << "15 - set Comp Pol" << endl; | ||||
|           cout << "16 - get Comp mode \t"; | ||||
|           cout << "17 - set Comp mode " << endl; | ||||
|           cout << "18 - get Comp Latch\t"; | ||||
|           cout << "19 - set Comp Latch " << endl; | ||||
|           cout << "20 - get Continuous \t"; | ||||
|           cout << "21 - set Continuous \t" << endl; | ||||
|           cout << "-1 - exit" << endl; | ||||
|           cout << "Enter a command: "; | ||||
|           cin >> command; | ||||
|  | ||||
|  | ||||
|           switch(command) | ||||
|           { | ||||
|         switch (command) { | ||||
|             case 2: | ||||
|                 cout << ads.getLastSample() << endl; | ||||
|                 break; | ||||
|             case 3: | ||||
|                 cout << std::hex << ads.getGain() << endl; | ||||
|                 break; | ||||
|             case 5: | ||||
|                 cout << std::hex << ads.getSPS() << endl; | ||||
|                 break; | ||||
|             case 4: | ||||
|                 int gain; | ||||
|                 ADS1015::ADSGAIN set_gain; | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> gain 2/3 \t 2 -> gain1 \t 3 -> gain 2" << endl; | ||||
|                 cout << "4 -> gain 4 \t 5 -> gain 8 \t 6 -> gain 15" << endl; | ||||
|                 cin >> gain; | ||||
|                 switch (gain) { | ||||
|                     case 1: | ||||
|                         set_gain = ADS1X15::GAIN_TWOTHIRDS; | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         set_gain = ADS1X15::GAIN_ONE; | ||||
|                         break; | ||||
|                     case 3: | ||||
|                         set_gain = ADS1X15::GAIN_TWO; | ||||
|                         break; | ||||
|                     case 4: | ||||
|                         set_gain = ADS1X15::GAIN_FOUR; | ||||
|                         break; | ||||
|                     case 5: | ||||
|                         set_gain = ADS1X15::GAIN_EIGHT; | ||||
|                         break; | ||||
|                     case 6: | ||||
|                         set_gain = ADS1X15::GAIN_SIXTEEN; | ||||
|                         break; | ||||
|                     default: | ||||
|                         set_gain = ADS1X15::GAIN_ONE; | ||||
|                 } | ||||
|                 ads.setGain(set_gain); | ||||
|                 break; | ||||
|             case 6: | ||||
|                 int rate; | ||||
|                 /*ADS1015::ADSDATARATE set_rate; | ||||
|           cout << "select one of the following:" << endl; | ||||
|           cout << "1 -> SPS_120 \t 2 -> SPS_250 \t 3 -> SPS_490 \t 4 -> SPS_920" << | ||||
|           endl; | ||||
|           cout << "5 -> SPS_1600 \t 6 -> SPS_2400 \t 7 -> SPS_3300" << endl; | ||||
|           cin >> rate; | ||||
|           switch(rate){ | ||||
|           case 1: | ||||
|                set_rate = ADS1015::SPS_128; | ||||
|                break; | ||||
|           case 2: | ||||
|                cout << ads->getLastSample() << endl; | ||||
|                set_rate = ADS1015::SPS_250; | ||||
|                break; | ||||
|           case 3: | ||||
|                cout << std::hex << ads->getGain() << endl; | ||||
|                break; | ||||
|           case 5: | ||||
|                cout << std::hex << ads->getSPS() << endl; | ||||
|                set_rate = ADS1015::SPS_490; | ||||
|                break; | ||||
|           case 4: | ||||
|                int gain; | ||||
|                ADS1015::ADSGAIN set_gain; | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> gain 2/3 \t 2 -> gain1 \t 3 -> gain 2" << endl; | ||||
|                cout << "4 -> gain 4 \t 5 -> gain 8 \t 6 -> gain 15" << endl; | ||||
|                cin >> gain; | ||||
|                switch(gain){ | ||||
|                case 1: | ||||
|                     set_gain = ADS1X15::GAIN_TWOTHIRDS; | ||||
|                     break; | ||||
|                case 2: | ||||
|                     set_gain = ADS1X15::GAIN_ONE; | ||||
|                     break; | ||||
|                case 3: | ||||
|                     set_gain = ADS1X15::GAIN_TWO; | ||||
|                     break; | ||||
|                case 4: | ||||
|                     set_gain = ADS1X15::GAIN_FOUR; | ||||
|                     break; | ||||
|                case 5: | ||||
|                     set_gain = ADS1X15::GAIN_EIGHT; | ||||
|                     break; | ||||
|                case 6: | ||||
|                     set_gain = ADS1X15::GAIN_SIXTEEN; | ||||
|                     break; | ||||
|                default: | ||||
|                     set_gain = ADS1X15::GAIN_ONE; | ||||
|                } | ||||
|                ads->setGain(set_gain); | ||||
|                set_rate = ADS1015::SPS_920; | ||||
|                break; | ||||
|           case 5: | ||||
|                set_rate = ADS1015::SPS_1600; | ||||
|                break; | ||||
|           case 6: | ||||
|                int rate; | ||||
|                /*ADS1015::ADSDATARATE set_rate; | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> SPS_120 \t 2 -> SPS_250 \t 3 -> SPS_490 \t 4 -> SPS_920" << endl; | ||||
|                cout << "5 -> SPS_1600 \t 6 -> SPS_2400 \t 7 -> SPS_3300" << endl; | ||||
|                cin >> rate; | ||||
|                switch(rate){ | ||||
|                case 1: | ||||
|                     set_rate = ADS1015::SPS_128; | ||||
|                     break; | ||||
|                case 2: | ||||
|                     set_rate = ADS1015::SPS_250; | ||||
|                     break; | ||||
|                case 3: | ||||
|                     set_rate = ADS1015::SPS_490; | ||||
|                     break; | ||||
|                case 4: | ||||
|                     set_rate = ADS1015::SPS_920; | ||||
|                     break; | ||||
|                case 5: | ||||
|                     set_rate = ADS1015::SPS_1600; | ||||
|                     break; | ||||
|                case 6: | ||||
|                     set_rate = ADS1015::SPS_2400; | ||||
|                     break; | ||||
|                case 7: | ||||
|                     set_rate = ADS1015::SPS_3300; | ||||
|                     break; | ||||
|                default: | ||||
|                     set_rate = ADS1015::SPS_1600; | ||||
|                } */ | ||||
|                ADS1115::ADSDATARATE set_rate; | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> SPS_8 \t 2 -> SPS_16 \t 3 -> SPS_32 \t 4 -> SPS_64" << endl; | ||||
|                cout << "5 -> SPS_128 \t 6 -> SPS_250 \t 7 -> SPS_475 \t 8-> SPS_860" << endl; | ||||
|                cin >> rate; | ||||
|                switch(rate){ | ||||
|                case 1: | ||||
|                     set_rate = ADS1115::SPS_8; | ||||
|                     break; | ||||
|                case 2: | ||||
|                     set_rate = ADS1115::SPS_16; | ||||
|                     break; | ||||
|                case 3: | ||||
|                     set_rate = ADS1115::SPS_32; | ||||
|                     break; | ||||
|                case 4: | ||||
|                     set_rate = ADS1115::SPS_64; | ||||
|                     break; | ||||
|                case 5: | ||||
|                     set_rate = ADS1115::SPS_128; | ||||
|                     break; | ||||
|                case 6: | ||||
|                     set_rate = ADS1115::SPS_250; | ||||
|                     break; | ||||
|                case 7: | ||||
|                     set_rate = ADS1115::SPS_475; | ||||
|                     break; | ||||
|                case 8: | ||||
|                     set_rate = ADS1115::SPS_860; | ||||
|                     break; | ||||
|                default: | ||||
|                     set_rate = ADS1115::SPS_128; | ||||
|                } | ||||
|  | ||||
|                ads->setSPS(set_rate); | ||||
|                break; | ||||
|           case 1: | ||||
|                int mode; | ||||
|                ADS1X15::ADSMUXMODE set_mode; | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> MUX_0_1 \t 2 -> MUX_0_3 \t 3 -> MUX_1_3 \t 4 -> MUX_2_3" << endl; | ||||
|                cout << "5 -> SINGLE_0 \t 6 -> SINGLE_1 \t 7 -> SINGLE_2 \t 8 -> SINGLE_3" << endl; | ||||
|                cin >> mode; | ||||
|                switch(mode){ | ||||
|                case 1: | ||||
|                     set_mode = ADS1X15::DIFF_0_1; | ||||
|                     break; | ||||
|                case 2: | ||||
|                     set_mode = ADS1X15::DIFF_0_3; | ||||
|                     break; | ||||
|                case 3: | ||||
|                     set_mode = ADS1X15::DIFF_1_3; | ||||
|                     break; | ||||
|                case 4: | ||||
|                     set_mode = ADS1X15::DIFF_2_3; | ||||
|                     break; | ||||
|                case 5: | ||||
|                     set_mode = ADS1X15::SINGLE_0; | ||||
|                     break; | ||||
|                case 6: | ||||
|                     set_mode = ADS1X15::SINGLE_1; | ||||
|                     break; | ||||
|                case 7: | ||||
|                     set_mode = ADS1X15::SINGLE_2; | ||||
|                     break; | ||||
|                case 8: | ||||
|                     set_mode = ADS1X15::SINGLE_3; | ||||
|                     break; | ||||
|                default: | ||||
|                     set_mode = ADS1X15::DIFF_0_1; | ||||
|                     break; | ||||
|                } | ||||
|                cout << ads->getSample(set_mode) << endl; | ||||
|                set_rate = ADS1015::SPS_2400; | ||||
|                break; | ||||
|           case 7: | ||||
|                cout << " enter a float value: " ; | ||||
|                cin >> inputVoltage; | ||||
|                ads->setThresh(ADS1115::THRESH_HIGH, inputVoltage); | ||||
|                break; | ||||
|           case 8: | ||||
|                cout << " enter a float value: " ; | ||||
|                cin >> inputVoltage; | ||||
|                ads->setThresh(ADS1115::THRESH_LOW, inputVoltage); | ||||
|                break; | ||||
|           case 9: | ||||
|                cout << "Upper " << ads->getThresh(ADS1X15::THRESH_HIGH) << endl; | ||||
|                cout << "Lower " << ads->getThresh(ADS1X15::THRESH_LOW) << endl; | ||||
|                break; | ||||
|           case 10: | ||||
|                ads->setThresh(ADS1115::THRESH_DEFAULT); | ||||
|                break; | ||||
|           case 11: | ||||
|                ads->setThresh(ADS1015::CONVERSION_RDY); | ||||
|                break; | ||||
|           case 12: | ||||
|                cout << ads->getCompQue() << endl; | ||||
|                break; | ||||
|           case 13: | ||||
|                int que; | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> CQUE_1CONV \t 2 -> CQUE_2CONV \t 3 -> CQUE_3CONV \t 4 -> CQUE_NONE" << endl; | ||||
|                cin >> que; | ||||
|                switch(que){ | ||||
|                case 1: | ||||
|                     ads->setCompQue(ADS1X15::CQUE_1CONV); | ||||
|                     break; | ||||
|                case 2: | ||||
|                     ads->setCompQue(ADS1X15::CQUE_2CONV); | ||||
|                     break; | ||||
|                case 3: | ||||
|                     ads->setCompQue(ADS1X15::CQUE_4CONV); | ||||
|                     break; | ||||
|                case 4: | ||||
|                default: | ||||
|                     ads->setCompQue(ADS1X15::CQUE_NONE); | ||||
|                     break; | ||||
|                } | ||||
|                break; | ||||
|           case 14: | ||||
|                cout << ads->getCompPol() << endl; | ||||
|                break; | ||||
|           case 15: | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> active high \t 2 -> active low" << endl; | ||||
|                cin >> ans; | ||||
|                if(ans == 1) ads->setCompPol(true); | ||||
|                 else ads->setCompPol(false); | ||||
|                break; | ||||
|           case 16: | ||||
|                cout << ads->getCompMode() << endl; | ||||
|                break; | ||||
|           case 17: | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> Window \t 2 -> Traditional (default)" << endl; | ||||
|                cin >> ans; | ||||
|                if(ans == 1) ads->setCompMode(true); | ||||
|                 else ads->setCompMode(); | ||||
|                break; | ||||
|           case 18: | ||||
|                cout << ads->getCompLatch() << endl; | ||||
|                break; | ||||
|           case 19: | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> Latching  \t 2 -> Non-latching (default)" << endl; | ||||
|                cin >> ans; | ||||
|                if(ans == 1) ads->setCompLatch(true); | ||||
|                 else ads->setCompLatch(); | ||||
|                break; | ||||
|           case 20: | ||||
|                cout << ads->getContinuous() << endl; | ||||
|                break; | ||||
|           case 21: | ||||
|                cout << "select one of the following:" << endl; | ||||
|                cout << "1 -> Power Down (default)  \t 2 -> Continuous" << endl; | ||||
|                cin >> ans; | ||||
|                if(ans == 1) ads->setContinuous(true); | ||||
|                 else ads->setContinuous(); | ||||
|                break; | ||||
|           case -1: | ||||
|                set_rate = ADS1015::SPS_3300; | ||||
|                break; | ||||
|           default: | ||||
|                set_rate = ADS1015::SPS_1600; | ||||
|           } */ | ||||
|                 ADS1115::ADSDATARATE set_rate; | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> SPS_8 \t 2 -> SPS_16 \t 3 -> SPS_32 \t 4 -> SPS_64" << endl; | ||||
|                 cout << "5 -> SPS_128 \t 6 -> SPS_250 \t 7 -> SPS_475 \t 8-> SPS_860" << endl; | ||||
|                 cin >> rate; | ||||
|                 switch (rate) { | ||||
|                     case 1: | ||||
|                         set_rate = ADS1115::SPS_8; | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         set_rate = ADS1115::SPS_16; | ||||
|                         break; | ||||
|                     case 3: | ||||
|                         set_rate = ADS1115::SPS_32; | ||||
|                         break; | ||||
|                     case 4: | ||||
|                         set_rate = ADS1115::SPS_64; | ||||
|                         break; | ||||
|                     case 5: | ||||
|                         set_rate = ADS1115::SPS_128; | ||||
|                         break; | ||||
|                     case 6: | ||||
|                         set_rate = ADS1115::SPS_250; | ||||
|                         break; | ||||
|                     case 7: | ||||
|                         set_rate = ADS1115::SPS_475; | ||||
|                         break; | ||||
|                     case 8: | ||||
|                         set_rate = ADS1115::SPS_860; | ||||
|                         break; | ||||
|                     default: | ||||
|                         set_rate = ADS1115::SPS_128; | ||||
|                 } | ||||
|  | ||||
|                break; | ||||
|           } | ||||
|                 ads.setSPS(set_rate); | ||||
|                 break; | ||||
|             case 1: | ||||
|                 int mode; | ||||
|                 ADS1X15::ADSMUXMODE set_mode; | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> MUX_0_1 \t 2 -> MUX_0_3 \t 3 -> MUX_1_3 \t 4 -> MUX_2_3" << endl; | ||||
|                 cout << "5 -> SINGLE_0 \t 6 -> SINGLE_1 \t 7 -> SINGLE_2 \t 8 -> " | ||||
|                         "SINGLE_3" | ||||
|                      << endl; | ||||
|                 cin >> mode; | ||||
|                 switch (mode) { | ||||
|                     case 1: | ||||
|                         set_mode = ADS1X15::DIFF_0_1; | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         set_mode = ADS1X15::DIFF_0_3; | ||||
|                         break; | ||||
|                     case 3: | ||||
|                         set_mode = ADS1X15::DIFF_1_3; | ||||
|                         break; | ||||
|                     case 4: | ||||
|                         set_mode = ADS1X15::DIFF_2_3; | ||||
|                         break; | ||||
|                     case 5: | ||||
|                         set_mode = ADS1X15::SINGLE_0; | ||||
|                         break; | ||||
|                     case 6: | ||||
|                         set_mode = ADS1X15::SINGLE_1; | ||||
|                         break; | ||||
|                     case 7: | ||||
|                         set_mode = ADS1X15::SINGLE_2; | ||||
|                         break; | ||||
|                     case 8: | ||||
|                         set_mode = ADS1X15::SINGLE_3; | ||||
|                         break; | ||||
|                     default: | ||||
|                         set_mode = ADS1X15::DIFF_0_1; | ||||
|                         break; | ||||
|                 } | ||||
|                 cout << ads.getSample(set_mode) << endl; | ||||
|                 break; | ||||
|             case 7: | ||||
|                 cout << " enter a float value: "; | ||||
|                 cin >> inputVoltage; | ||||
|                 ads.setThresh(ADS1115::THRESH_HIGH, inputVoltage); | ||||
|                 break; | ||||
|             case 8: | ||||
|                 cout << " enter a float value: "; | ||||
|                 cin >> inputVoltage; | ||||
|                 ads.setThresh(ADS1115::THRESH_LOW, inputVoltage); | ||||
|                 break; | ||||
|             case 9: | ||||
|                 cout << "Upper " << ads.getThresh(ADS1X15::THRESH_HIGH) << endl; | ||||
|                 cout << "Lower " << ads.getThresh(ADS1X15::THRESH_LOW) << endl; | ||||
|                 break; | ||||
|             case 10: | ||||
|                 ads.setThresh(ADS1115::THRESH_DEFAULT); | ||||
|                 break; | ||||
|             case 11: | ||||
|                 ads.setThresh(ADS1015::CONVERSION_RDY); | ||||
|                 break; | ||||
|             case 12: | ||||
|                 cout << ads.getCompQue() << endl; | ||||
|                 break; | ||||
|             case 13: | ||||
|                 int que; | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> CQUE_1CONV \t 2 -> CQUE_2CONV \t 3 -> CQUE_3CONV \t 4 -> " | ||||
|                         "CQUE_NONE" | ||||
|                      << endl; | ||||
|                 cin >> que; | ||||
|                 switch (que) { | ||||
|                     case 1: | ||||
|                         ads.setCompQue(ADS1X15::CQUE_1CONV); | ||||
|                         break; | ||||
|                     case 2: | ||||
|                         ads.setCompQue(ADS1X15::CQUE_2CONV); | ||||
|                         break; | ||||
|                     case 3: | ||||
|                         ads.setCompQue(ADS1X15::CQUE_4CONV); | ||||
|                         break; | ||||
|                     case 4: | ||||
|                     default: | ||||
|                         ads.setCompQue(ADS1X15::CQUE_NONE); | ||||
|                         break; | ||||
|                 } | ||||
|                 break; | ||||
|             case 14: | ||||
|                 cout << ads.getCompPol() << endl; | ||||
|                 break; | ||||
|             case 15: | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> active high \t 2 -> active low" << endl; | ||||
|                 cin >> ans; | ||||
|                 if (ans == 1) | ||||
|                     ads.setCompPol(true); | ||||
|                 else | ||||
|                     ads.setCompPol(false); | ||||
|                 break; | ||||
|             case 16: | ||||
|                 cout << ads.getCompMode() << endl; | ||||
|                 break; | ||||
|             case 17: | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> Window \t 2 -> Traditional (default)" << endl; | ||||
|                 cin >> ans; | ||||
|                 if (ans == 1) | ||||
|                     ads.setCompMode(true); | ||||
|                 else | ||||
|                     ads.setCompMode(); | ||||
|                 break; | ||||
|             case 18: | ||||
|                 cout << ads.getCompLatch() << endl; | ||||
|                 break; | ||||
|             case 19: | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> Latching  \t 2 -> Non-latching (default)" << endl; | ||||
|                 cin >> ans; | ||||
|                 if (ans == 1) | ||||
|                     ads.setCompLatch(true); | ||||
|                 else | ||||
|                     ads.setCompLatch(); | ||||
|                 break; | ||||
|             case 20: | ||||
|                 cout << ads.getContinuous() << endl; | ||||
|                 break; | ||||
|             case 21: | ||||
|                 cout << "select one of the following:" << endl; | ||||
|                 cout << "1 -> Power Down (default)  \t 2 -> Continuous" << endl; | ||||
|                 cin >> ans; | ||||
|                 if (ans == 1) | ||||
|                     ads.setContinuous(true); | ||||
|                 else | ||||
|                     ads.setContinuous(); | ||||
|                 break; | ||||
|             case -1: | ||||
|                 break; | ||||
|             default: | ||||
|  | ||||
|      }while (command != -1 ); | ||||
|                 break; | ||||
|         } | ||||
|     } while (command != -1); | ||||
|  | ||||
|      delete ads; | ||||
|      //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|      return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,57 +22,58 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "adxl335.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an ADXL335 accelerometer on analog pins A0, A1, and A2 | ||||
|   upm::ADXL335* accel = new upm::ADXL335(0, 1, 2); | ||||
|     //! [Interesting] | ||||
|     // Instantiate an ADXL335 accelerometer on analog pins A0, A1, and A2 | ||||
|     upm::ADXL335 accel(0, 1, 2); | ||||
|  | ||||
|   cout << "Please make sure the sensor is completely still. Sleeping for" | ||||
|        << " 2 seconds." << endl; | ||||
|   sleep(2); | ||||
|   cout << "Calibrating..." << endl; | ||||
|     cout << "Please make sure the sensor is completely still. Sleeping for" | ||||
|          << " 2 seconds." << endl; | ||||
|     upm_delay(2); | ||||
|     cout << "Calibrating..." << endl; | ||||
|  | ||||
|   accel->calibrate(); | ||||
|    | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       int x, y, z; | ||||
|       float aX, aY, aZ; | ||||
|     accel.calibrate(); | ||||
|  | ||||
|       accel->values(&x, &y, &z); | ||||
|       cout << "Raw Values: X: " << x << " Y: " << y << " Z: " << z << endl; | ||||
|     while (shouldRun) { | ||||
|         int x, y, z; | ||||
|         float aX, aY, aZ; | ||||
|  | ||||
|       accel->acceleration(&aX, &aY, &aZ); | ||||
|       cout << "Acceleration: X: " << aX << "g" << endl; | ||||
|       cout << "Acceleration: Y: " << aY << "g" << endl; | ||||
|       cout << "Acceleration: Z: " << aZ << "g" << endl; | ||||
|       cout << endl; | ||||
|         accel.values(&x, &y, &z); | ||||
|         cout << "Raw Values: X: " << x << " Y: " << y << " Z: " << z << endl; | ||||
|  | ||||
|       usleep(200000); | ||||
|         accel.acceleration(&aX, &aY, &aZ); | ||||
|         cout << "Acceleration: X: " << aX << "g" << endl; | ||||
|         cout << "Acceleration: Y: " << aY << "g" << endl; | ||||
|         cout << "Acceleration: Z: " << aZ << "g" << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|         upm_delay_us(200000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete accel; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,30 +22,32 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "adxl345.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     int16_t *raw; | ||||
|     float *acc; | ||||
|     //! [Interesting] | ||||
|     int16_t* raw; | ||||
|     float* acc; | ||||
|  | ||||
|     // Note: Sensor only works at 3.3V on the Intel Edison with Arduino breakout | ||||
|     upm::Adxl345* accel = new upm::Adxl345(0); | ||||
|     upm::Adxl345 accel(0); | ||||
|  | ||||
|     while(true){ | ||||
|         accel->update(); // Update the data | ||||
|         raw = accel->getRawValues(); // Read raw sensor data | ||||
|         acc = accel->getAcceleration(); // Read acceleration (g) | ||||
|         fprintf(stdout, "Current scale: 0x%2xg\n", accel->getScale()); | ||||
|     while (true) { | ||||
|         accel.update();                // Update the data | ||||
|         raw = accel.getRawValues();    // Read raw sensor data | ||||
|         acc = accel.getAcceleration(); // Read acceleration (g) | ||||
|         fprintf(stdout, "Current scale: 0x%2xg\n", accel.getScale()); | ||||
|         fprintf(stdout, "Raw: %6d %6d %6d\n", raw[0], raw[1], raw[2]); | ||||
|         fprintf(stdout, "AccX: %5.2f g\n", acc[0]); | ||||
|         fprintf(stdout, "AccY: %5.2f g\n", acc[1]); | ||||
|         fprintf(stdout, "AccZ: %5.2f g\n", acc[2]); | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,50 +22,51 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "adxrs610.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a ADXRS610 sensor on analog pin A0 (dataout), and | ||||
|   // analog A1 (temp out) with an analog reference voltage of | ||||
|   // 5.0 | ||||
|   upm::ADXRS610 *sensor = new upm::ADXRS610(0, 1, 5.0); | ||||
|    | ||||
|   // set a deadband region around the zero point to report 0.0 (optional) | ||||
|   sensor->setDeadband(0.015); | ||||
|     // Instantiate a ADXRS610 sensor on analog pin A0 (dataout), and | ||||
|     // analog A1 (temp out) with an analog reference voltage of | ||||
|     // 5.0 | ||||
|     upm::ADXRS610 sensor(0, 1, 5.0); | ||||
|  | ||||
|   // Every tenth of a second, sample the ADXRS610 and output it's | ||||
|   // corresponding temperature and angular velocity  | ||||
|     // set a deadband region around the zero point to report 0.0 (optional) | ||||
|     sensor.setDeadband(0.015); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "Vel (deg/s): " << sensor->getAngularVelocity() << endl; | ||||
|       cout << "Temp (C): " << sensor->getTemperature() << endl; | ||||
|        | ||||
|       usleep(100000); | ||||
|     // Every tenth of a second, sample the ADXRS610 and output it's | ||||
|     // corresponding temperature and angular velocity | ||||
|  | ||||
|     while (shouldRun) { | ||||
|         cout << "Vel (deg/s): " << sensor.getAngularVelocity() << endl; | ||||
|         cout << "Temp (C): " << sensor.getTemperature() << endl; | ||||
|  | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,16 +22,15 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "am2315.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| volatile int doWork = 0; | ||||
|  | ||||
| upm::AM2315 *sensor = NULL; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
| @@ -42,34 +41,30 @@ sig_handler(int signo) | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // Register signal handler | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     //! [Interesting] | ||||
|     float humidity    = 0.0; | ||||
|     float humidity = 0.0; | ||||
|     float temperature = 0.0; | ||||
|  | ||||
|     sensor = new upm::AM2315(0, AM2315_I2C_ADDRESS); | ||||
|     upm::AM2315 sensor(0, AM2315_I2C_ADDRESS); | ||||
|  | ||||
|     sensor->testSensor(); | ||||
|     sensor.testSensor(); | ||||
|  | ||||
|     while (!doWork) { | ||||
|         humidity    = sensor->getHumidity(); | ||||
|         temperature = sensor->getTemperature(); | ||||
|         humidity = sensor.getHumidity(); | ||||
|         temperature = sensor.getTemperature(); | ||||
|  | ||||
|         std::cout << "humidity value = " << | ||||
|                     humidity << | ||||
|                     ", temperature value = " << | ||||
|                     temperature << std::endl; | ||||
|         usleep (500000); | ||||
|         std::cout << "humidity value = " << humidity << ", temperature value = " << temperature | ||||
|                   << std::endl; | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -23,9 +23,6 @@ | ||||
|  */ | ||||
|  | ||||
| #include "apa102.hpp" | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| @@ -34,18 +31,17 @@ main(int argc, char** argv) | ||||
| { | ||||
|     //! [Interesting] | ||||
|     // Instantiate a strip of 30 LEDs on SPI bus 0 | ||||
|     upm::APA102* ledStrip = new upm::APA102(800, 0); | ||||
|     upm::APA102 ledStrip(800, 0); | ||||
|  | ||||
|     // Set all LEDs to Red | ||||
|     ledStrip->setAllLeds(31, 255, 0, 0); | ||||
|     ledStrip.setAllLeds(31, 255, 0, 0); | ||||
|  | ||||
|     // Set a section (10 to 20) to blue | ||||
|     ledStrip->setLeds(10, 20, 31, 0, 0, 255); | ||||
|     ledStrip.setLeds(10, 20, 31, 0, 0, 255); | ||||
|  | ||||
|     // Set a single LED to green | ||||
|     ledStrip->setLed(15, 31, 0, 255, 0); | ||||
|     ledStrip.setLed(15, 31, 0, 255, 0); | ||||
|  | ||||
|     delete ledStrip; | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,41 +22,41 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "apds9002.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Luminance sensor on analog pin A0 | ||||
|   upm::APDS9002* luminance = new upm::APDS9002(0); | ||||
|    | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       int val = luminance->value(); | ||||
|       cout << "Luminance value is " << val << endl; | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Luminance sensor on analog pin A0 | ||||
|     upm::APDS9002 luminance(0); | ||||
|  | ||||
|       sleep(1); | ||||
|     while (shouldRun) { | ||||
|         int val = luminance.value(); | ||||
|         cout << "Luminance value is " << val << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete luminance; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,10 +22,11 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "apds9930.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| @@ -44,31 +45,30 @@ main() | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Digital Proximity and Ambient Light sensor on iio device 4 | ||||
|     upm::APDS9930* light_proximity = new upm::APDS9930(4); | ||||
|     upm::APDS9930 light_proximity(4); | ||||
|  | ||||
|     // Kernel driver implement sleep 5000-5100us after enable illuminance sensor | ||||
|     light_proximity->enableIlluminance(true); | ||||
|     // Kernel driver implement upm_delay 5000-5100us after enable illuminance | ||||
|     // sensor | ||||
|     light_proximity.enableIlluminance(true); | ||||
|  | ||||
|     // Kernel driver implement sleep 5000-5100us after enable proximity sensor | ||||
|     light_proximity->enableProximity(true); | ||||
|     // Kernel driver implement upm_delay 5000-5100us after enable proximity sensor | ||||
|     light_proximity.enableProximity(true); | ||||
|  | ||||
|     // Tested this value works. Please change it on your platform | ||||
|     usleep(120000); | ||||
|     upm_delay_us(120000); | ||||
|  | ||||
|     while (shouldRun) { | ||||
|         float lux = light_proximity->getAmbient(); | ||||
|         float lux = light_proximity.getAmbient(); | ||||
|         cout << "Luminance value is " << lux << endl; | ||||
|         float proximity = light_proximity->getProximity(); | ||||
|         float proximity = light_proximity.getProximity(); | ||||
|         cout << "Proximity value is " << proximity << endl; | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|     light_proximity->enableProximity(false); | ||||
|     light_proximity->enableIlluminance(false); | ||||
|     light_proximity.enableProximity(false); | ||||
|     light_proximity.enableIlluminance(false); | ||||
|     //! [Interesting] | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     delete light_proximity; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,69 +22,68 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "at42qt1070.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| void printButtons(upm::AT42QT1070 *touch) | ||||
| void | ||||
| printButtons(upm::AT42QT1070& touch) | ||||
| { | ||||
|   bool buttonPressed = false; | ||||
|   uint8_t buttons = touch->getButtons(); | ||||
|     bool buttonPressed = false; | ||||
|     uint8_t buttons = touch.getButtons(); | ||||
|  | ||||
|   cout << "Buttons Pressed: "; | ||||
|   for (int i=0; i<7; i++) | ||||
|     { | ||||
|       if (buttons & (1 << i)) | ||||
|         { | ||||
|           cout << i << " "; | ||||
|           buttonPressed = true; | ||||
|     cout << "Buttons Pressed: "; | ||||
|     for (int i = 0; i < 7; i++) { | ||||
|         if (buttons & (1 << i)) { | ||||
|             cout << i << " "; | ||||
|             buttonPressed = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   if (!buttonPressed) | ||||
|     cout << "None"; | ||||
|     if (!buttonPressed) | ||||
|         cout << "None"; | ||||
|  | ||||
|   cout << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   if (touch->isCalibrating()) | ||||
|     cout << "Calibration is occurring." << endl; | ||||
|     if (touch.isCalibrating()) | ||||
|         cout << "Calibration is occurring." << endl; | ||||
|  | ||||
|   if (touch->isOverflowed()) | ||||
|     cout << "Overflow was detected." << endl; | ||||
|     if (touch.isOverflowed()) | ||||
|         cout << "Overflow was detected." << endl; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an AT42QT1070 on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an AT42QT1070 on I2C bus 0 | ||||
|  | ||||
|   upm::AT42QT1070 *touch = new upm::AT42QT1070(AT42QT1070_I2C_BUS,  | ||||
|                                                AT42QT1070_DEFAULT_I2C_ADDR); | ||||
|     upm::AT42QT1070 touch(AT42QT1070_I2C_BUS, AT42QT1070_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       touch->updateState(); | ||||
|       printButtons(touch); | ||||
|       usleep(100000); | ||||
|     while (shouldRun) { | ||||
|         touch.updateState(); | ||||
|         printButtons(touch); | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete touch; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,44 +22,45 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bh1750.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a BH1750 sensor using defaults (I2C bus (0), using | ||||
|   // the default I2C address (0x23), and setting the mode to highest | ||||
|   // resolution, lowest power mode). | ||||
|   upm::BH1750 *sensor = new upm::BH1750(); | ||||
|     // Instantiate a BH1750 sensor using defaults (I2C bus (0), using | ||||
|     // the default I2C address (0x23), and setting the mode to highest | ||||
|     // resolution, lowest power mode). | ||||
|     upm::BH1750 sensor; | ||||
|  | ||||
|   // Every second, sample the BH1750 and output the measured lux value | ||||
|     // Every second, sample the BH1750 and output the measured lux value | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "Detected Light Level (lux): " << sensor->getLux() << endl; | ||||
|       sleep(1); | ||||
|     while (shouldRun) { | ||||
|         cout << "Detected Light Level (lux): " << sensor.getLux() << endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,47 +22,47 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "biss0001.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Motion sensor on GPIO pin D2 | ||||
|   upm::BISS0001* motion = new upm::BISS0001(2); | ||||
|    | ||||
|   while (shouldRun) | ||||
|   { | ||||
|       bool val = motion->value(); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Motion sensor on GPIO pin D2 | ||||
|     upm::BISS0001 motion(2); | ||||
|  | ||||
|       if (val) | ||||
|         cout << "Detecting moving object"; | ||||
|       else | ||||
|         cout << "No moving objects detected"; | ||||
|     while (shouldRun) { | ||||
|         bool val = motion.value(); | ||||
|  | ||||
|       cout << endl; | ||||
|         if (val) | ||||
|             cout << "Detecting moving object"; | ||||
|         else | ||||
|             cout << "No moving objects detected"; | ||||
|  | ||||
|       sleep(1); | ||||
|   } | ||||
| //! [Interesting] | ||||
|         cout << endl; | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete motion; | ||||
|   return 0; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,49 +22,48 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bma220.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMA220 using default parameters (bus 0, addr 0x0a) | ||||
|   upm::BMA220 *sensor = new upm::BMA220(); | ||||
|     // Instantiate an BMA220 using default parameters (bus 0, addr 0x0a) | ||||
|     upm::BMA220 sensor; | ||||
|  | ||||
|   // Output data every half second until interrupted | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       sensor->update(); | ||||
|        | ||||
|       float x, y, z; | ||||
|        | ||||
|       sensor->getAccelerometer(&x, &y, &z); | ||||
|       cout << "Accelerometer: "; | ||||
|       cout << "AX: " << x << " AY: " << y << " AZ: " << z << endl; | ||||
|     // Output data every half second until interrupted | ||||
|     while (shouldRun) { | ||||
|         sensor.update(); | ||||
|  | ||||
|       usleep(500000); | ||||
|         float x, y, z; | ||||
|  | ||||
|         sensor.getAccelerometer(&x, &y, &z); | ||||
|         cout << "Accelerometer: "; | ||||
|         cout << "AX: " << x << " AY: " << y << " AZ: " << z << endl; | ||||
|  | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|    | ||||
|   delete sensor; | ||||
|    | ||||
|   return 0; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,60 +22,56 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bma250e.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMA250E using default I2C parameters | ||||
|   upm::BMA250E sensor; | ||||
|     // Instantiate an BMA250E using default I2C parameters | ||||
|     upm::BMA250E sensor; | ||||
|  | ||||
|   // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|   // for CS: BMA250E(0, -1, 10); | ||||
|     // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|     // for CS: BMA250E(0, -1, 10); | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getAccelerometer(&x, &y, &z); | ||||
|       cout << "Accelerometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " g" | ||||
|            << endl; | ||||
|         sensor.getAccelerometer(&x, &y, &z); | ||||
|         cout << "Accelerometer x: " << x << " y: " << y << " z: " << z << " g" << endl; | ||||
|  | ||||
|       // we show both C and F for temperature | ||||
|       cout << "Compensation Temperature: " << sensor.getTemperature() | ||||
|            << " C / " << sensor.getTemperature(true) << " F" | ||||
|            << endl; | ||||
|         // we show both C and F for temperature | ||||
|         cout << "Compensation Temperature: " << sensor.getTemperature() << " C / " | ||||
|              << sensor.getTemperature(true) << " F" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,60 +22,56 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmg160.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMG160 using default I2C parameters | ||||
|   upm::BMG160 sensor; | ||||
|     // Instantiate an BMG160 using default I2C parameters | ||||
|     upm::BMG160 sensor; | ||||
|  | ||||
|   // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|   // for CS: BMG160(0, -1, 10); | ||||
|     // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|     // for CS: BMG160(0, -1, 10); | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getGyroscope(&x, &y, &z); | ||||
|       cout << "Gyroscope x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " degrees/s" | ||||
|            << endl; | ||||
|         sensor.getGyroscope(&x, &y, &z); | ||||
|         cout << "Gyroscope x: " << x << " y: " << y << " z: " << z << " degrees/s" << endl; | ||||
|  | ||||
|       // we show both C and F for temperature | ||||
|       cout << "Compensation Temperature: " << sensor.getTemperature() | ||||
|            << " C / " << sensor.getTemperature(true) << " F" | ||||
|            << endl; | ||||
|         // we show both C and F for temperature | ||||
|         cout << "Compensation Temperature: " << sensor.getTemperature() << " C / " | ||||
|              << sensor.getTemperature(true) << " F" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,61 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmi160.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a BMI160 instance using default i2c bus and address | ||||
|   upm::BMI160 *sensor = new upm::BMI160(); | ||||
|     // Instantiate a BMI160 instance using default i2c bus and address | ||||
|     upm::BMI160 sensor; | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values from the sensor | ||||
|       sensor->update(); | ||||
|     while (shouldRun) { | ||||
|         // update our values from the sensor | ||||
|         sensor.update(); | ||||
|  | ||||
|       float dataX, dataY, dataZ; | ||||
|         float dataX, dataY, dataZ; | ||||
|  | ||||
|       sensor->getAccelerometer(&dataX, &dataY, &dataZ); | ||||
|       cout << "Accelerometer: "; | ||||
|       cout << "AX: " << dataX << " AY: " << dataY << " AZ: " | ||||
|            << dataZ << endl; | ||||
|         sensor.getAccelerometer(&dataX, &dataY, &dataZ); | ||||
|         cout << "Accelerometer: "; | ||||
|         cout << "AX: " << dataX << " AY: " << dataY << " AZ: " << dataZ << endl; | ||||
|  | ||||
|       sensor->getGyroscope(&dataX, &dataY, &dataZ); | ||||
|       cout << "Gryoscope:     "; | ||||
|       cout << "GX: " << dataX << " GY: " << dataY << " GZ: " | ||||
|            << dataZ << endl; | ||||
|         sensor.getGyroscope(&dataX, &dataY, &dataZ); | ||||
|         cout << "Gryoscope:     "; | ||||
|         cout << "GX: " << dataX << " GY: " << dataY << " GZ: " << dataZ << endl; | ||||
|  | ||||
|       sensor->getMagnetometer(&dataX, &dataY, &dataZ); | ||||
|       cout << "Magnetometer:  "; | ||||
|       cout << "MX: " << dataX << " MY: " << dataY << " MZ: " | ||||
|            << dataZ << endl; | ||||
|         sensor.getMagnetometer(&dataX, &dataY, &dataZ); | ||||
|         cout << "Magnetometer:  "; | ||||
|         cout << "MX: " << dataX << " MY: " << dataY << " MZ: " << dataZ << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(500000); | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,55 +22,52 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmm150.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMM150 using default I2C parameters | ||||
|   upm::BMM150 sensor; | ||||
|     // Instantiate an BMM150 using default I2C parameters | ||||
|     upm::BMM150 sensor; | ||||
|  | ||||
|   // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|   // for CS: BMM150(0, -1, 10); | ||||
|     // For SPI, bus 0, you would pass -1 as the address, and a valid pin | ||||
|     // for CS: BMM150(0, -1, 10); | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getMagnetometer(&x, &y, &z); | ||||
|       cout << "Magnetometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " uT" | ||||
|            << endl; | ||||
|         sensor.getMagnetometer(&x, &y, &z); | ||||
|         cout << "Magnetometer x: " << x << " y: " << y << " z: " << z << " uT" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,57 +22,54 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bme280.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a BME280 instance using default i2c bus and address | ||||
|   upm::BME280 *sensor = new upm::BME280(); | ||||
|     // Instantiate a BME280 instance using default i2c bus and address | ||||
|     upm::BME280 sensor; | ||||
|  | ||||
|   // For SPI, bus 0, you would pass -1 as the address, and a valid pin for CS: | ||||
|   // BME280(0, -1, 10); | ||||
|     // For SPI, bus 0, you would pass -1 as the address, and a valid pin for CS: | ||||
|     // BME280(0, -1, 10); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values from the sensor | ||||
|       sensor->update(); | ||||
|     while (shouldRun) { | ||||
|         // update our values from the sensor | ||||
|         sensor.update(); | ||||
|  | ||||
|       // we show both C and F for temperature | ||||
|       cout << "Compensation Temperature: " << sensor->getTemperature() | ||||
|            << " C / " << sensor->getTemperature(true) << " F" | ||||
|            << endl; | ||||
|       cout << "Pressure: " << sensor->getPressure() << " Pa" << endl; | ||||
|       cout << "Computed Altitude: " << sensor->getAltitude() << " m" << endl; | ||||
|       cout << "Humidity: " << sensor->getHumidity() << " %RH" << endl; | ||||
|         // we show both C and F for temperature | ||||
|         cout << "Compensation Temperature: " << sensor.getTemperature() << " C / " | ||||
|              << sensor.getTemperature(true) << " F" << endl; | ||||
|         cout << "Pressure: " << sensor.getPressure() << " Pa" << endl; | ||||
|         cout << "Computed Altitude: " << sensor.getAltitude() << " m" << endl; | ||||
|         cout << "Humidity: " << sensor.getHumidity() << " %RH" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -24,56 +24,53 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmp280.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a BMP280 instance using default i2c bus and address | ||||
|   upm::BMP280 *sensor = new upm::BMP280(); | ||||
|     // Instantiate a BMP280 instance using default i2c bus and address | ||||
|     upm::BMP280 sensor; | ||||
|  | ||||
|   // For SPI, bus 0, you would pass -1 as the address, and a valid pin for CS: | ||||
|   // BMP280(0, -1, 10); | ||||
|     // For SPI, bus 0, you would pass -1 as the address, and a valid pin for CS: | ||||
|     // BMP280(0, -1, 10); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values from the sensor | ||||
|       sensor->update(); | ||||
|     while (shouldRun) { | ||||
|         // update our values from the sensor | ||||
|         sensor.update(); | ||||
|  | ||||
|       // we show both C and F for temperature | ||||
|       cout << "Compensation Temperature: " << sensor->getTemperature() | ||||
|            << " C / " << sensor->getTemperature(true) << " F" | ||||
|            << endl; | ||||
|       cout << "Pressure: " << sensor->getPressure() << " Pa" << endl; | ||||
|       cout << "Computed Altitude: " << sensor->getAltitude() << " m" << endl; | ||||
|         // we show both C and F for temperature | ||||
|         cout << "Compensation Temperature: " << sensor.getTemperature() << " C / " | ||||
|              << sensor.getTemperature(true) << " F" << endl; | ||||
|         cout << "Pressure: " << sensor.getPressure() << " Pa" << endl; | ||||
|         cout << "Computed Altitude: " << sensor.getAltitude() << " m" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -27,52 +27,47 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmpx8x.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Instantiate a BMPX8X sensor on I2C using defaults. | ||||
|     upm::BMPX8X sensor; | ||||
|  | ||||
|     // Print the pressure, altitude, sea level, and | ||||
|     // temperature values every 0.5 seconds | ||||
|     while (shouldRun) | ||||
|     { | ||||
|     while (shouldRun) { | ||||
|         sensor.update(); | ||||
|  | ||||
|         cout << "Pressure: " | ||||
|              << sensor.getPressure() | ||||
|              << " Pa, Temperature: " | ||||
|              << sensor.getTemperature() | ||||
|              << " C, Altitude: " | ||||
|              << sensor.getAltitude() | ||||
|              << " m, Sea level: " | ||||
|              << sensor.getSealevelPressure() | ||||
|              << " Pa" | ||||
|              << endl; | ||||
|         cout << "Pressure: " << sensor.getPressure() | ||||
|              << " Pa, Temperature: " << sensor.getTemperature() | ||||
|              << " C, Altitude: " << sensor.getAltitude() | ||||
|              << " m, Sea level: " << sensor.getSealevelPressure() << " Pa" << endl; | ||||
|  | ||||
|         usleep(500000); | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|  | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,59 +22,52 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmc150.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMC150 using default I2C parameters | ||||
|   upm::BMC150 sensor; | ||||
|     // Instantiate an BMC150 using default I2C parameters | ||||
|     upm::BMC150 sensor; | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getAccelerometer(&x, &y, &z); | ||||
|       cout << "Accelerometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " g" | ||||
|            << endl; | ||||
|         sensor.getAccelerometer(&x, &y, &z); | ||||
|         cout << "Accelerometer x: " << x << " y: " << y << " z: " << z << " g" << endl; | ||||
|  | ||||
|       sensor.getMagnetometer(&x, &y, &z); | ||||
|       cout << "Magnetometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " uT" | ||||
|            << endl; | ||||
|         sensor.getMagnetometer(&x, &y, &z); | ||||
|         cout << "Magnetometer x: " << x << " y: " << y << " z: " << z << " uT" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,59 +22,52 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmi055.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMI055 using default I2C parameters | ||||
|   upm::BMI055 sensor; | ||||
|     // Instantiate an BMI055 using default I2C parameters | ||||
|     upm::BMI055 sensor; | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getAccelerometer(&x, &y, &z); | ||||
|       cout << "Accelerometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " g" | ||||
|            << endl; | ||||
|         sensor.getAccelerometer(&x, &y, &z); | ||||
|         cout << "Accelerometer x: " << x << " y: " << y << " z: " << z << " g" << endl; | ||||
|  | ||||
|       sensor.getGyroscope(&x, &y, &z); | ||||
|       cout << "Gyroscope x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " degrees/s" | ||||
|            << endl; | ||||
|         sensor.getGyroscope(&x, &y, &z); | ||||
|         cout << "Gyroscope x: " << x << " y: " << y << " z: " << z << " degrees/s" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,66 +22,55 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bmx055.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BMX055 using default I2C parameters | ||||
|   upm::BMX055 sensor; | ||||
|     // Instantiate an BMX055 using default I2C parameters | ||||
|     upm::BMX055 sensor; | ||||
|  | ||||
|   // now output data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float x, y, z; | ||||
|     // now output data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float x, y, z; | ||||
|  | ||||
|       sensor.update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor.getAccelerometer(&x, &y, &z); | ||||
|       cout << "Accelerometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " g" | ||||
|            << endl; | ||||
|         sensor.getAccelerometer(&x, &y, &z); | ||||
|         cout << "Accelerometer x: " << x << " y: " << y << " z: " << z << " g" << endl; | ||||
|  | ||||
|       sensor.getGyroscope(&x, &y, &z); | ||||
|       cout << "Gyroscope x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " degrees/s" | ||||
|            << endl; | ||||
|         sensor.getGyroscope(&x, &y, &z); | ||||
|         cout << "Gyroscope x: " << x << " y: " << y << " z: " << z << " degrees/s" << endl; | ||||
|  | ||||
|       sensor.getMagnetometer(&x, &y, &z); | ||||
|       cout << "Magnetometer x: " << x | ||||
|            << " y: " << y | ||||
|            << " z: " << z | ||||
|            << " uT" | ||||
|            << endl; | ||||
|         sensor.getMagnetometer(&x, &y, &z); | ||||
|         cout << "Magnetometer x: " << x << " y: " << y << " z: " << z << " uT" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       usleep(250000); | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,108 +22,82 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "bno055.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate an BNO055 using default parameters (bus 0, addr | ||||
|   // 0x28).  The default running mode is NDOF absolute orientation | ||||
|   // mode. | ||||
|   upm::BNO055 *sensor = new upm::BNO055(); | ||||
|     // Instantiate an BNO055 using default parameters (bus 0, addr | ||||
|     // 0x28).  The default running mode is NDOF absolute orientation | ||||
|     // mode. | ||||
|     upm::BNO055 sensor; | ||||
|  | ||||
|   // First we need to calibrate.... | ||||
|   cout << "First we need to calibrate.  4 numbers will be output every" | ||||
|        << endl; | ||||
|   cout << "second for each sensor.  0 means uncalibrated, and 3 means" | ||||
|        << endl; | ||||
|   cout << "fully calibrated." | ||||
|        << endl; | ||||
|   cout << "See the UPM documentation on this sensor for instructions on" | ||||
|        << endl; | ||||
|   cout << "what actions are required to calibrate." | ||||
|        << endl; | ||||
|   cout << endl; | ||||
|     // First we need to calibrate.... | ||||
|     cout << "First we need to calibrate.  4 numbers will be output every" << endl; | ||||
|     cout << "second for each sensor.  0 means uncalibrated, and 3 means" << endl; | ||||
|     cout << "fully calibrated." << endl; | ||||
|     cout << "See the UPM documentation on this sensor for instructions on" << endl; | ||||
|     cout << "what actions are required to calibrate." << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   // do the calibration... | ||||
|   while (shouldRun && !sensor->isFullyCalibrated()) | ||||
|     { | ||||
|       int mag, acc, gyr, sys; | ||||
|       sensor->getCalibrationStatus(&mag, &acc, &gyr, &sys); | ||||
|     // do the calibration... | ||||
|     while (shouldRun && !sensor.isFullyCalibrated()) { | ||||
|         int mag, acc, gyr, sys; | ||||
|         sensor.getCalibrationStatus(&mag, &acc, &gyr, &sys); | ||||
|  | ||||
|       cout << "Magnetometer: " << mag | ||||
|            << " Accelerometer: " << acc | ||||
|            << " Gyroscope: " << gyr | ||||
|            << " System: " << sys | ||||
|            << endl; | ||||
|         cout << "Magnetometer: " << mag << " Accelerometer: " << acc << " Gyroscope: " << gyr | ||||
|              << " System: " << sys << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|   cout << endl; | ||||
|   cout << "Calibration complete." << endl; | ||||
|   cout << endl; | ||||
|     cout << endl; | ||||
|     cout << "Calibration complete." << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   // now output various fusion data every 250 milliseconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       float w, x, y, z; | ||||
|     // now output various fusion data every 250 milliseconds | ||||
|     while (shouldRun) { | ||||
|         float w, x, y, z; | ||||
|  | ||||
|       sensor->update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|       sensor->getEulerAngles(&x, &y, &z); | ||||
|       cout << "Euler: Heading: " << x | ||||
|            << " Roll: " << y | ||||
|            << " Pitch: " << z | ||||
|            << " degrees" | ||||
|            << endl; | ||||
|         sensor.getEulerAngles(&x, &y, &z); | ||||
|         cout << "Euler: Heading: " << x << " Roll: " << y << " Pitch: " << z << " degrees" << endl; | ||||
|  | ||||
|       sensor->getQuaternions(&w, &x, &y, &z); | ||||
|       cout << "Quaternion: W: " << w | ||||
|            << " X: " << x | ||||
|            << " Y: " << y | ||||
|            << " Z: " << z | ||||
|            << endl; | ||||
|         sensor.getQuaternions(&w, &x, &y, &z); | ||||
|         cout << "Quaternion: W: " << w << " X: " << x << " Y: " << y << " Z: " << z << endl; | ||||
|  | ||||
|       sensor->getLinearAcceleration(&x, &y, &z); | ||||
|       cout << "Linear Acceleration: X: " << x | ||||
|            << " Y: " << y | ||||
|            << " Z: " << z | ||||
|            << " m/s^2" | ||||
|            << endl; | ||||
|         sensor.getLinearAcceleration(&x, &y, &z); | ||||
|         cout << "Linear Acceleration: X: " << x << " Y: " << y << " Z: " << z << " m/s^2" << endl; | ||||
|  | ||||
|       sensor->getGravityVectors(&x, &y, &z); | ||||
|       cout << "Gravity Vector: X: " << x | ||||
|            << " Y: " << y | ||||
|            << " Z: " << z | ||||
|            << " m/s^2" | ||||
|            << endl; | ||||
|         sensor.getGravityVectors(&x, &y, &z); | ||||
|         cout << "Gravity Vector: X: " << x << " Y: " << y << " Z: " << z << " m/s^2" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|       usleep(250000); | ||||
|         cout << endl; | ||||
|         upm_delay_us(250000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,28 +22,28 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
|  | ||||
| #include "button.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // This example uses GPIO 0 | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Create the button object using GPIO pin 0 | ||||
|     upm::Button* button = new upm::Button(0); | ||||
|     upm::Button button(0); | ||||
|  | ||||
|     // Read the input and print, waiting one second between readings | ||||
|     while( 1 ) { | ||||
|         std::cout << button->name() << " value is " << button->value() << std::endl; | ||||
|         sleep(1); | ||||
|     while (1) { | ||||
|         std::cout << button.name() << " value is " << button.value() << std::endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the button object | ||||
|     delete button; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,37 +22,32 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "buzzer.hpp" | ||||
| #include "buzzer_tones.h" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) { | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     //! [Interesting] | ||||
|     int chord[] = { BUZZER_DO, BUZZER_RE, BUZZER_MI, | ||||
|                     BUZZER_FA, BUZZER_SOL, BUZZER_LA, | ||||
|                     BUZZER_SI }; | ||||
|     int chord[] = { BUZZER_DO, BUZZER_RE, BUZZER_MI, BUZZER_FA, BUZZER_SOL, BUZZER_LA, BUZZER_SI }; | ||||
|  | ||||
|     // create Buzzer instance | ||||
|     upm::Buzzer* sound = new upm::Buzzer(5); | ||||
|     upm::Buzzer sound(5); | ||||
|     // print sensor name | ||||
|     std::cout << sound->name() << std::endl; | ||||
|     std::cout << sound.name() << std::endl; | ||||
|  | ||||
|     // play each sound (DO, RE, MI, etc...) for .5 seconds, pausing | ||||
|     // for 0.1 seconds between notes | ||||
|     for (int chord_ind = 0; chord_ind < 7; chord_ind++) | ||||
|     { | ||||
|         std::cout << sound->playSound(chord[chord_ind], 500000) << std::endl; | ||||
|     for (int chord_ind = 0; chord_ind < 7; chord_ind++) { | ||||
|         std::cout << sound.playSound(chord[chord_ind], 500000) << std::endl; | ||||
|         upm_delay_ms(100); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sound; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,56 +22,54 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "cjq4435.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     // Instantiate a CJQ4435 MOSFET on a PWM capable digital pin D3 | ||||
|     upm::CJQ4435* mosfet = new upm::CJQ4435(3); | ||||
|     upm::CJQ4435 mosfet(3); | ||||
|  | ||||
|     mosfet->setPeriodMS(10); | ||||
|     mosfet->enable(true); | ||||
|     mosfet.setPeriodMS(10); | ||||
|     mosfet.enable(true); | ||||
|  | ||||
|     while (shouldRun) | ||||
|     { | ||||
|     while (shouldRun) { | ||||
|         // start with a duty cycle of 0.0 (off) and increment to 1.0 (on) | ||||
|         for (float i=0.0; i <= 1.0; i+=0.1) | ||||
|         { | ||||
|             mosfet->setDutyCycle(i); | ||||
|             usleep(100000); | ||||
|         for (float i = 0.0; i <= 1.0; i += 0.1) { | ||||
|             mosfet.setDutyCycle(i); | ||||
|             upm_delay_us(100000); | ||||
|         } | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|         // Now take it back down | ||||
|         // start with a duty cycle of 1.0 (on) and decrement to 0.0 (off) | ||||
|         for (float i=1.0; i >= 0.0; i-=0.1) | ||||
|         { | ||||
|             mosfet->setDutyCycle(i); | ||||
|             usleep(100000); | ||||
|         for (float i = 1.0; i >= 0.0; i -= 0.1) { | ||||
|             mosfet.setDutyCycle(i); | ||||
|             upm_delay_us(100000); | ||||
|         } | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     delete mosfet; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,48 +22,45 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "collision.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the Collision Sensor | ||||
|   // Instantiate a Collision on digital pin D2 | ||||
|   upm::Collision* collision = new upm::Collision(2); | ||||
|     //! [Interesting] | ||||
|     // The was tested with the Collision Sensor | ||||
|     // Instantiate a Collision on digital pin D2 | ||||
|     upm::Collision collision(2); | ||||
|  | ||||
|   bool collisionState = false; | ||||
|   cout << "No collision" << endl; | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if (collision->isColliding() && !collisionState) | ||||
| 	{ | ||||
| 		cout << "Collision!" << endl; | ||||
| 		collisionState = true; | ||||
| 	} | ||||
| 	else if (collisionState) | ||||
| 	{ | ||||
| 		cout << "No collision" << endl; | ||||
| 		collisionState = false; | ||||
| 	} | ||||
|   } | ||||
|     bool collisionState = false; | ||||
|     cout << "No collision" << endl; | ||||
|     while (shouldRun) { | ||||
|         if (collision.isColliding() && !collisionState) { | ||||
|             cout << "Collision!" << endl; | ||||
|             collisionState = true; | ||||
|         } else if (collisionState) { | ||||
|             cout << "No collision" << endl; | ||||
|             collisionState = false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete collision; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -24,58 +24,49 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "curieimu.hpp" | ||||
| #include "mraa.h" | ||||
| #include "mraa/firmata.h" | ||||
| #include <iostream> | ||||
| #include <math.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     //! [Interesting] | ||||
|     mraa_init(); | ||||
|     mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyACM0"); | ||||
|  | ||||
|     upm::CurieImu* sensor = new upm::CurieImu(); | ||||
|     upm::CurieImu sensor; | ||||
|  | ||||
|     std::cout << "temperature is: " << (sensor->getTemperature() * pow(0.5, 9) + 23) << std::endl; | ||||
|     std::cout << "temperature is: " << (sensor.getTemperature() * pow(0.5, 9) + 23) << std::endl; | ||||
|  | ||||
|     sensor->updateAccel(); | ||||
|     int x = sensor->getAccelX(), | ||||
|         y = sensor->getAccelY(), | ||||
|         z = sensor->getAccelZ(); | ||||
|     sensor.updateAccel(); | ||||
|     int x = sensor.getAccelX(), y = sensor.getAccelY(), z = sensor.getAccelZ(); | ||||
|     printf("accelerometer is: %d, %d, %d\n", x, y, z); | ||||
|  | ||||
|     sensor->updateGyro(); | ||||
|     int a = sensor->getGyroX(), | ||||
|         b = sensor->getGyroY(), | ||||
|         c = sensor->getGyroZ(); | ||||
|     sensor.updateGyro(); | ||||
|     int a = sensor.getGyroX(), b = sensor.getGyroY(), c = sensor.getGyroZ(); | ||||
|     printf("gyroscope is: %d, %d, %d\n", a, b, c); | ||||
|  | ||||
|     int axis, direction; | ||||
|     sensor->enableShockDetection(true); | ||||
|     for(int i=0; i<300; i++) { | ||||
|       if (sensor->isShockDetected()) { | ||||
|         sensor->getNextShock(); | ||||
|         axis = sensor->getAxis(); | ||||
|         direction = sensor->getDirection(); | ||||
|         printf("shock data is: %d, %d\n", axis, direction); | ||||
|       } | ||||
|       usleep(10000); | ||||
|     sensor.enableShockDetection(true); | ||||
|     for (int i = 0; i < 300; i++) { | ||||
|         if (sensor.isShockDetected()) { | ||||
|             sensor.getNextShock(); | ||||
|             axis = sensor.getAxis(); | ||||
|             direction = sensor.getDirection(); | ||||
|             printf("shock data is: %d, %d\n", axis, direction); | ||||
|         } | ||||
|         upm_delay_us(10000); | ||||
|     } | ||||
|  | ||||
|     sensor->updateMotion(); | ||||
|     int m = sensor->getAccelX(), | ||||
|         n = sensor->getAccelY(), | ||||
|         o = sensor->getAccelZ(), | ||||
|         p = sensor->getGyroX(), | ||||
|         q = sensor->getGyroY(), | ||||
|         r = sensor->getGyroZ(); | ||||
|     sensor.updateMotion(); | ||||
|     int m = sensor.getAccelX(), n = sensor.getAccelY(), o = sensor.getAccelZ(), | ||||
|         p = sensor.getGyroX(), q = sensor.getGyroY(), r = sensor.getGyroZ(); | ||||
|     printf("motion is: %d, %d, %d, %d, %d, %d\n", m, n, o, p, q, r); | ||||
|  | ||||
|     delete sensor; | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
|   | ||||
| @@ -22,61 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "cwlsxxa.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Initializing..." << endl; | ||||
|     cout << "Initializing..." << endl; | ||||
|  | ||||
|   // Instantiate an CWLSXXA instance, using A0 for CO2, A1 for | ||||
|   // humidity and A2 for temperature | ||||
|   upm::CWLSXXA *sensor = new upm::CWLSXXA(0, 1, 2); | ||||
|     // Instantiate an CWLSXXA instance, using A0 for CO2, A1 for | ||||
|     // humidity and A2 for temperature | ||||
|     upm::CWLSXXA sensor(0, 1, 2); | ||||
|  | ||||
|   // update and print available values every second | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values from the sensor | ||||
|       sensor->update(); | ||||
|     // update and print available values every second | ||||
|     while (shouldRun) { | ||||
|         // update our values from the sensor | ||||
|         sensor.update(); | ||||
|  | ||||
|       // we show both C and F for temperature | ||||
|       cout << "Temperature: " << sensor->getTemperature() | ||||
|            << " C / " << sensor->getTemperature(true) << " F" | ||||
|            << endl; | ||||
|         // we show both C and F for temperature | ||||
|         cout << "Temperature: " << sensor.getTemperature() << " C / " << sensor.getTemperature(true) | ||||
|              << " F" << endl; | ||||
|  | ||||
|       cout << "Humidity: " << sensor->getHumidity() | ||||
|            << " %" << endl; | ||||
|         cout << "Humidity: " << sensor.getHumidity() << " %" << endl; | ||||
|  | ||||
|       cout << "CO2: " << sensor->getCO2() | ||||
|            << " ppm" << endl; | ||||
|         cout << "CO2: " << sensor.getCO2() << " ppm" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|     //! [Interesting] | ||||
|  | ||||
| //! [Interesting] | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,60 +22,53 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "dfrec.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a DFRobot EC sensor on analog pin A0, with a ds18b20 | ||||
|   // temperature sensor connected to UART 0, and a device index (for | ||||
|   // the ds1820b uart bus) of 0, and an analog reference voltage of | ||||
|   // 5.0. | ||||
|   upm::DFREC *sensor = new upm::DFREC(0, 0, 0, 5.0); | ||||
|     // Instantiate a DFRobot EC sensor on analog pin A0, with a ds18b20 | ||||
|     // temperature sensor connected to UART 0, and a device index (for | ||||
|     // the ds1820b uart bus) of 0, and an analog reference voltage of | ||||
|     // 5.0. | ||||
|     upm::DFREC sensor(0, 0, 0, 5.0); | ||||
|  | ||||
|   // Every 2 seconds, update and print values | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       sensor->update(); | ||||
|     // Every 2 seconds, update and print values | ||||
|     while (shouldRun) { | ||||
|         sensor.update(); | ||||
|  | ||||
|       cout << "EC = " | ||||
|            << sensor->getEC() | ||||
|            << " ms/cm" | ||||
|            << endl; | ||||
|         cout << "EC = " << sensor.getEC() << " ms/cm" << endl; | ||||
|  | ||||
|       cout << "Volts = " | ||||
|            << sensor->getVolts() | ||||
|            << ", Temperature = " | ||||
|            << sensor->getTemperature() | ||||
|            << " C" | ||||
|            << endl; | ||||
|         cout << "Volts = " << sensor.getVolts() << ", Temperature = " << sensor.getTemperature() | ||||
|              << " C" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(2); | ||||
|         upm_delay(2); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,66 +22,63 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "dfrorp.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a DFRobot ORP sensor on analog pin A0 with an analog | ||||
|   // reference voltage of 5.0. | ||||
|   upm::DFRORP *sensor = new upm::DFRORP(0, 5.0); | ||||
|     // Instantiate a DFRobot ORP sensor on analog pin A0 with an analog | ||||
|     // reference voltage of 5.0. | ||||
|     upm::DFRORP sensor(0, 5.0); | ||||
|  | ||||
|   // To calibrate: | ||||
|   // | ||||
|   // Disconnect the sensor probe (but leave the sensor interface board | ||||
|   // connected).  Then run one of the examples while holding down the | ||||
|   // 'calibrate' button on the device.  Read the ORP value reported | ||||
|   // (it should be fairly small). | ||||
|   // | ||||
|   // This value is what you should supply to setCalibrationOffset(). | ||||
|   // Then reconnect the probe to the interface board and you should be | ||||
|   // ready to go. | ||||
|   // | ||||
|   // DO NOT press the calibrate button on the interface board while | ||||
|   // the probe is attached or you can permanently damage the probe. | ||||
|   sensor->setCalibrationOffset(0.97); | ||||
|     // To calibrate: | ||||
|     // | ||||
|     // Disconnect the sensor probe (but leave the sensor interface board | ||||
|     // connected).  Then run one of the examples while holding down the | ||||
|     // 'calibrate' button on the device.  Read the ORP value reported | ||||
|     // (it should be fairly small). | ||||
|     // | ||||
|     // This value is what you should supply to setCalibrationOffset(). | ||||
|     // Then reconnect the probe to the interface board and you should be | ||||
|     // ready to go. | ||||
|     // | ||||
|     // DO NOT press the calibrate button on the interface board while | ||||
|     // the probe is attached or you can permanently damage the probe. | ||||
|     sensor.setCalibrationOffset(0.97); | ||||
|  | ||||
|   // Every second, update and print values | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       sensor->update(); | ||||
|     // Every second, update and print values | ||||
|     while (shouldRun) { | ||||
|         sensor.update(); | ||||
|  | ||||
|       cout << "ORP: " | ||||
|            << sensor->getORP() | ||||
|            << " mV" | ||||
|            << endl; | ||||
|         cout << "ORP: " << sensor.getORP() << " mV" << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,55 +22,55 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "dfrph.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| #define DFRPH_AREF   5.0 | ||||
| #define DFRPH_AREF 5.0 | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a DFRPH sensor on analog pin A0, with an analog | ||||
|   // reference voltage of DFRPH_AREF | ||||
|   upm::DFRPH *sensor = new upm::DFRPH(0, DFRPH_AREF); | ||||
|    | ||||
|     // Instantiate a DFRPH sensor on analog pin A0, with an analog | ||||
|     // reference voltage of DFRPH_AREF | ||||
|     upm::DFRPH sensor(0, DFRPH_AREF); | ||||
|  | ||||
|   // After calibration, set the offset (based on calibration with a pH | ||||
|   // 7.0 buffer solution).  See the UPM sensor documentation for | ||||
|   // calibrations instructions. | ||||
|   sensor->setOffset(0.065); | ||||
|     // After calibration, set the offset (based on calibration with a pH | ||||
|     // 7.0 buffer solution).  See the UPM sensor documentation for | ||||
|     // calibrations instructions. | ||||
|     sensor.setOffset(0.065); | ||||
|  | ||||
|   // Every second, sample the pH and output it's corresponding | ||||
|   // analog voltage. | ||||
|     // Every second, sample the pH and output it's corresponding | ||||
|     // analog voltage. | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "Detected volts: " << sensor->volts() << endl; | ||||
|       cout << "pH value: " << sensor->pH() << endl; | ||||
|       cout << endl; | ||||
|     while (shouldRun) { | ||||
|         cout << "Detected volts: " << sensor.volts() << endl; | ||||
|         cout << "pH value: " << sensor.pH() << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,56 +22,54 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <string> | ||||
|  | ||||
| #include "ds1307.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| void printTime(upm::DS1307 *rtc) | ||||
| void | ||||
| printTime(upm::DS1307& rtc) | ||||
| { | ||||
|   cout << "The time is: " <<  | ||||
|     rtc->month << "/" << rtc->dayOfMonth << "/" << rtc->year << " "  | ||||
|        << rtc->hours << ":" << rtc->minutes << ":" << rtc->seconds; | ||||
|     cout << "The time is: " << rtc.month << "/" << rtc.dayOfMonth << "/" << rtc.year << " " | ||||
|          << rtc.hours << ":" << rtc.minutes << ":" << rtc.seconds; | ||||
|  | ||||
|   if (rtc->amPmMode) | ||||
|     cout << ((rtc->pm) ? " PM " : " AM "); | ||||
|     if (rtc.amPmMode) | ||||
|         cout << ((rtc.pm) ? " PM " : " AM "); | ||||
|  | ||||
|   cout << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   cout << "Clock is in " << ((rtc->amPmMode) ? "AM/PM mode" : "24hr mode") | ||||
|        << endl; | ||||
|     cout << "Clock is in " << ((rtc.amPmMode) ? "AM/PM mode" : "24hr mode") << endl; | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|   // Instantiate a DS1037 on I2C bus 0 | ||||
|   upm::DS1307 *rtc = new upm::DS1307(0); | ||||
|    | ||||
|   // always do this first | ||||
|   cout << "Loading the current time... " << endl; | ||||
|   if (!rtc->loadTime()) | ||||
|     { | ||||
|       cerr << "rtc->loadTime() failed." << endl; | ||||
|       return 0; | ||||
|     //! [Interesting] | ||||
|     // Instantiate a DS1037 on I2C bus 0 | ||||
|     upm::DS1307 rtc(0); | ||||
|  | ||||
|     // always do this first | ||||
|     cout << "Loading the current time... " << endl; | ||||
|     if (!rtc.loadTime()) { | ||||
|         cerr << "rtc.loadTime() failed." << endl; | ||||
|         return 0; | ||||
|     } | ||||
|    | ||||
|   printTime(rtc); | ||||
|  | ||||
|   // set the year as an example | ||||
|   cout << "setting the year to 50" << endl; | ||||
|   rtc->year = 50; | ||||
|     printTime(rtc); | ||||
|  | ||||
|   rtc->setTime(); | ||||
|     // set the year as an example | ||||
|     cout << "setting the year to 50" << endl; | ||||
|     rtc.year = 50; | ||||
|  | ||||
|   // reload the time and print it | ||||
|   rtc->loadTime(); | ||||
|   printTime(rtc); | ||||
|     rtc.setTime(); | ||||
|  | ||||
|   //! [Interesting] | ||||
|    | ||||
|   delete rtc; | ||||
|   return 0; | ||||
|     // reload the time and print it | ||||
|     rtc.loadTime(); | ||||
|     printTime(rtc); | ||||
|  | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -1,43 +1,41 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <stdlib.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "ds1808lc.hpp" | ||||
|  | ||||
| #define EDISON_I2C_BUS 1            // Edison I2C-1 | ||||
| #define DS1808_GPIO_PWR 15          // Edison GP165 | ||||
| #define EDISON_I2C_BUS 1   // Edison I2C-1 | ||||
| #define DS1808_GPIO_PWR 15 // Edison GP165 | ||||
|  | ||||
| void printState(upm::ILightController &lightController) | ||||
| void | ||||
| printState(upm::ILightController& lightController) | ||||
| { | ||||
|     if (lightController.isPowered()) | ||||
|     { | ||||
|         std::cout << "Light is powered, brightness = " << lightController.getBrightness() << std::endl; | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|     if (lightController.isPowered()) { | ||||
|         std::cout << "Light is powered, brightness = " << lightController.getBrightness() | ||||
|                   << std::endl; | ||||
|     } else { | ||||
|         std::cout << "Light is not powered." << std::endl; | ||||
|     } | ||||
| } | ||||
|  | ||||
| int main( int argc, char **argv ) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     //! [Interesting] | ||||
|     upm::DS1808LC lightController(DS1808_GPIO_PWR, EDISON_I2C_BUS); | ||||
|     std::cout <<  "Existing state: "; printState(lightController); | ||||
|     if (argc == 2) | ||||
|     { | ||||
|     std::cout << "Existing state: "; | ||||
|     printState(lightController); | ||||
|     if (argc == 2) { | ||||
|         std::string arg = argv[1]; | ||||
|         int brightness = ::atoi(argv[1]); | ||||
|         if (brightness > 0) | ||||
|         { | ||||
|         if (brightness > 0) { | ||||
|             lightController.setPowerOn(); | ||||
|             lightController.setBrightness(brightness); | ||||
|         } | ||||
|         else | ||||
|         } else | ||||
|             lightController.setPowerOff(); | ||||
|     } | ||||
|     std::cout <<  "Now: ";printState(lightController); | ||||
|     std::cout << "Now: "; | ||||
|     printState(lightController); | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,65 +22,61 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "ds18b20.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Initializing..." << endl; | ||||
|     cout << "Initializing..." << endl; | ||||
|  | ||||
|   // Instantiate an DS18B20 instance using the default values (uart 0) | ||||
|   upm::DS18B20 sensor; | ||||
|     // Instantiate an DS18B20 instance using the default values (uart 0) | ||||
|     upm::DS18B20 sensor; | ||||
|  | ||||
|   cout << "Found " << sensor.devicesFound() << " device(s)" << endl; | ||||
|   cout << endl; | ||||
|     cout << "Found " << sensor.devicesFound() << " device(s)" << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   // bail if we didn't find anything | ||||
|   if (!sensor.devicesFound()) | ||||
|     return 1; | ||||
|     // bail if we didn't find anything | ||||
|     if (!sensor.devicesFound()) | ||||
|         return 1; | ||||
|  | ||||
|   // update and print available values every 2 seconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values for all of the detected sensors | ||||
|       sensor.update(-1); | ||||
|     // update and print available values every 2 seconds | ||||
|     while (shouldRun) { | ||||
|         // update our values for all of the detected sensors | ||||
|         sensor.update(-1); | ||||
|  | ||||
|       // we show both C and F for temperature for the sensors | ||||
|       int i; | ||||
|       for (i=0; i<sensor.devicesFound(); i++) | ||||
|       { | ||||
|           cout << "Device " | ||||
|                << i | ||||
|                << ": Temperature: " | ||||
|                << sensor.getTemperature(i) | ||||
|                << " C / " << sensor.getTemperature(i, true) << " F" | ||||
|                << endl; | ||||
|       } | ||||
|       cout << endl; | ||||
|         // we show both C and F for temperature for the sensors | ||||
|         int i; | ||||
|         for (i = 0; i < sensor.devicesFound(); i++) { | ||||
|             cout << "Device " << i << ": Temperature: " << sensor.getTemperature(i) << " C / " | ||||
|                  << sensor.getTemperature(i, true) << " F" << endl; | ||||
|         } | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(2); | ||||
|         upm_delay(2); | ||||
|     } | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,38 +22,37 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "ds2413.hpp" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|   // Instantiate a DS2413 Module on a Dallas 1-wire bus connected to UART 0 | ||||
|   upm::DS2413* sensor = new upm::DS2413(0); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a DS2413 Module on a Dallas 1-wire bus connected to UART 0 | ||||
|     upm::DS2413 sensor(0); | ||||
|  | ||||
|   // find all of the DS2413 devices present on the bus | ||||
|   sensor->init(); | ||||
|     // find all of the DS2413 devices present on the bus | ||||
|     sensor.init(); | ||||
|  | ||||
|   // how many devices were found? | ||||
|   cout << "Found "<< sensor->devicesFound() << " device(s)" << endl; | ||||
|     // how many devices were found? | ||||
|     cout << "Found " << sensor.devicesFound() << " device(s)" << endl; | ||||
|  | ||||
|   // read the gpio and latch values from the first device | ||||
|   // the lower 4 bits are of the form: | ||||
|   // <gpioB latch> <gpioB value> <gpioA latch> <gpioA value> | ||||
|   cout << "GPIO device 0 values: " << sensor->readGpios(0) << endl; | ||||
|     // read the gpio and latch values from the first device | ||||
|     // the lower 4 bits are of the form: | ||||
|     // <gpioB latch> <gpioB value> <gpioA latch> <gpioA value> | ||||
|     cout << "GPIO device 0 values: " << sensor.readGpios(0) << endl; | ||||
|  | ||||
|   // set the gpio latch values of the first device | ||||
|   cout << "Setting GPIO latches to on" << endl; | ||||
|   sensor->writeGpios(0, 0x03); | ||||
|     // set the gpio latch values of the first device | ||||
|     cout << "Setting GPIO latches to on" << endl; | ||||
|     sensor.writeGpios(0, 0x03); | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
| //! [Interesting] | ||||
|   return 0; | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,91 +22,84 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "e50hx.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // You will need to edit this example to conform to your site and your | ||||
|   // devices, specifically the Device Object Instance ID passed to the | ||||
|   // constructor, and the arguments to initMaster() that are | ||||
|   // appropriate for your BACnet network. | ||||
|     //! [Interesting] | ||||
|     // You will need to edit this example to conform to your site and your | ||||
|     // devices, specifically the Device Object Instance ID passed to the | ||||
|     // constructor, and the arguments to initMaster() that are | ||||
|     // appropriate for your BACnet network. | ||||
|  | ||||
|   string defaultDev = "/dev/ttyUSB0"; | ||||
|     string defaultDev = "/dev/ttyUSB0"; | ||||
|  | ||||
|   // if an argument was specified, use it as the device instead | ||||
|   if (argc > 1) | ||||
|     defaultDev = string(argv[1]); | ||||
|     // if an argument was specified, use it as the device instead | ||||
|     if (argc > 1) | ||||
|         defaultDev = string(argv[1]); | ||||
|  | ||||
|   cout << "Using device " << defaultDev << endl; | ||||
|   cout << "Initializing..." << endl; | ||||
|     cout << "Using device " << defaultDev << endl; | ||||
|     cout << "Initializing..." << endl; | ||||
|  | ||||
|   // Instantiate an E50HX object for an E50HX device that has 1075425 | ||||
|   // as it's unique Device Object Instance ID.  NOTE: You will | ||||
|   // certainly want to change this to the correct value for your | ||||
|   // device(s). | ||||
|   E50HX *sensor = new E50HX(1075425); | ||||
|     // Instantiate an E50HX object for an E50HX device that has 1075425 | ||||
|     // as it's unique Device Object Instance ID.  NOTE: You will | ||||
|     // certainly want to change this to the correct value for your | ||||
|     // device(s). | ||||
|     E50HX sensor(1075425); | ||||
|  | ||||
|   // Initialize our BACnet master, if it has not already been | ||||
|   // initialized, with the device and baudrate, choosing 1000001 as | ||||
|   // our unique Device Object Instance ID, 2 as our MAC address and | ||||
|   // using default values for maxMaster and maxInfoFrames | ||||
|   sensor->initMaster(defaultDev, 38400, 1000001, 2); | ||||
|     // Initialize our BACnet master, if it has not already been | ||||
|     // initialized, with the device and baudrate, choosing 1000001 as | ||||
|     // our unique Device Object Instance ID, 2 as our MAC address and | ||||
|     // using default values for maxMaster and maxInfoFrames | ||||
|     sensor.initMaster(defaultDev, 38400, 1000001, 2); | ||||
|  | ||||
|   // Uncomment to enable debugging output | ||||
|   // sensor->setDebug(true); | ||||
|     // Uncomment to enable debugging output | ||||
|     // sensor.setDebug(true); | ||||
|  | ||||
|   cout << endl; | ||||
|   cout << "Device Description: " << sensor->getDeviceDescription() << endl; | ||||
|   cout << "Device Location: " << sensor->getDeviceLocation() << endl; | ||||
|   cout << endl; | ||||
|     cout << endl; | ||||
|     cout << "Device Description: " << sensor.getDeviceDescription() << endl; | ||||
|     cout << "Device Location: " << sensor.getDeviceLocation() << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   // update and print a few values every 5 seconds | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "System Voltage: " | ||||
|            << sensor->getAnalogValue(E50HX::AV_System_Voltage) | ||||
|            << " " << sensor->getAnalogValueUnits(E50HX::AV_System_Voltage) | ||||
|            << endl; | ||||
|     // update and print a few values every 5 seconds | ||||
|     while (shouldRun) { | ||||
|         cout << "System Voltage: " << sensor.getAnalogValue(E50HX::AV_System_Voltage) << " " | ||||
|              << sensor.getAnalogValueUnits(E50HX::AV_System_Voltage) << endl; | ||||
|  | ||||
|       cout << "System Type: " | ||||
|            << sensor->getAnalogValue(E50HX::AV_System_Type) | ||||
|            << endl; | ||||
|         cout << "System Type: " << sensor.getAnalogValue(E50HX::AV_System_Type) << endl; | ||||
|  | ||||
|       cout << "Energy Consumption: " << sensor->getAnalogInput(E50HX::AI_Energy) | ||||
|            << " " << sensor->getAnalogInputUnits(E50HX::AI_Energy) | ||||
|            << endl; | ||||
|         cout << "Energy Consumption: " << sensor.getAnalogInput(E50HX::AI_Energy) << " " | ||||
|              << sensor.getAnalogInputUnits(E50HX::AI_Energy) << endl; | ||||
|  | ||||
|       cout << "Power Up Counter: " | ||||
|            << sensor->getAnalogInput(E50HX::AI_Power_Up_Count) | ||||
|            << endl; | ||||
|         cout << "Power Up Counter: " << sensor.getAnalogInput(E50HX::AI_Power_Up_Count) << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|       sleep(5); | ||||
|         cout << endl; | ||||
|         upm_delay(5); | ||||
|     } | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|     //! [Interesting] | ||||
|  | ||||
| //! [Interesting] | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,51 +22,44 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include <upm_utilities.h> | ||||
| #include <ecezo.hpp> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <upm_utilities.h> | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Instantiate a ECEZO sensor on uart 0 at 9600 baud. | ||||
|     upm::ECEZO *sensor = new upm::ECEZO(0, 9600, false); | ||||
|     upm::ECEZO sensor(0, 9600, false); | ||||
|  | ||||
|     // For I2C, assuming the device is configured for address 0x64 on | ||||
|     // I2C bus 0, you could use something like: | ||||
|     // | ||||
|     // upm::ECEZO *sensor = new upm::ECEZO(0, 0x64, true); | ||||
|     // upm::ECEZO sensor(0, 0x64, true); | ||||
|  | ||||
|     while (shouldRun) | ||||
|     { | ||||
|     while (shouldRun) { | ||||
|         // this will take about 1 second to complete | ||||
|         sensor->update(); | ||||
|         sensor.update(); | ||||
|  | ||||
|         cout << "EC " | ||||
|              << sensor->getEC() | ||||
|              << " uS/cm, TDS " | ||||
|              << sensor->getTDS() | ||||
|              << " mg/L, Salinity " | ||||
|              << sensor->getSalinity() | ||||
|              << " PSS-78, SG " | ||||
|              << sensor->getSG() | ||||
|              << endl; | ||||
|         cout << "EC " << sensor.getEC() << " uS/cm, TDS " << sensor.getTDS() << " mg/L, Salinity " | ||||
|              << sensor.getSalinity() << " PSS-78, SG " << sensor.getSG() << endl; | ||||
|  | ||||
|         upm_delay(5); | ||||
|     } | ||||
| @@ -75,7 +68,5 @@ int main() | ||||
|  | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,14 +22,13 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "ecs1030.hpp" | ||||
|  | ||||
| int is_running = 0; | ||||
| upm::ECS1030 *sensor = NULL; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| @@ -42,20 +41,20 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     sensor = new upm::ECS1030(0); | ||||
|     upm::ECS1030 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     while (!is_running) { | ||||
|         std::cout << "I = " << sensor->getCurrency_A () << ", Power = " << sensor->getPower_A () << std::endl; | ||||
|         std::cout << "I = " << sensor->getCurrency_B () << ", Power = " << sensor->getPower_B () << std::endl; | ||||
|         std::cout << "I = " << sensor.getCurrency_A() << ", Power = " << sensor.getPower_A() | ||||
|                   << std::endl; | ||||
|         std::cout << "I = " << sensor.getCurrency_B() << ", Power = " << sensor.getPower_B() | ||||
|                   << std::endl; | ||||
|     } | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,57 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "ehr.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a  Ear-clip Heart Rate sensor on digital pin D2 | ||||
|   upm::EHR* heart = new upm::EHR(2); | ||||
|    | ||||
|   // set the beat counter to 0, init the clock and start counting beats | ||||
|   heart->clearBeatCounter(); | ||||
|   heart->initClock(); | ||||
|   heart->startBeatCounter(); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a  Ear-clip Heart Rate sensor on digital pin D2 | ||||
|     upm::EHR heart(2); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // we grab these just for display purposes in this example | ||||
|       uint32_t millis = heart->getMillis(); | ||||
|       uint32_t beats = heart->beatCounter(); | ||||
|     // set the beat counter to 0, init the clock and start counting beats | ||||
|     heart.clearBeatCounter(); | ||||
|     heart.initClock(); | ||||
|     heart.startBeatCounter(); | ||||
|  | ||||
|       // heartRate() requires that at least 5 seconds pass before | ||||
|       // returning anything other than 0 | ||||
|       int hr = heart->heartRate(); | ||||
|     while (shouldRun) { | ||||
|         // we grab these just for display purposes in this example | ||||
|         uint32_t millis = heart.getMillis(); | ||||
|         uint32_t beats = heart.beatCounter(); | ||||
|  | ||||
|       // output milliseconds passed, beat count, and computed heart rate | ||||
|       cout << "Millis: " << millis << " Beats: " << beats; | ||||
|       cout << " Heart Rate: " << hr << endl; | ||||
|         // heartRate() requires that at least 5 seconds pass before | ||||
|         // returning anything other than 0 | ||||
|         int hr = heart.heartRate(); | ||||
|  | ||||
|       sleep(1); | ||||
|         // output milliseconds passed, beat count, and computed heart rate | ||||
|         cout << "Millis: " << millis << " Beats: " << beats; | ||||
|         cout << " Heart Rate: " << hr << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|   heart->stopBeatCounter(); | ||||
| //! [Interesting] | ||||
|     heart.stopBeatCounter(); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete heart; | ||||
|   return 0; | ||||
| } | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,46 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "eldriver.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the  El Driver Module | ||||
|   // Instantiate a  El Driver on digital pin D2 | ||||
|   upm::ElDriver* eldriver = new upm::ElDriver(2); | ||||
|     //! [Interesting] | ||||
|     // This was tested with the El Driver Module | ||||
|     // Instantiate an El Driver on digital pin D2 | ||||
|     upm::ElDriver eldriver(2); | ||||
|  | ||||
|   bool lightState = true; | ||||
|     bool lightState = true; | ||||
|  | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if (lightState) | ||||
| 		eldriver->on(); | ||||
| 	else | ||||
| 		eldriver->off(); | ||||
| 	lightState = !lightState; | ||||
| 	sleep(1); | ||||
|   } | ||||
|     while (shouldRun) { | ||||
|         if (lightState) | ||||
|             eldriver.on(); | ||||
|         else | ||||
|             eldriver.off(); | ||||
|         lightState = !lightState; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   eldriver->off(); | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     eldriver.off(); | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete eldriver; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,58 +22,60 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <time.h> | ||||
| #include <signal.h> | ||||
| #include <sys/time.h> | ||||
| #include <time.h> | ||||
|  | ||||
| #include "electromagnet.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| float get_time() | ||||
| float | ||||
| get_time() | ||||
| { | ||||
| 	return ((float)(clock()))/CLOCKS_PER_SEC; | ||||
|     return ((float) (clock())) / CLOCKS_PER_SEC; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the  Electromagnetic Module | ||||
|   // Instantiate a  Electromagnet on digital pin D2 | ||||
|   upm::Electromagnet* magnet = new upm::Electromagnet(2); | ||||
|   cout << "Starting up magnet...." << endl; | ||||
|   magnet->off(); | ||||
|     //! [Interesting] | ||||
|     // The was tested with the  Electromagnetic Module | ||||
|     // Instantiate a  Electromagnet on digital pin D2 | ||||
|     upm::Electromagnet magnet(2); | ||||
|     cout << "Starting up magnet...." << endl; | ||||
|     magnet.off(); | ||||
|  | ||||
|   bool magnetState = false; | ||||
|   float time_passed = get_time(); | ||||
|     bool magnetState = false; | ||||
|     float time_passed = get_time(); | ||||
|  | ||||
|   // Turn magnet on and off every 5 seconds | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if ((get_time() - time_passed) > 5.0) | ||||
| 	{ | ||||
| 		magnetState = !magnetState; | ||||
| 		if (magnetState) | ||||
| 			magnet->on(); | ||||
| 		else | ||||
| 			magnet->off(); | ||||
| 		cout << "Turning magnet " << ((magnetState) ? "on" : "off") << endl; | ||||
| 		time_passed = get_time(); | ||||
| 	} | ||||
|   } | ||||
|     // Turn magnet on and off every 5 seconds | ||||
|     while (shouldRun) { | ||||
|         if ((get_time() - time_passed) > 5.0) { | ||||
|             magnetState = !magnetState; | ||||
|             if (magnetState) | ||||
|                 magnet.on(); | ||||
|             else | ||||
|                 magnet.off(); | ||||
|             cout << "Turning magnet " << ((magnetState) ? "on" : "off") << endl; | ||||
|             time_passed = get_time(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   magnet->off(); | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     magnet.off(); | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete magnet; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -21,40 +21,41 @@ | ||||
| * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "emg.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the EMG Muscle Signal Reader Sensor Module | ||||
|   // Instantiate a EMG on analog pin A0 | ||||
|   upm::EMG *emg = new upm::EMG(0); | ||||
|   cout << "Calibrating...." << endl; | ||||
|   emg->calibrate(); | ||||
|    | ||||
|   while (shouldRun) | ||||
|   { | ||||
|     cout << emg->value() << endl; | ||||
|     usleep(100000); | ||||
|   } | ||||
|     //! [Interesting] | ||||
|     // The was tested with the EMG Muscle Signal Reader Sensor Module | ||||
|     // Instantiate a EMG on analog pin A0 | ||||
|     upm::EMG emg(0); | ||||
|     cout << "Calibrating...." << endl; | ||||
|     emg.calibrate(); | ||||
|  | ||||
| //! [Interesting] | ||||
|   cout << "Exiting" << endl; | ||||
|   delete emg; | ||||
|   return 0; | ||||
|     while (shouldRun) { | ||||
|         cout << emg.value() << endl; | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
|  | ||||
|     //! [Interesting] | ||||
|     cout << "Exiting" << endl; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,10 +22,11 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "enc03r.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| @@ -34,47 +35,43 @@ bool shouldRun = true; | ||||
| // analog voltage, usually 3.3 or 5.0 | ||||
| #define CALIBRATION_SAMPLES 1000 | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Instantiate a ENC03R on analog pin A0 | ||||
|     upm::ENC03R *gyro = new upm::ENC03R(0); | ||||
|     upm::ENC03R gyro(0); | ||||
|  | ||||
|     // The first thing we need to do is calibrate the sensor. | ||||
|     cout << "Please place the sensor in a stable location, and do not" << endl; | ||||
|     cout << "move it while calibration takes place." << endl; | ||||
|     cout << "This may take a couple of minutes." << endl; | ||||
|  | ||||
|     gyro->calibrate(CALIBRATION_SAMPLES); | ||||
|     cout << "Calibration complete.  Reference value: " | ||||
|          << gyro->calibrationValue() << endl; | ||||
|     gyro.calibrate(CALIBRATION_SAMPLES); | ||||
|     cout << "Calibration complete.  Reference value: " << gyro.calibrationValue() << endl; | ||||
|  | ||||
|     // Read the input and print both the raw value and the angular velocity, | ||||
|     // waiting 0.1 seconds between readings | ||||
|     while (shouldRun) | ||||
|     { | ||||
|         gyro->update(); | ||||
|     while (shouldRun) { | ||||
|         gyro.update(); | ||||
|  | ||||
|         cout << "Angular velocity: " | ||||
|              << gyro->angularVelocity() | ||||
|              << " deg/s" | ||||
|              << endl; | ||||
|         cout << "Angular velocity: " << gyro.angularVelocity() << " deg/s" << endl; | ||||
|  | ||||
|         usleep(100000); | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     delete gyro; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,46 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "flex.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with a Spectra Symbol flex sensor. | ||||
|   // We attached a 22K resistor to a breadboard, | ||||
|   // with 1 end attached to GND and the other connected to | ||||
|   // both the flex sensor and A0. | ||||
|   // The flex sensor was connected on 1 pin to the 22K resistor and A0 | ||||
|   // and on the other pin to 5V. | ||||
|     //! [Interesting] | ||||
|     // The was tested with a Spectra Symbol flex sensor. | ||||
|     // We attached a 22K resistor to a breadboard, | ||||
|     // with 1 end attached to GND and the other connected to | ||||
|     // both the flex sensor and A0. | ||||
|     // The flex sensor was connected on 1 pin to the 22K resistor and A0 | ||||
|     // and on the other pin to 5V. | ||||
|  | ||||
|   // Instantiate a Flex sensor on analog pin A0 | ||||
|   upm::Flex *flex = new upm::Flex(0); | ||||
|    | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "Flex value: " << flex->value() << endl;       | ||||
|       sleep(1); | ||||
|     // Instantiate a Flex sensor on analog pin A0 | ||||
|     upm::Flex flex(0); | ||||
|  | ||||
|     while (shouldRun) { | ||||
|         cout << "Flex value: " << flex.value() << endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete flex; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,16 +22,16 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq2.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq2.hpp" | ||||
|  | ||||
| int is_running = 0; | ||||
| uint16_t buffer [128]; | ||||
| upm::MQ2 *sensor = NULL; | ||||
| uint16_t buffer[128]; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| @@ -44,26 +44,26 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // Attach gas sensor to A0 | ||||
|     sensor = new upm::MQ2(0); | ||||
|     upm::MQ2 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver   = 2; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 milliseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of the averages using a resolution of 5 | ||||
|     while (!is_running) { | ||||
|         int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|             sensor->printGraph(&ctx, 5); | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
| @@ -72,8 +72,6 @@ main(int argc, char **argv) | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,16 +22,16 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq3.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq3.hpp" | ||||
|  | ||||
| int is_running = 0; | ||||
| uint16_t buffer [128]; | ||||
| upm::MQ3 *sensor = NULL; | ||||
| uint16_t buffer[128]; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| @@ -44,26 +44,26 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // Attach gas sensor to A0 | ||||
|     sensor = new upm::MQ3(0); | ||||
|     upm::MQ3 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver   = 2; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 milliseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of the averages using a resolution of 5 | ||||
|     while (!is_running) { | ||||
|         int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|             sensor->printGraph(&ctx, 5); | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
| @@ -72,8 +72,6 @@ main(int argc, char **argv) | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,12 +22,12 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq4.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq4.hpp" | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| @@ -36,46 +36,43 @@ using namespace std; | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT)  | ||||
|     { | ||||
|       shouldRun = false; | ||||
|     if (signo == SIGINT) { | ||||
|         shouldRun = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| //! [Interesting] | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   // Attach gas sensor to Analog A0 | ||||
|   upm::MQ4 *sensor = new upm::MQ4(0); | ||||
|   signal(SIGINT, sig_handler); | ||||
|    | ||||
|   uint16_t buffer [128]; | ||||
|     // Attach gas sensor to Analog A0 | ||||
|     upm::MQ4 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|   thresholdContext ctx; | ||||
|   ctx.averageReading = 0; | ||||
|   ctx.runningAverage = 0; | ||||
|   ctx.averagedOver   = 2; | ||||
|    | ||||
|   // Infinite loop, ends when script is cancelled | ||||
|   // Repeatedly, take a sample every 2 microseconds; | ||||
|   // find the average of 128 samples; and | ||||
|   // print a running graph of asteriskss as averages | ||||
|   while (shouldRun)  | ||||
|     { | ||||
|       int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|       if (len) { | ||||
|         int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|         sensor->printGraph(&ctx, 5); | ||||
|         if (thresh) { | ||||
|           // do something .... | ||||
|     uint16_t buffer[128]; | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 microseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of asteriskss as averages | ||||
|     while (shouldRun) { | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|    | ||||
|   cout << "Exiting" << endl; | ||||
|    | ||||
|   delete sensor; | ||||
|    | ||||
|   return 0; | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,16 +22,16 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq5.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq5.hpp" | ||||
|  | ||||
| int is_running = 0; | ||||
| uint16_t buffer [128]; | ||||
| upm::MQ5 *sensor = NULL; | ||||
| uint16_t buffer[128]; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| @@ -44,21 +44,21 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     sensor = new upm::MQ5(0); | ||||
|     upm::MQ5 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver   = 2; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     while (!is_running) { | ||||
|         int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|             sensor->printGraph(&ctx, 7); | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 7); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
| @@ -67,8 +67,6 @@ main(int argc, char **argv) | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,12 +22,12 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq6.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq6.hpp" | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| @@ -36,46 +36,43 @@ using namespace std; | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT)  | ||||
|     { | ||||
|       shouldRun = false; | ||||
|     if (signo == SIGINT) { | ||||
|         shouldRun = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| //! [Interesting] | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   // Attach gas sensor to Analog A0 | ||||
|   upm::MQ6 *sensor = new upm::MQ6(0); | ||||
|   signal(SIGINT, sig_handler); | ||||
|    | ||||
|   uint16_t buffer [128]; | ||||
|     // Attach gas sensor to Analog A0 | ||||
|     upm::MQ6 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|   thresholdContext ctx; | ||||
|   ctx.averageReading = 0; | ||||
|   ctx.runningAverage = 0; | ||||
|   ctx.averagedOver   = 2; | ||||
|    | ||||
|   // Infinite loop, ends when script is cancelled | ||||
|   // Repeatedly, take a sample every 2 microseconds; | ||||
|   // find the average of 128 samples; and | ||||
|   // print a running graph of asteriskss as averages | ||||
|   while (shouldRun)  | ||||
|     { | ||||
|       int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|       if (len) { | ||||
|         int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|         sensor->printGraph(&ctx, 5); | ||||
|         if (thresh) { | ||||
|           // do something .... | ||||
|     uint16_t buffer[128]; | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 microseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of asteriskss as averages | ||||
|     while (shouldRun) { | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|    | ||||
|   cout << "Exiting" << endl; | ||||
|    | ||||
|   delete sensor; | ||||
|    | ||||
|   return 0; | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,12 +22,12 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq7.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq7.hpp" | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| @@ -36,46 +36,43 @@ using namespace std; | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT)  | ||||
|     { | ||||
|       shouldRun = false; | ||||
|     if (signo == SIGINT) { | ||||
|         shouldRun = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| //! [Interesting] | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   // Attach gas sensor to Analog A0 | ||||
|   upm::MQ7 *sensor = new upm::MQ7(0); | ||||
|   signal(SIGINT, sig_handler); | ||||
|    | ||||
|   uint16_t buffer [128]; | ||||
|     // Attach gas sensor to Analog A0 | ||||
|     upm::MQ7 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|   thresholdContext ctx; | ||||
|   ctx.averageReading = 0; | ||||
|   ctx.runningAverage = 0; | ||||
|   ctx.averagedOver   = 2; | ||||
|    | ||||
|   // Infinite loop, ends when script is cancelled | ||||
|   // Repeatedly, take a sample every 2 microseconds; | ||||
|   // find the average of 128 samples; and | ||||
|   // print a running graph of asteriskss as averages | ||||
|   while (shouldRun)  | ||||
|     { | ||||
|       int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|       if (len) { | ||||
|         int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|         sensor->printGraph(&ctx, 5); | ||||
|         if (thresh) { | ||||
|           // do something .... | ||||
|     uint16_t buffer[128]; | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 microseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of asteriskss as averages | ||||
|     while (shouldRun) { | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|    | ||||
|   cout << "Exiting" << endl; | ||||
|    | ||||
|   delete sensor; | ||||
|    | ||||
|   return 0; | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,12 +22,12 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq8.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq8.hpp" | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| @@ -36,46 +36,43 @@ using namespace std; | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT)  | ||||
|     { | ||||
|       shouldRun = false; | ||||
|     if (signo == SIGINT) { | ||||
|         shouldRun = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| //! [Interesting] | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   // Attach gas sensor to Analog A0 | ||||
|   upm::MQ8 *sensor = new upm::MQ8(0); | ||||
|   signal(SIGINT, sig_handler); | ||||
|    | ||||
|   uint16_t buffer [128]; | ||||
|     // Attach gas sensor to Analog A0 | ||||
|     upm::MQ8 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|   thresholdContext ctx; | ||||
|   ctx.averageReading = 0; | ||||
|   ctx.runningAverage = 0; | ||||
|   ctx.averagedOver   = 2; | ||||
|    | ||||
|   // Infinite loop, ends when script is cancelled | ||||
|   // Repeatedly, take a sample every 2 microseconds; | ||||
|   // find the average of 128 samples; and | ||||
|   // print a running graph of asteriskss as averages | ||||
|   while (shouldRun)  | ||||
|     { | ||||
|       int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|       if (len) { | ||||
|         int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|         sensor->printGraph(&ctx, 5); | ||||
|         if (thresh) { | ||||
|           // do something .... | ||||
|     uint16_t buffer[128]; | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     // Infinite loop, ends when script is cancelled | ||||
|     // Repeatedly, take a sample every 2 microseconds; | ||||
|     // find the average of 128 samples; and | ||||
|     // print a running graph of asteriskss as averages | ||||
|     while (shouldRun) { | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|    | ||||
|   cout << "Exiting" << endl; | ||||
|    | ||||
|   delete sensor; | ||||
|    | ||||
|   return 0; | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,16 +22,16 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "mq9.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gas.hpp" | ||||
| #include "mq9.hpp" | ||||
|  | ||||
| int is_running = 0; | ||||
| uint16_t buffer [128]; | ||||
| upm::MQ9 *sensor = NULL; | ||||
| uint16_t buffer[128]; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| @@ -44,21 +44,21 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     sensor = new upm::MQ9(0); | ||||
|     upm::MQ9 sensor(0); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     thresholdContext ctx; | ||||
|     ctx.averageReading = 0; | ||||
|     ctx.runningAverage = 0; | ||||
|     ctx.averagedOver   = 2; | ||||
|     ctx.averagedOver = 2; | ||||
|  | ||||
|     while (!is_running) { | ||||
|         int len = sensor->getSampledWindow (2, 128, buffer); | ||||
|         int len = sensor.getSampledWindow(2, 128, buffer); | ||||
|         if (len) { | ||||
|             int thresh = sensor->findThreshold (&ctx, 30, buffer, len); | ||||
|             sensor->printGraph(&ctx, 5); | ||||
|             int thresh = sensor.findThreshold(&ctx, 30, buffer, len); | ||||
|             sensor.printGraph(&ctx, 5); | ||||
|             if (thresh) { | ||||
|                 // do something .... | ||||
|             } | ||||
| @@ -67,8 +67,6 @@ main(int argc, char **argv) | ||||
|  | ||||
|     std::cout << "exiting application" << std::endl; | ||||
|  | ||||
|     delete sensor; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,10 +22,13 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "tp401.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| @@ -34,37 +37,41 @@ using namespace std; | ||||
| std::string | ||||
| airQuality(uint16_t value) | ||||
| { | ||||
|     if(value < 50) return "Fresh Air"; | ||||
|     if(value < 200) return "Normal Indoor Air"; | ||||
|     if(value < 400) return "Low Pollution"; | ||||
|     if(value < 600) return "High Pollution - Action Recommended"; | ||||
|     if (value < 50) | ||||
|         return "Fresh Air"; | ||||
|     if (value < 200) | ||||
|         return "Normal Indoor Air"; | ||||
|     if (value < 400) | ||||
|         return "Low Pollution"; | ||||
|     if (value < 600) | ||||
|         return "High Pollution - Action Recommended"; | ||||
|     return "Very High Pollution - Take Action Immediately"; | ||||
| } | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|     upm::TP401* airSensor = new upm::TP401(0); // Instantiate new grove air quality sensor on analog pin A0 | ||||
|     upm::TP401 airSensor(0); | ||||
|  | ||||
|     cout << airSensor->name() << endl; | ||||
|     cout << airSensor.name() << endl; | ||||
|  | ||||
|     fprintf(stdout, "Heating sensor for 3 minutes...\n"); | ||||
|     // wait 3 minutes for sensor to warm up | ||||
|     for(int i = 0; i < 3; i++) { | ||||
|         if(i) { | ||||
|     for (int i = 0; i < 3; i++) { | ||||
|         if (i) { | ||||
|             fprintf(stdout, "Please wait, %d minute(s) passed..\n", i); | ||||
|         } | ||||
|         sleep(60); | ||||
|         upm_delay(60); | ||||
|     } | ||||
|     fprintf(stdout, "Sensor ready!\n"); | ||||
|  | ||||
|     while(true) { | ||||
|         uint16_t value = airSensor->getSample(); // Read raw value | ||||
|         float ppm = airSensor->getPPM();    // Read CO ppm (can vary slightly from previous read) | ||||
|     while (true) { | ||||
|         uint16_t value = airSensor.getSample(); // Read raw value | ||||
|         float ppm = airSensor.getPPM(); // Read CO ppm (can vary slightly from previous read) | ||||
|         fprintf(stdout, "raw: %4d ppm: %5.2f   %s\n", value, ppm, airQuality(value).c_str()); | ||||
|         usleep(2500000);    // Sleep for 2.5s | ||||
|         upm_delay_us(2500000); // Sleep for 2.5s | ||||
|     } | ||||
|  | ||||
|     delete airSensor; | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
| @@ -22,52 +22,52 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "gp2y0a.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| // analog voltage, usually 3.3 or 5.0 | ||||
| #define GP2Y0A_AREF   5.0 | ||||
| #define GP2Y0A_AREF 5.0 | ||||
| #define SAMPLES_PER_QUERY 20 | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Note, for the Grove 80cm version of this sensor, due to the way | ||||
|   // it is wired, you need to plug this into the A0 port, where it | ||||
|   // will use the available A1 pin for data. | ||||
|     //! [Interesting] | ||||
|     // Note, for the Grove 80cm version of this sensor, due to the way | ||||
|     // it is wired, you need to plug this into the A0 port, where it | ||||
|     // will use the available A1 pin for data. | ||||
|  | ||||
|   // Instantiate a GP2Y0A on analog pin A1 | ||||
|   upm::GP2Y0A *volts = new upm::GP2Y0A(1); | ||||
|    | ||||
|   // The higher the voltage (closer to AREF) the closer the object is.  NOTE: | ||||
|   // the measured voltage will probably not exceed 3.3 volts. | ||||
|   // Every second, print the averaged voltage value (averaged over 20 samples). | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       cout << "AREF: " << GP2Y0A_AREF  | ||||
|            << ", Voltage value (higher means closer): "  | ||||
|            << volts->value(GP2Y0A_AREF, SAMPLES_PER_QUERY) << endl; | ||||
|        | ||||
|       sleep(1); | ||||
|     // Instantiate a GP2Y0A on analog pin A1 | ||||
|     upm::GP2Y0A volts(1); | ||||
|  | ||||
|     // The higher the voltage (closer to AREF) the closer the object is.  NOTE: | ||||
|     // the measured voltage will probably not exceed 3.3 volts. | ||||
|     // Every second, print the averaged voltage value (averaged over 20 samples). | ||||
|     while (shouldRun) { | ||||
|         cout << "AREF: " << GP2Y0A_AREF << ", Voltage value (higher means closer): " | ||||
|              << volts.value(GP2Y0A_AREF, SAMPLES_PER_QUERY) << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete volts; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,90 +22,81 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "gprs.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| void printUsage(char *progname) | ||||
| void | ||||
| printUsage(char* progname) | ||||
| { | ||||
|   cout << "Usage: " << progname << " [AT command]" << endl; | ||||
|   cout << endl; | ||||
|     cout << "Usage: " << progname << " [AT command]" << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   cout << "If an argument is supplied on the command line, that argument is" | ||||
|        << endl; | ||||
|   cout << "sent to the module and the response is printed out." << endl; | ||||
|   cout << endl; | ||||
|   cout << "If no argument is used, then the manufacturer and the current"  | ||||
|        << endl; | ||||
|   cout << "saved profiles are queried and the results printed out." << endl; | ||||
|   cout << endl; | ||||
|   cout << endl; | ||||
|     cout << "If an argument is supplied on the command line, that argument is" << endl; | ||||
|     cout << "sent to the module and the response is printed out." << endl; | ||||
|     cout << endl; | ||||
|     cout << "If no argument is used, then the manufacturer and the current" << endl; | ||||
|     cout << "saved profiles are queried and the results printed out." << endl; | ||||
|     cout << endl; | ||||
|     cout << endl; | ||||
| } | ||||
|  | ||||
| // simple helper function to send a command and wait for a response | ||||
| void sendCommand(upm::GPRS* sensor, string cmd) | ||||
| void | ||||
| sendCommand(upm::GPRS& sensor, string cmd) | ||||
| { | ||||
|   // commands need to be terminated with a carriage return | ||||
|   cmd += "\r"; | ||||
|     // commands need to be terminated with a carriage return | ||||
|     cmd += "\r"; | ||||
|  | ||||
|   sensor->writeDataStr(cmd); | ||||
|    | ||||
|   // wait up to 1 second | ||||
|   if (sensor->dataAvailable(1000)) | ||||
|     { | ||||
|       cout << "Returned: " << sensor->readDataStr(1024) << endl; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       cerr << "Timed out waiting for response" << endl; | ||||
|     sensor.writeDataStr(cmd); | ||||
|  | ||||
|     // wait up to 1 second | ||||
|     if (sensor.dataAvailable(1000)) { | ||||
|         cout << "Returned: " << sensor.readDataStr(1024) << endl; | ||||
|     } else { | ||||
|         cerr << "Timed out waiting for response" << endl; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a GPRS Module on UART 0 | ||||
|   upm::GPRS* sensor = new upm::GPRS(0); | ||||
|     // Instantiate a GPRS Module on UART 0 | ||||
|     upm::GPRS sensor(0); | ||||
|  | ||||
|   // Set the baud rate, 19200 baud is the default. | ||||
|   if (sensor->setBaudRate(19200) != mraa::SUCCESS) | ||||
|     { | ||||
|       cerr << "Failed to set tty baud rate" << endl; | ||||
|       return 1; | ||||
|     // Set the baud rate, 19200 baud is the default. | ||||
|     if (sensor.setBaudRate(19200) != mraa::SUCCESS) { | ||||
|         cerr << "Failed to set tty baud rate" << endl; | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|   printUsage(argv[0]); | ||||
|     printUsage(argv[0]); | ||||
|  | ||||
|   if (argc > 1) | ||||
|     { | ||||
|       cout << "Sending command line argument (" << argv[1] << ")..." << endl; | ||||
|       sendCommand(sensor, argv[1]); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       // query the module manufacturer | ||||
|       cout << "Querying module manufacturer (AT+CGMI)..." << endl; | ||||
|       sendCommand(sensor, "AT+CGMI"); | ||||
|     if (argc > 1) { | ||||
|         cout << "Sending command line argument (" << argv[1] << ")..." << endl; | ||||
|         sendCommand(sensor, argv[1]); | ||||
|     } else { | ||||
|         // query the module manufacturer | ||||
|         cout << "Querying module manufacturer (AT+CGMI)..." << endl; | ||||
|         sendCommand(sensor, "AT+CGMI"); | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|  | ||||
|       // query the saved profiles | ||||
|       cout << "Querying the saved profiles (AT&V)..." << endl; | ||||
|       sendCommand(sensor, "AT&V"); | ||||
|         // query the saved profiles | ||||
|         cout << "Querying the saved profiles (AT&V)..." << endl; | ||||
|         sendCommand(sensor, "AT&V"); | ||||
|  | ||||
|       // A comprehensive list is available from the datasheet at: | ||||
|       // http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf | ||||
|         // A comprehensive list is available from the datasheet at: | ||||
|         // http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
| } | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,28 +22,29 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "grove.hpp" | ||||
| #include <string> | ||||
|  | ||||
| #include "grovebutton.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // This example uses GPIO 0 | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Create the button object using GPIO pin 0 | ||||
|     upm::GroveButton* button = new upm::GroveButton(0); | ||||
|     upm::GroveButton button(0); | ||||
|  | ||||
|     // Read the input and print, waiting one second between readings | ||||
|     while( 1 ) { | ||||
|         std::cout << button->name() << " value is " << button->value() << std::endl; | ||||
|         sleep(1); | ||||
|     while (1) { | ||||
|         std::cout << button.name() << " value is " << button.value() << std::endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the button object | ||||
|     delete button; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,47 +22,47 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include "grove.hpp" | ||||
|  | ||||
| #include "groveled.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a grove LED on D2.  Here we are controlling a Grove | ||||
|   // Multi-color flash LED.  We just just need to turn it on - it will | ||||
|   // then cycle through various colors (red, green, blue, purple) on it's | ||||
|   // own until turned off. | ||||
|   upm::GroveLed* led = new upm::GroveLed(2); | ||||
|     // Instantiate a grove LED on D2.  Here we are controlling a Grove | ||||
|     // Multi-color flash LED.  We just just need to turn it on - it will | ||||
|     // then cycle through various colors (red, green, blue, purple) on it's | ||||
|     // own until turned off. | ||||
|     upm::GroveLed led(2); | ||||
|  | ||||
|   // start the light show | ||||
|   led->on(); | ||||
|     // start the light show | ||||
|     led.on(); | ||||
|  | ||||
|   // just sleep until interrupted | ||||
|   while (shouldRun) | ||||
|     sleep(1); | ||||
|    | ||||
| //! [Interesting] | ||||
|     // just upm_delay until interrupted | ||||
|     while (shouldRun) | ||||
|         upm_delay(1); | ||||
|  | ||||
|   led->off(); | ||||
|   cout << "Exiting..." << endl; | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete led; | ||||
|    | ||||
|   return 0; | ||||
|     led.off(); | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -23,33 +23,34 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "grove.hpp" | ||||
| #include <string> | ||||
|  | ||||
| #include "groveled.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Create the Grove LED object using GPIO pin 2 | ||||
|     upm::GroveLed* led = new upm::GroveLed(2); | ||||
|     upm::GroveLed led(2); | ||||
|  | ||||
|     // Print the name | ||||
|     std::cout << led->name() << std::endl; | ||||
|     std::cout << led.name() << std::endl; | ||||
|  | ||||
|     // Turn the LED on and off 10 times, pausing one second | ||||
|     // between transitions | ||||
|     for (int i=0; i < 10; i++) { | ||||
|         led->on(); | ||||
|         sleep(1); | ||||
|         led->off(); | ||||
|         sleep(1); | ||||
|     for (int i = 0; i < 10; i++) { | ||||
|         led.on(); | ||||
|         upm_delay(1); | ||||
|         led.off(); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the Grove LED object | ||||
|     delete led; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -23,27 +23,28 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "grove.hpp" | ||||
| #include <string> | ||||
|  | ||||
| #include "grovelight.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     // Create the light sensor object using AIO pin 0 | ||||
|     upm::GroveLight* light = new upm::GroveLight(0); | ||||
|     upm::GroveLight light(0); | ||||
|  | ||||
|     // Read the input and print both the raw value and a rough lux value, | ||||
|     // waiting one second between readings | ||||
|     while( 1 ) { | ||||
|         std::cout << light->name() << " raw value is " << light->raw_value() << | ||||
|             ", which is roughly " << light->value() << " lux" << std::endl; | ||||
|         sleep(1); | ||||
|     while (1) { | ||||
|         std::cout << light.name() << " raw value is " << light.raw_value() << ", which is roughly " | ||||
|                   << light.value() << " lux" << std::endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the light sensor object | ||||
|     delete light; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,37 +22,38 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "grove.hpp" | ||||
| #include <string> | ||||
|  | ||||
| #include "groverelay.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     // This example uses GPIO 0 | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Create the relay switch object using GPIO pin 0 | ||||
|     upm::GroveRelay* relay = new upm::GroveRelay(0); | ||||
|     upm::GroveRelay relay(0); | ||||
|  | ||||
|     // Close and then open the relay switch 3 times, | ||||
|     // waiting one second each time.  The LED on the relay switch | ||||
|     // will light up when the switch is on (closed). | ||||
|     // The switch will also make a noise between transitions. | ||||
|     for ( int i = 0; i < 3; i++ ) { | ||||
|         relay->on(); | ||||
|         if ( relay->isOn() )  | ||||
|             std::cout << relay->name() << " is on" << std::endl; | ||||
|         sleep(1); | ||||
|         relay->off(); | ||||
|         if ( relay->isOff() )  | ||||
|             std::cout << relay->name() << " is off" << std::endl; | ||||
|         sleep(1); | ||||
|     for (int i = 0; i < 3; i++) { | ||||
|         relay.on(); | ||||
|         if (relay.isOn()) | ||||
|             std::cout << relay.name() << " is on" << std::endl; | ||||
|         upm_delay(1); | ||||
|         relay.off(); | ||||
|         if (relay.isOff()) | ||||
|             std::cout << relay.name() << " is off" << std::endl; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the relay switch object | ||||
|     delete relay; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,36 +22,46 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| #include "grove.hpp" | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "groverotary.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     // Instantiate a rotary sensor on analog pin A0 | ||||
|     upm::GroveRotary* knob = new upm::GroveRotary(0); | ||||
|     upm::GroveRotary knob(0); | ||||
|  | ||||
|     // Print sensor name to confirm it initialized properly | ||||
|     cout << knob->name() << endl; | ||||
|     cout << knob.name() << endl; | ||||
|  | ||||
|     while(true) { | ||||
|         float abs_value = knob->abs_value(); // Absolute raw value | ||||
|         float abs_deg = knob->abs_deg();     // Absolute degrees | ||||
|         float abs_rad = knob->abs_rad();     // Absolute radians | ||||
|         float rel_value = knob->rel_value(); // Relative raw value | ||||
|         float rel_deg = knob->rel_deg();     // Relative degrees | ||||
|         float rel_rad = knob->rel_rad();     // Relative radians | ||||
|     while (true) { | ||||
|         float abs_value = knob.abs_value(); // Absolute raw value | ||||
|         float abs_deg = knob.abs_deg();     // Absolute degrees | ||||
|         float abs_rad = knob.abs_rad();     // Absolute radians | ||||
|         float rel_value = knob.rel_value(); // Relative raw value | ||||
|         float rel_deg = knob.rel_deg();     // Relative degrees | ||||
|         float rel_rad = knob.rel_rad();     // Relative radians | ||||
|  | ||||
|         fprintf(stdout, "Absolute: %4d raw %5.2f deg = %3.2f rad Relative: %4d raw %5.2f deg %3.2f rad\n", | ||||
|                 (int16_t)abs_value, abs_deg, abs_rad, (int16_t)rel_value, rel_deg, rel_rad); | ||||
|         fprintf(stdout, | ||||
|                 "Absolute: %4d raw %5.2f deg = %3.2f rad Relative: %4d raw %5.2f " | ||||
|                 "deg %3.2f rad\n", | ||||
|                 (int16_t) abs_value, | ||||
|                 abs_deg, | ||||
|                 abs_rad, | ||||
|                 (int16_t) rel_value, | ||||
|                 rel_deg, | ||||
|                 rel_rad); | ||||
|  | ||||
|         usleep(2500000); // Sleep for 2.5s | ||||
|         upm_delay_us(2500000); // Sleep for 2.5s | ||||
|     } | ||||
| //! [Interesting] | ||||
|     delete knob; | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,29 +22,31 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| #include "grove.hpp" | ||||
| #include <stdint.h> | ||||
| #include <stdio.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "groveslide.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
| //! [Interesting] | ||||
|     upm::GroveSlide* slide = new upm::GroveSlide(0);    // Instantiate new grove slide potentiometer on analog pin A0 | ||||
|     //! [Interesting] | ||||
|     upm::GroveSlide slide(0); | ||||
|  | ||||
|     cout << slide->name() << endl; | ||||
|     cout << slide.name() << endl; | ||||
|  | ||||
|     while(true) { | ||||
|         float adc_value = slide->raw_value();       // Read raw value | ||||
|         float volts = slide->voltage_value();    // Read voltage, board reference set at 5.0V | ||||
|         fprintf(stdout, "%4d = %.2f V\n", (uint16_t)adc_value, volts); | ||||
|     while (true) { | ||||
|         float adc_value = slide.raw_value(); // Read raw value | ||||
|         float volts = slide.voltage_value(); // Read voltage, board reference set at 5.0V | ||||
|         fprintf(stdout, "%4d = %.2f V\n", (uint16_t) adc_value, volts); | ||||
|  | ||||
|         usleep(2500000);    // Sleep for 2.5s | ||||
|         upm_delay_us(2500000); // Sleep for 2.5s | ||||
|     } | ||||
| //! [Interesting] | ||||
|     delete slide; | ||||
|     //! [Interesting] | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -23,33 +23,33 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <iomanip> | ||||
| #include "grove.hpp" | ||||
| #include <stdio.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "grovetemp.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     // Create the temperature sensor object using AIO pin 0 | ||||
|     upm::GroveTemp* temp = new upm::GroveTemp(0); | ||||
|     std::cout << temp->name() << std::endl; | ||||
|     upm::GroveTemp temp(0); | ||||
|     std::cout << temp.name() << std::endl; | ||||
|  | ||||
|     // Read the temperature ten times, printing both the Celsius and | ||||
|     // equivalent Fahrenheit temperature, waiting one second between readings | ||||
|     for (int i=0; i < 10; i++) { | ||||
|         int celsius = temp->value(); | ||||
|         int fahrenheit = (int) (celsius * 9.0/5.0 + 32.0); | ||||
|         printf("%d degrees Celsius, or %d degrees Fahrenheit\n", | ||||
|                 celsius, fahrenheit); | ||||
|         sleep(1); | ||||
|     for (int i = 0; i < 10; i++) { | ||||
|         int celsius = temp.value(); | ||||
|         int fahrenheit = (int) (celsius * 9.0 / 5.0 + 32.0); | ||||
|         printf("%d degrees Celsius, or %d degrees Fahrenheit\n", celsius, fahrenheit); | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|     // Delete the temperature sensor object | ||||
|     delete temp; | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,48 +22,45 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovecollision.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the Grove Collision Sensor | ||||
|   // Instantiate a Grove Collision on digital pin D2 | ||||
|   upm::GroveCollision* collision = new upm::GroveCollision(2); | ||||
|     //! [Interesting] | ||||
|     // The was tested with the Grove Collision Sensor | ||||
|     // Instantiate a Grove Collision on digital pin D2 | ||||
|     upm::GroveCollision collision(2); | ||||
|  | ||||
|   bool collisionState = false; | ||||
|   cout << "No collision" << endl; | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if (collision->isColliding() && !collisionState) | ||||
| 	{ | ||||
| 		cout << "Collision!" << endl; | ||||
| 		collisionState = true; | ||||
| 	} | ||||
| 	else if (collisionState) | ||||
| 	{ | ||||
| 		cout << "No collision" << endl; | ||||
| 		collisionState = false; | ||||
| 	} | ||||
|   } | ||||
|     bool collisionState = false; | ||||
|     cout << "No collision" << endl; | ||||
|     while (shouldRun) { | ||||
|         if (collision.isColliding() && !collisionState) { | ||||
|             cout << "Collision!" << endl; | ||||
|             collisionState = true; | ||||
|         } else if (collisionState) { | ||||
|             cout << "No collision" << endl; | ||||
|             collisionState = false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete collision; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,57 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "groveehr.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Ear-clip Heart Rate sensor on digital pin D2 | ||||
|   upm::GroveEHR* heart = new upm::GroveEHR(2); | ||||
|    | ||||
|   // set the beat counter to 0, init the clock and start counting beats | ||||
|   heart->clearBeatCounter(); | ||||
|   heart->initClock(); | ||||
|   heart->startBeatCounter(); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Ear-clip Heart Rate sensor on digital pin D2 | ||||
|     upm::GroveEHR heart(2); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // we grab these just for display purposes in this example | ||||
|       uint32_t millis = heart->getMillis(); | ||||
|       uint32_t beats = heart->beatCounter(); | ||||
|     // set the beat counter to 0, init the clock and start counting beats | ||||
|     heart.clearBeatCounter(); | ||||
|     heart.initClock(); | ||||
|     heart.startBeatCounter(); | ||||
|  | ||||
|       // heartRate() requires that at least 5 seconds pass before | ||||
|       // returning anything other than 0 | ||||
|       int hr = heart->heartRate(); | ||||
|     while (shouldRun) { | ||||
|         // we grab these just for display purposes in this example | ||||
|         uint32_t millis = heart.getMillis(); | ||||
|         uint32_t beats = heart.beatCounter(); | ||||
|  | ||||
|       // output milliseconds passed, beat count, and computed heart rate | ||||
|       cout << "Millis: " << millis << " Beats: " << beats; | ||||
|       cout << " Heart Rate: " << hr << endl; | ||||
|         // heartRate() requires that at least 5 seconds pass before | ||||
|         // returning anything other than 0 | ||||
|         int hr = heart.heartRate(); | ||||
|  | ||||
|       sleep(1); | ||||
|         // output milliseconds passed, beat count, and computed heart rate | ||||
|         cout << "Millis: " << millis << " Beats: " << beats; | ||||
|         cout << " Heart Rate: " << hr << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
|   heart->stopBeatCounter(); | ||||
| //! [Interesting] | ||||
|     heart.stopBeatCounter(); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete heart; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,46 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "groveeldriver.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the Grove El Driver Module | ||||
|   // Instantiate a Grove El Driver on digital pin D2 | ||||
|   upm::GroveElDriver* eldriver = new upm::GroveElDriver(2); | ||||
|     //! [Interesting] | ||||
|     // The was tested with the Grove El Driver Module | ||||
|     // Instantiate a Grove El Driver on digital pin D2 | ||||
|     upm::GroveElDriver eldriver(2); | ||||
|  | ||||
|   bool lightState = true; | ||||
|     bool lightState = true; | ||||
|  | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if (lightState) | ||||
| 		eldriver->on(); | ||||
| 	else | ||||
| 		eldriver->off(); | ||||
| 	lightState = !lightState; | ||||
| 	sleep(1); | ||||
|   } | ||||
|     while (shouldRun) { | ||||
|         if (lightState) | ||||
|             eldriver.on(); | ||||
|         else | ||||
|             eldriver.off(); | ||||
|         lightState = !lightState; | ||||
|         upm_delay(1); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   eldriver->off(); | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     eldriver.off(); | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete eldriver; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,58 +22,60 @@ | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <iostream> | ||||
| #include <time.h> | ||||
| #include <signal.h> | ||||
| #include <sys/time.h> | ||||
| #include <time.h> | ||||
|  | ||||
| #include "groveelectromagnet.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| float get_time() | ||||
| float | ||||
| get_time() | ||||
| { | ||||
| 	return ((float)(clock()))/CLOCKS_PER_SEC; | ||||
|     return ((float) (clock())) / CLOCKS_PER_SEC; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the Grove Electromagnetic Module | ||||
|   // Instantiate a Grove Electromagnet on digital pin D2 | ||||
|   upm::GroveElectromagnet* magnet = new upm::GroveElectromagnet(2); | ||||
|   cout << "Starting up magnet...." << endl; | ||||
|   magnet->off(); | ||||
|     //! [Interesting] | ||||
|     // The was tested with the Grove Electromagnetic Module | ||||
|     // Instantiate a Grove Electromagnet on digital pin D2 | ||||
|     upm::GroveElectromagnet magnet(2); | ||||
|     cout << "Starting up magnet...." << endl; | ||||
|     magnet.off(); | ||||
|  | ||||
|   bool magnetState = false; | ||||
|   float time_passed = get_time(); | ||||
|     bool magnetState = false; | ||||
|     float time_passed = get_time(); | ||||
|  | ||||
|   // Turn magnet on and off every 5 seconds | ||||
|   while (shouldRun) | ||||
|   { | ||||
| 	if ((get_time() - time_passed) > 5.0) | ||||
| 	{ | ||||
| 		magnetState = !magnetState; | ||||
| 		if (magnetState) | ||||
| 			magnet->on(); | ||||
| 		else | ||||
| 			magnet->off(); | ||||
| 		cout << "Turning magnet " << ((magnetState) ? "on" : "off") << endl; | ||||
| 		time_passed = get_time(); | ||||
| 	} | ||||
|   } | ||||
|     // Turn magnet on and off every 5 seconds | ||||
|     while (shouldRun) { | ||||
|         if ((get_time() - time_passed) > 5.0) { | ||||
|             magnetState = !magnetState; | ||||
|             if (magnetState) | ||||
|                 magnet.on(); | ||||
|             else | ||||
|                 magnet.off(); | ||||
|             cout << "Turning magnet " << ((magnetState) ? "on" : "off") << endl; | ||||
|             time_passed = get_time(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   magnet->off(); | ||||
|   cout << "Exiting" << endl; | ||||
|     //! [Interesting] | ||||
|     magnet.off(); | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete magnet; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -21,40 +21,41 @@ | ||||
| * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "groveemg.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the GroveEMG Muscle Signal Reader Sensor Module | ||||
|   // Instantiate a GroveEMG on analog pin A0 | ||||
|   upm::GroveEMG *emg = new upm::GroveEMG(0); | ||||
|   cout << "Calibrating...." << endl; | ||||
|   emg->calibrate(); | ||||
|    | ||||
|   while (shouldRun) | ||||
|   { | ||||
|     cout << emg->value() << endl; | ||||
|     usleep(100000); | ||||
|   } | ||||
|     //! [Interesting] | ||||
|     // The was tested with the GroveEMG Muscle Signal Reader Sensor Module | ||||
|     // Instantiate a GroveEMG on analog pin A0 | ||||
|     upm::GroveEMG emg(0); | ||||
|     cout << "Calibrating...." << endl; | ||||
|     emg.calibrate(); | ||||
|  | ||||
| //! [Interesting] | ||||
|   cout << "Exiting" << endl; | ||||
|   delete emg; | ||||
|   return 0; | ||||
|     while (shouldRun) { | ||||
|         cout << emg.value() << endl; | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
|  | ||||
|     //! [Interesting] | ||||
|     cout << "Exiting" << endl; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,90 +22,81 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "grovegprs.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| void printUsage(char *progname) | ||||
| void | ||||
| printUsage(char* progname) | ||||
| { | ||||
|   cout << "Usage: " << progname << " [AT command]" << endl; | ||||
|   cout << endl; | ||||
|     cout << "Usage: " << progname << " [AT command]" << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   cout << "If an argument is supplied on the command line, that argument is" | ||||
|        << endl; | ||||
|   cout << "sent to the module and the response is printed out." << endl; | ||||
|   cout << endl; | ||||
|   cout << "If no argument is used, then the manufacturer and the current"  | ||||
|        << endl; | ||||
|   cout << "saved profiles are queried and the results printed out." << endl; | ||||
|   cout << endl; | ||||
|   cout << endl; | ||||
|     cout << "If an argument is supplied on the command line, that argument is" << endl; | ||||
|     cout << "sent to the module and the response is printed out." << endl; | ||||
|     cout << endl; | ||||
|     cout << "If no argument is used, then the manufacturer and the current" << endl; | ||||
|     cout << "saved profiles are queried and the results printed out." << endl; | ||||
|     cout << endl; | ||||
|     cout << endl; | ||||
| } | ||||
|  | ||||
| // simple helper function to send a command and wait for a response | ||||
| void sendCommand(upm::GroveGPRS* sensor, string cmd) | ||||
| void | ||||
| sendCommand(upm::GroveGPRS& sensor, string cmd) | ||||
| { | ||||
|   // commands need to be terminated with a carriage return | ||||
|   cmd += "\r"; | ||||
|     // commands need to be terminated with a carriage return | ||||
|     cmd += "\r"; | ||||
|  | ||||
|   sensor->writeDataStr(cmd); | ||||
|    | ||||
|   // wait up to 1 second | ||||
|   if (sensor->dataAvailable(1000)) | ||||
|     { | ||||
|       cout << "Returned: " << sensor->readDataStr(1024) << endl; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       cerr << "Timed out waiting for response" << endl; | ||||
|     sensor.writeDataStr(cmd); | ||||
|  | ||||
|     // wait up to 1 second | ||||
|     if (sensor.dataAvailable(1000)) { | ||||
|         cout << "Returned: " << sensor.readDataStr(1024) << endl; | ||||
|     } else { | ||||
|         cerr << "Timed out waiting for response" << endl; | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a GroveGPRS Module on UART 0 | ||||
|   upm::GroveGPRS* sensor = new upm::GroveGPRS(0); | ||||
|     // Instantiate a GroveGPRS Module on UART 0 | ||||
|     upm::GroveGPRS sensor(0); | ||||
|  | ||||
|   // Set the baud rate, 19200 baud is the default. | ||||
|   if (sensor->setBaudRate(19200) != mraa::SUCCESS) | ||||
|     { | ||||
|       cerr << "Failed to set tty baud rate" << endl; | ||||
|       return 1; | ||||
|     // Set the baud rate, 19200 baud is the default. | ||||
|     if (sensor.setBaudRate(19200) != mraa::SUCCESS) { | ||||
|         cerr << "Failed to set tty baud rate" << endl; | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|   printUsage(argv[0]); | ||||
|     printUsage(argv[0]); | ||||
|  | ||||
|   if (argc > 1) | ||||
|     { | ||||
|       cout << "Sending command line argument (" << argv[1] << ")..." << endl; | ||||
|       sendCommand(sensor, argv[1]); | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       // query the module manufacturer | ||||
|       cout << "Querying module manufacturer (AT+CGMI)..." << endl; | ||||
|       sendCommand(sensor, "AT+CGMI"); | ||||
|     if (argc > 1) { | ||||
|         cout << "Sending command line argument (" << argv[1] << ")..." << endl; | ||||
|         sendCommand(sensor, argv[1]); | ||||
|     } else { | ||||
|         // query the module manufacturer | ||||
|         cout << "Querying module manufacturer (AT+CGMI)..." << endl; | ||||
|         sendCommand(sensor, "AT+CGMI"); | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|  | ||||
|       // query the saved profiles | ||||
|       cout << "Querying the saved profiles (AT&V)..." << endl; | ||||
|       sendCommand(sensor, "AT&V"); | ||||
|         // query the saved profiles | ||||
|         cout << "Querying the saved profiles (AT&V)..." << endl; | ||||
|         sendCommand(sensor, "AT&V"); | ||||
|  | ||||
|       // A comprehensive list is available from the datasheet at: | ||||
|       // http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf | ||||
|         // A comprehensive list is available from the datasheet at: | ||||
|         // http://www.seeedstudio.com/wiki/images/7/72/AT_Commands_v1.11.pdf | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete sensor; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,42 +22,43 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovegsr.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the GroveGSR Galvanic Skin Response Sensor module. | ||||
|     //! [Interesting] | ||||
|     // The was tested with the GroveGSR Galvanic Skin Response Sensor module. | ||||
|  | ||||
|   // Instantiate a GroveGSR on analog pin A0 | ||||
|   upm::GroveGSR *gsr = new upm::GroveGSR(0); | ||||
|   cout << "Calibrating...." << endl; | ||||
|   gsr->calibrate(); | ||||
|     // Instantiate a GroveGSR on analog pin A0 | ||||
|     upm::GroveGSR gsr(0); | ||||
|     cout << "Calibrating...." << endl; | ||||
|     gsr.calibrate(); | ||||
|  | ||||
|   while (shouldRun) | ||||
|   { | ||||
|       cout << gsr->value() << endl; | ||||
|       usleep(500000); | ||||
|   } | ||||
| //! [Interesting] | ||||
|     while (shouldRun) { | ||||
|         cout << gsr.value() << endl; | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete gsr; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,45 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovelinefinder.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Line Finder sensor on digital pin D2 | ||||
|   upm::GroveLineFinder* finder = new upm::GroveLineFinder(2); | ||||
|    | ||||
|   // check every second for the presence of white detection | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       bool val = finder->whiteDetected(); | ||||
|       if (val) | ||||
|         cout << "White detected." << endl; | ||||
|       else | ||||
|         cout << "Black detected." << endl; | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Line Finder sensor on digital pin D2 | ||||
|     upm::GroveLineFinder finder(2); | ||||
|  | ||||
|       sleep(1); | ||||
|     // check every second for the presence of white detection | ||||
|     while (shouldRun) { | ||||
|         bool val = finder.whiteDetected(); | ||||
|         if (val) | ||||
|             cout << "White detected." << endl; | ||||
|         else | ||||
|             cout << "Black detected." << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete finder; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,45 +22,44 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
|  | ||||
| #include "grovemd.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   //! [Interesting] | ||||
|   // Instantiate an I2C Grove Motor Driver on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an I2C Grove Motor Driver on I2C bus 0 | ||||
|  | ||||
|   upm::GroveMD *motors = new upm::GroveMD(GROVEMD_I2C_BUS,  | ||||
|                                           GROVEMD_DEFAULT_I2C_ADDR); | ||||
|     upm::GroveMD motors(GROVEMD_I2C_BUS, GROVEMD_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // This example demonstrates using the GroveMD to drive a stepper motor | ||||
|    | ||||
|   // configure it, for this example, we'll assume 200 steps per rev | ||||
|   motors->configStepper(200); | ||||
|     // This example demonstrates using the GroveMD to drive a stepper motor | ||||
|  | ||||
|   // set for half a rotation | ||||
|   motors->setStepperSteps(100); | ||||
|     // configure it, for this example, we'll assume 200 steps per rev | ||||
|     motors.configStepper(200); | ||||
|  | ||||
|   // let it go - clockwise rotation, 10 RPM speed | ||||
|   motors->enableStepper(upm::GroveMD::STEP_DIR_CW, 10); | ||||
|     // set for half a rotation | ||||
|     motors.setStepperSteps(100); | ||||
|  | ||||
|   sleep(3); | ||||
|     // let it go - clockwise rotation, 10 RPM speed | ||||
|     motors.enableStepper(upm::GroveMD::STEP_DIR_CW, 10); | ||||
|  | ||||
|   // Now do it backwards... | ||||
|   motors->setStepperSteps(100); | ||||
|   motors->enableStepper(upm::GroveMD::STEP_DIR_CCW, 10); | ||||
|     upm_delay(3); | ||||
|  | ||||
|   // now disable | ||||
|   motors->disableStepper(); | ||||
|     // Now do it backwards... | ||||
|     motors.setStepperSteps(100); | ||||
|     motors.enableStepper(upm::GroveMD::STEP_DIR_CCW, 10); | ||||
|  | ||||
|   //! [Interesting] | ||||
|     // now disable | ||||
|     motors.disableStepper(); | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete motors; | ||||
|   return 0; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,39 +22,38 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
|  | ||||
| #include "grovemd.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   //! [Interesting] | ||||
|   // Instantiate an I2C Grove Motor Driver on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an I2C Grove Motor Driver on I2C bus 0 | ||||
|  | ||||
|   upm::GroveMD *motors = new upm::GroveMD(GROVEMD_I2C_BUS,  | ||||
|                                           GROVEMD_DEFAULT_I2C_ADDR); | ||||
|     upm::GroveMD motors(GROVEMD_I2C_BUS, GROVEMD_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // set direction to CW and set speed to 50% | ||||
|   cout << "Spin M1 and M2 at half speed for 3 seconds" << endl; | ||||
|   motors->setMotorDirections(upm::GroveMD::DIR_CW, upm::GroveMD::DIR_CW); | ||||
|   motors->setMotorSpeeds(127, 127); | ||||
|    | ||||
|   sleep(3); | ||||
|   // counter clockwise | ||||
|   cout << "Reversing M1 and M2 for 3 seconds" << endl; | ||||
|   motors->setMotorDirections(upm::GroveMD::DIR_CCW, upm::GroveMD::DIR_CCW); | ||||
|   sleep(3); | ||||
|     // set direction to CW and set speed to 50% | ||||
|     cout << "Spin M1 and M2 at half speed for 3 seconds" << endl; | ||||
|     motors.setMotorDirections(upm::GroveMD::DIR_CW, upm::GroveMD::DIR_CW); | ||||
|     motors.setMotorSpeeds(127, 127); | ||||
|  | ||||
|   //! [Interesting] | ||||
|     upm_delay(3); | ||||
|     // counter clockwise | ||||
|     cout << "Reversing M1 and M2 for 3 seconds" << endl; | ||||
|     motors.setMotorDirections(upm::GroveMD::DIR_CCW, upm::GroveMD::DIR_CCW); | ||||
|     upm_delay(3); | ||||
|  | ||||
|   cout << "Stopping motors" << endl; | ||||
|   motors->setMotorSpeeds(0, 0); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Stopping motors" << endl; | ||||
|     motors.setMotorSpeeds(0, 0); | ||||
|  | ||||
|   delete motors; | ||||
|   return 0; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,54 +22,54 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovemoisture.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Moisture sensor on analog pin A0 | ||||
|   upm::GroveMoisture* moisture = new upm::GroveMoisture(0); | ||||
|    | ||||
|   // Values (approximate):  | ||||
|   // 0-300, sensor in air or dry soil | ||||
|   // 300-600, sensor in humid soil | ||||
|   // 600+, sensor in wet soil or submerged in water. | ||||
|   // Read the value every second and print the corresponding moisture level | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       int val = moisture->value(); | ||||
|       cout << "Moisture value: " << val << ", "; | ||||
|       if (val >= 0 && val < 300) | ||||
|         cout << "dry"; | ||||
|       else if (val >= 300 && val < 600) | ||||
|         cout << "moist"; | ||||
|       else | ||||
|         cout << "wet"; | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Moisture sensor on analog pin A0 | ||||
|     upm::GroveMoisture moisture(0); | ||||
|  | ||||
|       cout << endl; | ||||
|     // Values (approximate): | ||||
|     // 0-300, sensor in air or dry soil | ||||
|     // 300-600, sensor in humid soil | ||||
|     // 600+, sensor in wet soil or submerged in water. | ||||
|     // Read the value every second and print the corresponding moisture level | ||||
|     while (shouldRun) { | ||||
|         int val = moisture.value(); | ||||
|         cout << "Moisture value: " << val << ", "; | ||||
|         if (val >= 0 && val < 300) | ||||
|             cout << "dry"; | ||||
|         else if (val >= 300 && val < 600) | ||||
|             cout << "moist"; | ||||
|         else | ||||
|             cout << "wet"; | ||||
|  | ||||
|       sleep(1); | ||||
|         cout << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete moisture; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -21,37 +21,38 @@ | ||||
| * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| */ | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "groveo2.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the O2 Oxygen Concentration Sensor Module | ||||
|   // Instantiate a GroveO2 on analog pin A0 | ||||
|   upm::GroveO2 *O2 = new upm::GroveO2(0); | ||||
|   while (shouldRun) | ||||
|   { | ||||
|     cout << "The output voltage is: " << O2->voltageValue() << "mV" << endl; | ||||
|     usleep(100000); | ||||
|   } | ||||
|     //! [Interesting] | ||||
|     // The was tested with the O2 Oxygen Concentration Sensor Module | ||||
|     // Instantiate a GroveO2 on analog pin A0 | ||||
|     upm::GroveO2 O2(0); | ||||
|     while (shouldRun) { | ||||
|         cout << "The output voltage is: " << O2.voltageValue() << "mV" << endl; | ||||
|         upm_delay_us(100000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|   cout << "Exiting" << endl; | ||||
|   delete O2; | ||||
|   return 0; | ||||
|     //! [Interesting] | ||||
|     cout << "Exiting" << endl; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,56 +22,52 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "grovescam.hpp" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| int main (int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   // Instantiate a Grove Serial Camera on UART 0 | ||||
|   upm::GROVESCAM* camera = new upm::GROVESCAM(0); | ||||
|     // Instantiate a Grove Serial Camera on UART 0 | ||||
|     upm::GROVESCAM camera(0); | ||||
|  | ||||
|   // make sure port is initialized properly.  115200 baud is the default. | ||||
|   if (!camera->setupTty()) | ||||
|     { | ||||
|       cerr << "Failed to setup tty port parameters" << endl; | ||||
|       return 1; | ||||
|     // make sure port is initialized properly.  115200 baud is the default. | ||||
|     if (!camera.setupTty()) { | ||||
|         cerr << "Failed to setup tty port parameters" << endl; | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|   if (camera->init()) | ||||
|     cout << "Initialized..." << endl; | ||||
|   else | ||||
|     cout << "init() failed" << endl; | ||||
|     if (camera.init()) | ||||
|         cout << "Initialized..." << endl; | ||||
|     else | ||||
|         cout << "init() failed" << endl; | ||||
|  | ||||
|   if (camera->preCapture()) | ||||
|     cout << "preCapture succeeded..." << endl; | ||||
|   else | ||||
|     cout << "preCapture failed." << endl; | ||||
|     if (camera.preCapture()) | ||||
|         cout << "preCapture succeeded..." << endl; | ||||
|     else | ||||
|         cout << "preCapture failed." << endl; | ||||
|  | ||||
|   if (camera->doCapture()) | ||||
|     cout << "doCapture succeeded..." << endl; | ||||
|   else | ||||
|     cout << "doCapture failed." << endl; | ||||
|     if (camera.doCapture()) | ||||
|         cout << "doCapture succeeded..." << endl; | ||||
|     else | ||||
|         cout << "doCapture failed." << endl; | ||||
|  | ||||
|   cout << "Image size is " << camera->getImageSize() << " bytes" << endl; | ||||
|     cout << "Image size is " << camera.getImageSize() << " bytes" << endl; | ||||
|  | ||||
|   if (camera->getImageSize() > 0) | ||||
|     { | ||||
|       cout << "Storing image.jpg..." << endl; | ||||
|       if (camera->storeImage("image.jpg")) | ||||
|         cout << "storeImage succeeded..." << endl; | ||||
|       else | ||||
|         cout << "storeImage failed." << endl; | ||||
|     if (camera.getImageSize() > 0) { | ||||
|         cout << "Storing image.jpg..." << endl; | ||||
|         if (camera.storeImage("image.jpg")) | ||||
|             cout << "storeImage succeeded..." << endl; | ||||
|         else | ||||
|             cout << "storeImage failed." << endl; | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   delete camera; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,28 +22,27 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovespeaker.hpp" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Speaker on digital pin D2 | ||||
|   upm::GroveSpeaker* speaker = new upm::GroveSpeaker(2); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Speaker on digital pin D2 | ||||
|     upm::GroveSpeaker speaker(2); | ||||
|  | ||||
|   // Play all 7 of the lowest notes | ||||
|   speaker->playAll(); | ||||
|     // Play all 7 of the lowest notes | ||||
|     speaker.playAll(); | ||||
|  | ||||
|   // Play a medium C-sharp | ||||
|   speaker->playSound('c', true, "med"); | ||||
| //! [Interesting] | ||||
|     // Play a medium C-sharp | ||||
|     speaker.playSound('c', true, "med"); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete speaker; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -24,39 +24,36 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "groveultrasonic.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
| #include <stdio.h> | ||||
|  | ||||
| #include "groveultrasonic.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| upm::GroveUltraSonic *sonar = NULL; | ||||
| bool running = true; | ||||
|  | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) { | ||||
|       running = false; | ||||
|         running = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
| //! [Interesting] | ||||
|   // upm::GroveUltraSonic *sonar = NULL; | ||||
|   sonar = new upm::GroveUltraSonic(2); | ||||
|   while(running) { | ||||
|     int width = sonar->getDistance(); | ||||
|     printf("Echo width = %d\n", width); | ||||
|     printf("Distance inches = %f.2\n\n", width/148.0); | ||||
|     sleep(3); | ||||
|   } | ||||
| //! [Interesting] | ||||
|   printf("exiting application\n"); | ||||
|   delete sonar; | ||||
|   return 0; | ||||
|     signal(SIGINT, sig_handler); | ||||
|     //! [Interesting] | ||||
|     // upm::GroveUltraSonic *sonar = NULL; | ||||
|     upm::GroveUltraSonic sonar(2); | ||||
|     while (running) { | ||||
|         int width = sonar.getDistance(); | ||||
|         printf("Echo width = %d\n", width); | ||||
|         printf("Distance inches = %f.2\n\n", width / 148.0); | ||||
|         upm_delay(3); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|     printf("exiting application\n"); | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,46 +22,46 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovevdiv.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Voltage Divider sensor on analog pin A0 | ||||
|   upm::GroveVDiv* vDiv = new upm::GroveVDiv(0); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Voltage Divider sensor on analog pin A0 | ||||
|     upm::GroveVDiv vDiv(0); | ||||
|  | ||||
|   // collect data and output measured voltage according to the setting | ||||
|   // of the scaling switch (3 or 10) | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       unsigned int val = vDiv->value(100); | ||||
|       float gain3val = vDiv->computedValue(3, val); | ||||
|       float gain10val = vDiv->computedValue(10, val); | ||||
|       cout << "ADC value: " << val << " Gain 3: " << gain3val  | ||||
|            << "v Gain 10: " << gain10val << "v" << endl; | ||||
|     // collect data and output measured voltage according to the setting | ||||
|     // of the scaling switch (3 or 10) | ||||
|     while (shouldRun) { | ||||
|         unsigned int val = vDiv.value(100); | ||||
|         float gain3val = vDiv.computedValue(3, val); | ||||
|         float gain10val = vDiv.computedValue(10, val); | ||||
|         cout << "ADC value: " << val << " Gain 3: " << gain3val << "v Gain 10: " << gain10val << "v" | ||||
|              << endl; | ||||
|  | ||||
|       sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete vDiv; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,44 +22,44 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovewater.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main () | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Water sensor on digital pin D2 | ||||
|   upm::GroveWater* water = new upm::GroveWater(2); | ||||
|    | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       bool val = water->isWet(); | ||||
|       if (val) | ||||
|         cout << "Sensor is wet." << endl; | ||||
|       else | ||||
|         cout << "Sensor is dry." << endl; | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Water sensor on digital pin D2 | ||||
|     upm::GroveWater water(2); | ||||
|  | ||||
|       sleep(1); | ||||
|     while (shouldRun) { | ||||
|         bool val = water.isWet(); | ||||
|         if (val) | ||||
|             cout << "Sensor is wet." << endl; | ||||
|         else | ||||
|             cout << "Sensor is dry." << endl; | ||||
|  | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete water; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,57 +22,57 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "grovewfs.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate a Grove Water Flow Sensor on digital pin D2 | ||||
|   upm::GroveWFS* flow = new upm::GroveWFS(2); | ||||
|    | ||||
|   // set the flow counter to 0 and start counting | ||||
|   flow->clearFlowCounter(); | ||||
|   flow->startFlowCounter(); | ||||
|     //! [Interesting] | ||||
|     // Instantiate a Grove Water Flow Sensor on digital pin D2 | ||||
|     upm::GroveWFS flow(2); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // we grab these (,illis and flowCount) just for display | ||||
|       // purposes in this example | ||||
|       uint32_t millis = flow->getMillis(); | ||||
|       uint32_t flowCount = flow->flowCounter(); | ||||
|     // set the flow counter to 0 and start counting | ||||
|     flow.clearFlowCounter(); | ||||
|     flow.startFlowCounter(); | ||||
|  | ||||
|       float fr = flow->flowRate(); | ||||
|     while (shouldRun) { | ||||
|         // we grab these (,illis and flowCount) just for display | ||||
|         // purposes in this example | ||||
|         uint32_t millis = flow.getMillis(); | ||||
|         uint32_t flowCount = flow.flowCounter(); | ||||
|  | ||||
|       // output milliseconds passed, flow count, and computed flow rate | ||||
|       cout << "Millis: " << millis << " Flow Count: " << flowCount; | ||||
|       cout << " Flow Rate: " << fr << " LPM" << endl; | ||||
|         float fr = flow.flowRate(); | ||||
|  | ||||
|       // best to gather data for at least one second for reasonable | ||||
|       // results. | ||||
|       sleep(2); | ||||
|         // output milliseconds passed, flow count, and computed flow rate | ||||
|         cout << "Millis: " << millis << " Flow Count: " << flowCount; | ||||
|         cout << " Flow Rate: " << fr << " LPM" << endl; | ||||
|  | ||||
|         // best to gather data for at least one second for reasonable | ||||
|         // results. | ||||
|         upm_delay(2); | ||||
|     } | ||||
|  | ||||
|   flow->stopFlowCounter(); | ||||
| //! [Interesting] | ||||
|     flow.stopFlowCounter(); | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete flow; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,42 +22,43 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "gsr.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // The was tested with the GSR Galvanic Skin Response Sensor module. | ||||
|     //! [Interesting] | ||||
|     // The was tested with the GSR Galvanic Skin Response Sensor module. | ||||
|  | ||||
|   // Instantiate a GSR on analog pin A0 | ||||
|   upm::GSR *gsr = new upm::GSR(0); | ||||
|   cout << "Calibrating...." << endl; | ||||
|   gsr->calibrate(); | ||||
|     // Instantiate a GSR on analog pin A0 | ||||
|     upm::GSR gsr(0); | ||||
|     cout << "Calibrating...." << endl; | ||||
|     gsr.calibrate(); | ||||
|  | ||||
|   while (shouldRun) | ||||
|   { | ||||
|       cout << gsr->value() << endl; | ||||
|       usleep(500000); | ||||
|   } | ||||
| //! [Interesting] | ||||
|     while (shouldRun) { | ||||
|         cout << gsr.value() << endl; | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting" << endl; | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|   delete gsr; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,51 +22,50 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "guvas12d.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| // analog voltage, usually 3.3 or 5.0 | ||||
| #define GUVAS12D_AREF   5.0 | ||||
| #define GUVAS12D_AREF 5.0 | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main() | ||||
| int | ||||
| main() | ||||
| { | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|     // This was tested with the Grove UV Sensor module. | ||||
|     // It has a sensing range from between 240-370nm.  It's strongest | ||||
|     // response is around 320-360nm. | ||||
|  | ||||
|     // Instantiate a GUVAS12D on analog pin A0 | ||||
|     upm::GUVAS12D *volts = new upm::GUVAS12D(0); | ||||
|     upm::GUVAS12D volts(0); | ||||
|  | ||||
|     // The higher the voltage the more intense the UV radiation. | ||||
|  | ||||
|     while (shouldRun) | ||||
|     { | ||||
|         cout << "Volts: " << volts->volts() | ||||
|              << ", Intensity: " << volts->intensity() | ||||
|              << " mW/m^2" | ||||
|     while (shouldRun) { | ||||
|         cout << "Volts: " << volts.volts() << ", Intensity: " << volts.intensity() << " mW/m^2" | ||||
|              << endl; | ||||
|  | ||||
|         sleep(1); | ||||
|         upm_delay(1); | ||||
|     } | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|     cout << "Exiting" << endl; | ||||
|  | ||||
|     delete volts; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,59 +22,58 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <signal.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
|  | ||||
| #include "h3lis331dl.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
| using namespace upm; | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|   // Instantiate an H3LIS331DL on I2C bus 0 | ||||
|     //! [Interesting] | ||||
|     // Instantiate an H3LIS331DL on I2C bus 0 | ||||
|  | ||||
|   upm::H3LIS331DL *accel = new upm::H3LIS331DL(H3LIS331DL_I2C_BUS,  | ||||
|                                                H3LIS331DL_DEFAULT_I2C_ADDR); | ||||
|     upm::H3LIS331DL accel(H3LIS331DL_I2C_BUS, H3LIS331DL_DEFAULT_I2C_ADDR); | ||||
|  | ||||
|   // Initialize the device with default values | ||||
|   accel->init(); | ||||
|     // Initialize the device with default values | ||||
|     accel.init(); | ||||
|  | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       int x, y, z; | ||||
|       float ax, ay, az; | ||||
|     while (shouldRun) { | ||||
|         int x, y, z; | ||||
|         float ax, ay, az; | ||||
|  | ||||
|       accel->update(); | ||||
|         accel.update(); | ||||
|  | ||||
|       accel->getRawXYZ(&x, &y, &z); | ||||
|       accel->getAcceleration(&ax, &ay, &az); | ||||
|         accel.getRawXYZ(&x, &y, &z); | ||||
|         accel.getAcceleration(&ax, &ay, &az); | ||||
|  | ||||
|       cout << "Raw: X = " << x << " Y = " << y << " Z = " << z << endl; | ||||
|        | ||||
|       cout << "Acceleration: AX = " << ax << " AY = " << ay << " AZ = " << az | ||||
|            << endl; | ||||
|         cout << "Raw: X = " << x << " Y = " << y << " Z = " << z << endl; | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << "Acceleration: AX = " << ax << " AY = " << ay << " AZ = " << az << endl; | ||||
|  | ||||
|       usleep(500000); | ||||
|         cout << endl; | ||||
|  | ||||
|         upm_delay_us(500000); | ||||
|     } | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete accel; | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,128 +22,100 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include <signal.h> | ||||
| #include <string> | ||||
|  | ||||
| #include "h803x.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| using namespace std; | ||||
|  | ||||
| bool shouldRun = true; | ||||
|  | ||||
| void sig_handler(int signo) | ||||
| void | ||||
| sig_handler(int signo) | ||||
| { | ||||
|   if (signo == SIGINT) | ||||
|     shouldRun = false; | ||||
|     if (signo == SIGINT) | ||||
|         shouldRun = false; | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| int | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|   signal(SIGINT, sig_handler); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
| //! [Interesting] | ||||
|     //! [Interesting] | ||||
|  | ||||
|   string defaultDev = "/dev/ttyUSB0"; | ||||
|     string defaultDev = "/dev/ttyUSB0"; | ||||
|  | ||||
|   // if an argument was specified, use it as the device instead | ||||
|   if (argc > 1) | ||||
|     defaultDev = string(argv[1]); | ||||
|     // if an argument was specified, use it as the device instead | ||||
|     if (argc > 1) | ||||
|         defaultDev = string(argv[1]); | ||||
|  | ||||
|   cout << "Using device " << defaultDev << endl; | ||||
|   cout << "Initializing..." << endl; | ||||
|     cout << "Using device " << defaultDev << endl; | ||||
|     cout << "Initializing..." << endl; | ||||
|  | ||||
|   // Instantiate an H803X instance, using MODBUS slave address 1, and | ||||
|   // default comm parameters (9600, 8, N, 2) | ||||
|   upm::H803X *sensor = new upm::H803X(defaultDev, 1); | ||||
|     // Instantiate an H803X instance, using MODBUS slave address 1, and | ||||
|     // default comm parameters (9600, 8, N, 2) | ||||
|     upm::H803X sensor(defaultDev, 1); | ||||
|  | ||||
|   // output the Slave ID string | ||||
|   cout << "Slave ID: " << sensor->getSlaveID() << endl; | ||||
|   cout << endl; | ||||
|     // output the Slave ID string | ||||
|     cout << "Slave ID: " << sensor.getSlaveID() << endl; | ||||
|     cout << endl; | ||||
|  | ||||
|   // update and print available values every second | ||||
|   while (shouldRun) | ||||
|     { | ||||
|       // update our values from the sensor | ||||
|       sensor->update(); | ||||
|     // update and print available values every second | ||||
|     while (shouldRun) { | ||||
|         // update our values from the sensor | ||||
|         sensor.update(); | ||||
|  | ||||
|       // H8035 / H8036 | ||||
|       cout << "Consumption (kWh): " << sensor->getConsumption() << endl; | ||||
|       cout << "Real Power (kW): " << sensor->getRealPower() << endl; | ||||
|         // H8035 / H8036 | ||||
|         cout << "Consumption (kWh): " << sensor.getConsumption() << endl; | ||||
|         cout << "Real Power (kW): " << sensor.getRealPower() << endl; | ||||
|  | ||||
|       if (sensor->isH8036()) | ||||
|         { | ||||
|           // The H8036 has much more data available... | ||||
|         if (sensor.isH8036()) { | ||||
|             // The H8036 has much more data available... | ||||
|  | ||||
|           cout << "Reactive Power (kVAR): " << sensor->getReactivePower()  | ||||
|                << endl; | ||||
|           cout << "Apparent Power (kVA): " << sensor->getApparentPower()  | ||||
|                << endl; | ||||
|           cout << "Power Factor: " << sensor->getPowerFactor()  | ||||
|                << endl; | ||||
|           cout << "Volts Line to Line: " << sensor->getVoltsLineToLine()  | ||||
|                << endl; | ||||
|           cout << "Volts Line to Neutral: " << sensor->getVoltsLineToNeutral()  | ||||
|                << endl; | ||||
|             cout << "Reactive Power (kVAR): " << sensor.getReactivePower() << endl; | ||||
|             cout << "Apparent Power (kVA): " << sensor.getApparentPower() << endl; | ||||
|             cout << "Power Factor: " << sensor.getPowerFactor() << endl; | ||||
|             cout << "Volts Line to Line: " << sensor.getVoltsLineToLine() << endl; | ||||
|             cout << "Volts Line to Neutral: " << sensor.getVoltsLineToNeutral() << endl; | ||||
|  | ||||
|           cout << "Current: " << sensor->getCurrent()  | ||||
|                << endl; | ||||
|             cout << "Current: " << sensor.getCurrent() << endl; | ||||
|  | ||||
|           cout << "Real Power Phase A (kW): " << sensor->getRealPowerPhaseA()  | ||||
|                << endl; | ||||
|           cout << "Real Power Phase B (kW): " << sensor->getRealPowerPhaseB()  | ||||
|                << endl; | ||||
|           cout << "Real Power Phase C (kW): " << sensor->getRealPowerPhaseC()  | ||||
|                << endl; | ||||
|             cout << "Real Power Phase A (kW): " << sensor.getRealPowerPhaseA() << endl; | ||||
|             cout << "Real Power Phase B (kW): " << sensor.getRealPowerPhaseB() << endl; | ||||
|             cout << "Real Power Phase C (kW): " << sensor.getRealPowerPhaseC() << endl; | ||||
|  | ||||
|           cout << "Power Factor Phase A: " << sensor->getPowerFactorPhaseA()  | ||||
|                << endl; | ||||
|           cout << "Power Factor Phase B: " << sensor->getPowerFactorPhaseB()  | ||||
|                << endl; | ||||
|           cout << "Power Factor Phase C: " << sensor->getPowerFactorPhaseC()  | ||||
|                << endl; | ||||
|             cout << "Power Factor Phase A: " << sensor.getPowerFactorPhaseA() << endl; | ||||
|             cout << "Power Factor Phase B: " << sensor.getPowerFactorPhaseB() << endl; | ||||
|             cout << "Power Factor Phase C: " << sensor.getPowerFactorPhaseC() << endl; | ||||
|  | ||||
|           cout << "Volts Phase A to B: " << sensor->getVoltsPhaseAToB()  | ||||
|                << endl; | ||||
|           cout << "Volts Phase B to C: " << sensor->getVoltsPhaseBToC()  | ||||
|                << endl; | ||||
|           cout << "Volts Phase A to C: " << sensor->getVoltsPhaseAToC()  | ||||
|                << endl; | ||||
|           cout << "Volts Phase A to Neutral: " | ||||
|                << sensor->getVoltsPhaseAToNeutral()  | ||||
|                << endl; | ||||
|           cout << "Volts Phase B to Neutral: " | ||||
|                << sensor->getVoltsPhaseBToNeutral()  | ||||
|                << endl; | ||||
|           cout << "Volts Phase C to Neutral: " | ||||
|                << sensor->getVoltsPhaseCToNeutral()  | ||||
|                << endl; | ||||
|             cout << "Volts Phase A to B: " << sensor.getVoltsPhaseAToB() << endl; | ||||
|             cout << "Volts Phase B to C: " << sensor.getVoltsPhaseBToC() << endl; | ||||
|             cout << "Volts Phase A to C: " << sensor.getVoltsPhaseAToC() << endl; | ||||
|             cout << "Volts Phase A to Neutral: " << sensor.getVoltsPhaseAToNeutral() << endl; | ||||
|             cout << "Volts Phase B to Neutral: " << sensor.getVoltsPhaseBToNeutral() << endl; | ||||
|             cout << "Volts Phase C to Neutral: " << sensor.getVoltsPhaseCToNeutral() << endl; | ||||
|  | ||||
|           cout << "Current Phase A: " << sensor->getCurrentPhaseA()  | ||||
|                << endl; | ||||
|           cout << "Current Phase B: " << sensor->getCurrentPhaseB()  | ||||
|                << endl; | ||||
|           cout << "Current Phase C: " << sensor->getCurrentPhaseC()  | ||||
|                << endl; | ||||
|             cout << "Current Phase A: " << sensor.getCurrentPhaseA() << endl; | ||||
|             cout << "Current Phase B: " << sensor.getCurrentPhaseB() << endl; | ||||
|             cout << "Current Phase C: " << sensor.getCurrentPhaseC() << endl; | ||||
|  | ||||
|           cout << "Avg Real Power (kW): " << sensor->getAvgRealPower()  | ||||
|                << endl; | ||||
|           cout << "Min Real Power (kW): " << sensor->getMinRealPower()  | ||||
|                << endl; | ||||
|           cout << "Max Real Power (kW): " << sensor->getMaxRealPower()  | ||||
|                << endl; | ||||
|             cout << "Avg Real Power (kW): " << sensor.getAvgRealPower() << endl; | ||||
|             cout << "Min Real Power (kW): " << sensor.getMinRealPower() << endl; | ||||
|             cout << "Max Real Power (kW): " << sensor.getMaxRealPower() << endl; | ||||
|         } | ||||
|  | ||||
|       cout << endl; | ||||
|         cout << endl; | ||||
|  | ||||
|       sleep(2); | ||||
|         upm_delay(2); | ||||
|     } | ||||
|  | ||||
|   cout << "Exiting..." << endl; | ||||
|     cout << "Exiting..." << endl; | ||||
|  | ||||
|   delete sensor; | ||||
|     //! [Interesting] | ||||
|  | ||||
| //! [Interesting] | ||||
|  | ||||
|   return 0; | ||||
|     return 0; | ||||
| } | ||||
|   | ||||
| @@ -22,12 +22,11 @@ | ||||
|  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| #include <unistd.h> | ||||
| #include <iostream> | ||||
| #include "hcsr04.hpp" | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <sys/time.h> | ||||
|  | ||||
| #include "hcsr04.hpp" | ||||
| #include "upm_utilities.h" | ||||
|  | ||||
| int shouldRun = true; | ||||
|  | ||||
| @@ -41,22 +40,21 @@ sig_handler(int signo) | ||||
|  | ||||
| //! [Interesting] | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| main(int argc, char** argv) | ||||
| { | ||||
|     upm::HCSR04 *sonar = new upm::HCSR04(2, 4); | ||||
|     upm::HCSR04 sonar(2, 4); | ||||
|     signal(SIGINT, sig_handler); | ||||
|  | ||||
|     sleep(1); | ||||
|     upm_delay(1); | ||||
|  | ||||
|     while(shouldRun){ | ||||
|     while (shouldRun) { | ||||
|         std::cout << "get distance" << std::endl; | ||||
|         double distance = sonar->getDistance(HCSR04_CM); | ||||
|         double distance = sonar.getDistance(HCSR04_CM); | ||||
|         std::cout << "distance " << distance << std::endl; | ||||
|         sleep(2); | ||||
|         upm_delay(2); | ||||
|     } | ||||
|     std::cout << "Exiting... " << std::endl; | ||||
|  | ||||
|     delete sonar; | ||||
|     return 0; | ||||
| } | ||||
| //! [Interesting] | ||||
|   | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user