Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.22 KB | None | 0 0
  1.  
  2.  
  3. // Import bilbiotek
  4. #include <SPI.h>
  5. #include "nRF24L01.h"
  6. #include "RF24.h"
  7. #include <Servo.h> //Biblioteka odpowiedzialna za serwa
  8. #include <DHT.h>
  9. #define DHT11_PIN 34
  10. DHT dht;
  11. #define trigPin 12
  12. #define echoPin 11
  13.  
  14. //
  15. // Konfiguracja ustawień sprzętowych radia
  16. //
  17. const int max_payload_size = 32; // ustawienie payloadu
  18. RF24 radio(53,48); // Uruchomienie nrfa na pinach 53 i 48
  19.  
  20. // Ustawienia komunikacji radia
  21. const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // ustawienie radio pipe dla 2 node
  22.  
  23. // Zmienne odbierające i wysyłające
  24. char receive_payload[max_payload_size+1]; // +1 aby umożłiwić terminowanie wartośći NULL
  25. char sending_payload[3];
  26. // Zmienne silnika
  27. int PWMab = 0; // Zmienna pomocnicza okreslajaca predkosc wynikajaca z triggera gamepada
  28. int PWMa = 0; // Kanał lewy mostka  
  29. int PWMb = 0; // Kanał prawy mostka
  30. // Zmienne stanu mostka H
  31. int GoForward =0;
  32. int GoBackward = 0;
  33. int Stop = 1;
  34. int TurnLeft = 0;
  35. int TurnRight = 0;
  36. // Zmienne pinów mostka H
  37. int IN1v = 0;
  38. int IN2v = 0;
  39. int IN3v = 0;
  40. int IN4v = 0;
  41.  
  42. // Porty arduino
  43. int rightMotorPin = 10;
  44. int leftMotorPin = 9;
  45.  
  46. int IN1p = 2; // Piny logiczne mostka H IN1-IN4
  47. int IN2p = 3;
  48. int IN3p = 4;
  49. int IN4p = 5;
  50.  
  51. int Serwo1p = 8; // Piny serwomechanizmow manipulatora
  52. int Serwo2p = 11;
  53. int Serwo3p = 12;
  54. int Serwo4p = 13;
  55.  
  56. int SerwoPosition[4] = {30, 30, 30, 30}; // Startowa pozycja seromechanizmów
  57.  
  58. int ChosenSerwo = 0; // zmienna pomocnicza do wyboru serwa z pada
  59.  
  60.  
  61. Servo servos[4]; // Stworzenie obiektow serwa
  62.  
  63. void SerwoControl(unsigned char Button1, unsigned char Button2, unsigned char Button3, unsigned char Button4, unsigned char SerwoPlus, unsigned char SerwoMinus)
  64. {
  65.   if (Button1 == 1)
  66.   {
  67.     ChosenSerwo = 0;
  68.   }
  69.  
  70.   else if (Button2 == 1)
  71.   {
  72.     ChosenSerwo = 1;
  73.   }
  74.   else if (Button3 == 1)
  75.   {
  76.     ChosenSerwo = 2;
  77.   }
  78.   else if (Button4 == 1)
  79.   {
  80.     ChosenSerwo = 3;
  81.   }
  82.    if (SerwoPlus == 1)
  83.    {
  84.     if (SerwoPosition[ChosenSerwo] < 180)
  85.     {
  86.     SerwoPosition[ChosenSerwo]= SerwoPosition[ChosenSerwo] + 1;
  87.     servos[ChosenSerwo].write(SerwoPosition[ChosenSerwo]);
  88.    
  89.     }
  90.    }
  91.    else if (SerwoMinus == 1)
  92.    {
  93.     if (SerwoPosition[ChosenSerwo] > 0)
  94.     {
  95.     SerwoPosition[ChosenSerwo]= SerwoPosition[ChosenSerwo] - 1;
  96.     servos[ChosenSerwo].write(SerwoPosition[ChosenSerwo]);
  97.    
  98.    }
  99.    }
  100.  
  101.  
  102. }
  103.  
  104. void MotorSpeed(unsigned char RightTrigger,unsigned char leftTrigger, char Xaxis)
  105. {
  106.   if ((RightTrigger) > (leftTrigger))
  107.   {
  108.     PWMab =(RightTrigger) - (leftTrigger);
  109.     GoForward = 1;
  110.     GoBackward = 0;
  111.     Stop = 0;
  112.     TurnRight = 0;
  113.      TurnLeft = 0;
  114.   }
  115.   else if ((leftTrigger > (RightTrigger)))
  116.   {
  117.      PWMab = (leftTrigger) - (RightTrigger);
  118.      GoForward = 0;
  119.     GoBackward = 1;
  120.     Stop = 0;
  121.     TurnRight = 0;
  122.      TurnLeft = 0;
  123.    
  124.   }
  125.    else
  126.    {
  127.     Stop = 1;
  128.     GoForward = 0;
  129.     GoBackward = 0;
  130.     PWMab = 0;
  131.      TurnRight = 0;
  132.      TurnLeft = 0;
  133.    }
  134.   if (Xaxis > 20)
  135.   {
  136.     PWMa = (int) (PWMab * Xaxis/128);
  137.     PWMb = PWMab - PWMa;
  138.      TurnRight = 0;
  139.      TurnLeft = 0;
  140.      if (Xaxis > 100)
  141.      {
  142.       TurnRight = 1;
  143.       PWMb = PWMa;
  144.      }
  145.   }
  146.    else if (Xaxis < -20)
  147.   {
  148.     PWMb = (int) (PWMab * Xaxis/128 *-1);
  149.     PWMa = PWMab - PWMb;
  150.     TurnLeft = 0;
  151.     TurnRight = 0;
  152.      if (Xaxis < -100)
  153.      {
  154.       TurnLeft = 1;
  155.       PWMa = PWMb;
  156.      }
  157.   }
  158.   else
  159.   {
  160.     PWMa = PWMab;
  161.     PWMb = PWMab;
  162.     TurnLeft = 0;
  163.     TurnRight = 0;
  164.   }
  165.   Serial.println("PWMY");
  166.   Serial.println(PWMa);
  167.   Serial.println(PWMb);
  168.  
  169. }
  170.  
  171.  
  172. void HbridgePinout(void)
  173. {
  174.   if (GoForward == 1 and TurnRight == 0 and TurnLeft == 0)
  175.   {
  176.     IN1v = HIGH;
  177.     IN2v = LOW;
  178.     IN3v = HIGH;
  179.     IN4v = LOW;
  180.   }
  181.   else if (GoBackward == 1 and TurnRight == 0 and TurnLeft == 0)
  182.   {
  183.     IN2v = HIGH;
  184.     IN1v = LOW;
  185.     IN4v = HIGH;
  186.     IN3v = LOW;
  187.   }
  188.   else if (TurnRight == 1)
  189.   {
  190.     IN1v = HIGH;
  191.     IN2v = LOW;
  192.     IN3v = LOW;
  193.     IN4v = HIGH;
  194.   }
  195.    else if (TurnLeft == 1)
  196.   {
  197.     IN1v = LOW;
  198.     IN2v = HIGH;
  199.     IN3v = HIGH;
  200.     IN4v = LOW;
  201.   }
  202.   else
  203.   {
  204.     IN1v = LOW;
  205.     IN2v = LOW;
  206.     IN3v = LOW;
  207.     IN4v = LOW;
  208.   }
  209.   digitalWrite(IN1p, IN1v);
  210.   digitalWrite(IN2p, IN2v);
  211.   digitalWrite(IN3p, IN3v);
  212.   digitalWrite(IN4p, IN4v);
  213.   analogWrite(rightMotorPin, PWMa);
  214.   analogWrite(leftMotorPin, PWMb);
  215.  
  216.    Serial.println("Forward");
  217.    Serial.println(GoForward);
  218.    Serial.println("back");
  219.    Serial.println(GoBackward);
  220.  
  221. }
  222.  
  223. int zmierzOdleglosc() {
  224.   long czas, dystans;
  225.  
  226.   digitalWrite(trigPin, LOW);
  227.   delayMicroseconds(2);
  228.   digitalWrite(trigPin, HIGH);
  229.   delayMicroseconds(10);
  230.   digitalWrite(trigPin, LOW);
  231.  
  232.   czas = pulseIn(echoPin, HIGH);
  233.   dystans = czas / 58;
  234.  
  235.   return dystans;
  236. }
  237.  
  238. void setup(void)
  239.  
  240. {
  241.   servos[0].attach(Serwo1p); // Przypisane serwomechanizmów do pinów
  242.   servos[1].attach(Serwo2p);
  243.   servos[2].attach(Serwo3p);
  244.   servos[3].attach(Serwo4p);
  245.    
  246.   Serial.begin(115200); // Odpalenie transmisji monitoru portu szeregowego
  247.   radio.begin();
  248.   radio.setPALevel(RF24_PA_HIGH); // ustawienie mocy nadajnika
  249.   radio.enableDynamicPayloads(); // uruchomienie dynamicznych payload
  250.   radio.setRetries(5,15); // ustawianie liczby retransmisji
  251.  
  252.   // Uruchomienie rur komunikacyjnych
  253.   radio.openWritingPipe(pipes[1]);
  254.   radio.openReadingPipe(1,pipes[0]);
  255.  
  256.   //Start radia
  257.   radio.startListening(); // Rozpoczecie nasłuchu
  258.   Serial.println("Koniec setupu"); // informacja do debugowania
  259.  
  260.   //Ustawienia portów arduino
  261.   pinMode(leftMotorPin, OUTPUT);
  262.   pinMode(rightMotorPin, OUTPUT);
  263.  
  264.   //ustawienie dht
  265.    dht.setup(DHT11_PIN);
  266.  
  267.   // Ustawienia czujnikla odleglosci
  268.   pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
  269.   pinMode(echoPin, INPUT); //a echo, jako wejście
  270.  
  271.  
  272. }
  273.  
  274. void loop(void)
  275. {
  276.   while ( radio.available() ) // Jeżeli są do dane do odebrania
  277.   {
  278.     // Odbierz dane i zobacz czy był to ostatani bit
  279.     uint8_t len = radio.getDynamicPayloadSize();
  280.     // Jeżeli ładunek jest uszkodzony to go porzuć
  281.     if(!len){
  282.       continue;
  283.     }
  284.     radio.read( receive_payload, len );
  285.     // Ustaw zero na końcu 0 dla łatwego wyświetlania wyniku
  286.     receive_payload[len] = 0;
  287.  
  288.  
  289.     for(int i = 0; i < len; i++) // Wydrukowanie ładunku
  290. {
  291.   Serial.println(receive_payload[i], DEC );
  292. }
  293.     MotorSpeed(receive_payload[1], receive_payload[2], receive_payload[0]);
  294.     HbridgePinout();
  295.     SerwoControl(receive_payload[3],receive_payload[4], receive_payload[5], receive_payload[6], receive_payload[7], receive_payload[8]);
  296.     //Utworzenie payloadu do wysłania
  297.     int wilgotnosc = dht.getHumidity();
  298.     int temperatura = dht.getTemperature();
  299.  
  300.     sending_payload[0] = wilgotnosc;
  301.     sending_payload[1] = temperatura;
  302.     sending_payload[2] = 5; // Ustawione tylko do sprawdzenia poprawności komunikacji i konwersji danych
  303.    
  304.     // Przestań nasłuchiwać, żeby można nadać
  305.     radio.stopListening();
  306.  
  307.     // Nadawanie wartości
  308.     radio.write(sending_payload, 2);
  309.    
  310.     Serial.println(F("Sent response."));
  311.    
  312.     // Wznów nasłuchiwanie dla kolejnych pakietów
  313.     radio.startListening();
  314.   }
  315. }
  316. // vim:cin:ai:sts=2 sw=2 ft=cpp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement