battery.cpp
Go to the documentation of this file.
1 #include <iostream>
2 #include <chrono>
3 #include <thread>
4 
5 #include <boost/program_options.hpp>
6 #include <crazyflie_cpp/Crazyflie.h>
7 
8 struct log {
9  float pm_vbat;
10  float pm_extVbat;
11  float pm_extCurr;
12  // float chargeCurrent;
13 } __attribute__((packed));
14 
15 volatile bool g_done = false;
16 
17 void onLogData(uint32_t /*time_in_ms*/, struct log* data)
18 {
19  // std::cout << data->pm_vbat << std::endl;
20  std::cout << data->pm_extVbat << std::endl;
21  // std::cout << data->pm_extCurr << std::endl;
22  g_done = true;
23 }
24 
25 int main(int argc, char **argv)
26 {
27 
28  std::string uri;
29  std::string defaultUri("radio://0/80/2M/E7E7E7E7E7");
30  bool external;
31 
32  namespace po = boost::program_options;
33 
34  po::options_description desc("Allowed options");
35  desc.add_options()
36  ("help", "produce help message")
37  ("uri", po::value<std::string>(&uri)->default_value(defaultUri), "unique ressource identifier")
38  ("external", po::value<bool>(&external)->default_value(false), "measure external voltage")
39  ;
40 
41  try
42  {
43  po::variables_map vm;
44  po::store(po::parse_command_line(argc, argv, desc), vm);
45  po::notify(vm);
46 
47  if (vm.count("help")) {
48  std::cout << desc << "\n";
49  return 0;
50  }
51  }
52  catch(po::error& e)
53  {
54  std::cerr << e.what() << std::endl << std::endl;
55  std::cerr << desc << std::endl;
56  return 1;
57  }
58 
59  try
60  {
61  Crazyflie cf(uri);
62 
63  if (!external) {
64  std::cout << cf.vbat() << std::endl;
65  } else {
66  cf.logReset();
67  cf.requestLogToc();
68 
69  std::unique_ptr<LogBlock<struct log> > logBlock;
70  std::function<void(uint32_t, struct log*)> cb = std::bind(&onLogData, std::placeholders::_1, std::placeholders::_2);
71 
72  logBlock.reset(new LogBlock<struct log>(
73  &cf,{
74  {"pm", "vbat"},
75  {"pm", "extVbat"},
76  {"pm", "extCurr"}
77  // {"pm", "chargeCurrent"}
78  }, cb));
79  logBlock->start(10); // 100ms
80 
81  while (!g_done) {
82  cf.sendPing();
83  std::this_thread::sleep_for(std::chrono::milliseconds(10));
84  }
85  }
86 
87  return 0;
88  }
89  catch(std::exception& e)
90  {
91  std::cerr << e.what() << std::endl;
92  return 1;
93  }
94 }
void requestLogToc(bool forceNoCache=false)
Definition: Crazyflie.cpp:586
volatile bool g_done
Definition: battery.cpp:15
uint8_t error
void sendPing()
Definition: Crazyflie.cpp:264
float pm_extCurr
Definition: battery.cpp:11
uint8_t data[29]
Definition: crtp.h:363
Definition: battery.cpp:8
void onLogData(uint32_t, struct log *data)
Definition: battery.cpp:17
int main(int argc, char **argv)
Definition: battery.cpp:25
float pm_vbat
Definition: battery.cpp:9
struct log __attribute__((packed))
float pm_extVbat
Definition: battery.cpp:10
void logReset()
Definition: Crazyflie.cpp:161
float vbat()
Definition: Crazyflie.cpp:361


crazyflie_tools
Author(s): Wolfgang Hoenig
autogenerated on Mon Sep 28 2020 03:40:14