Advertisement
lemueltra

pd_disc_ros

Oct 4th, 2019
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <ros.h>
  2. #include <std_msgs/Float64.h>
  3.  
  4. const int pot_pin = A0;
  5. const int corr_pin = A1;
  6. const int dir1 = 8;
  7. const int dir2 = 9;
  8. const int pwm = 11;
  9.  
  10. int pot = 0, angulo = 0, corrente = 0;
  11. float termo_pd_escalonado = 0, setpoint = 0;
  12.  
  13. ros::NodeHandle nh;
  14.  
  15. std_msgs::Float64 posi;
  16. std_msgs::Float64 corr;
  17.  
  18. void contr_callback(const std_msgs::Float64& msg){
  19.     termo_pd_escalonado = msg.data;
  20. }
  21.  
  22. void setpoint_callback(const std_msgs::Float64& msg){
  23.     setpoint = msg.data;
  24. }
  25.  
  26. ros::Subscriber<std_msgs::Float64> sc("controle", &contr_callback);
  27. ros::Subscriber<std_msgs::Float64> ss("setpt", &setpoint_callback);
  28.  
  29. ros::Publisher p("posicao", &posi);
  30. ros::Publisher c("corrente", &corr);
  31.  
  32. void setup() {
  33.   nh.initNode();
  34.   nh.advertise(p);
  35.   nh.advertise(c);
  36.   nh.subscribe(ss);
  37.   nh.subscribe(sc);
  38.  
  39.   pinMode(pwm, OUTPUT);
  40.   pinMode(dir1, OUTPUT);
  41.   pinMode(dir2, OUTPUT);
  42.  
  43. }
  44.  
  45. void loop() {
  46.   pd_calc();
  47.  
  48.   if (angulo < setpoint) {
  49.     digitalWrite(8, LOW);
  50.     digitalWrite(9, HIGH);
  51.   }
  52.   else {
  53.     digitalWrite(8, HIGH);
  54.     digitalWrite(9, LOW);
  55.   }
  56.  
  57.   analogWrite(11, termo_pd_escalonado);
  58.  
  59.   posi.data = angulo;
  60.   corr.data = corrente;
  61.  
  62.   p.publish( &posi );
  63.   c.publish( &corr );
  64.  
  65.   nh.subscribe(ss);
  66.   nh.subscribe(sc);
  67.   nh.spinOnce();
  68.   delay(20);
  69. }
  70.  
  71. void pd_calc(){
  72.   pot = analogRead(pot_pin);
  73.   angulo = map(pot, 0, 1023, 0, 180);  
  74.   corrente = analogRead(corr_pin);
  75.  
  76.   if (angulo > 165 or angulo < 15){ //FREIO!!!
  77.     digitalWrite(8, LOW);
  78.     digitalWrite(9, LOW);
  79.     termo_pd_escalonado = 0;
  80.   }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement