Advertisement
pleasedontcode

"Servo Control" rev_02

Nov 29th, 2024
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /********* Pleasedontcode.com **********
  2.  
  3.     Pleasedontcode thanks you for automatic code generation! Enjoy your code!
  4.  
  5.     - Terms and Conditions:
  6.     You have a non-exclusive, revocable, worldwide, royalty-free license
  7.     for personal and commercial use. Attribution is optional; modifications
  8.     are allowed, but you're responsible for code maintenance. We're not
  9.     liable for any loss or damage. For full terms,
  10.     please visit pleasedontcode.com/termsandconditions.
  11.  
  12.     - Project: "Servo Control"
  13.     - Source Code NOT compiled for: Arduino Uno
  14.     - Source Code created on: 2024-11-29 11:10:35
  15.  
  16. ********* Pleasedontcode.com **********/
  17.  
  18. /****** SYSTEM REQUIREMENTS *****/
  19. /****** SYSTEM REQUIREMENT 1 *****/
  20.     /* Convertire l'angolo del potenziometro in gradi per */
  21.     /* il servo */
  22. /****** END SYSTEM REQUIREMENTS *****/
  23.  
  24. /* START CODE */
  25.  
  26. /****** DEFINITION OF LIBRARIES *****/
  27. #include <Servo.h>  //https://github.com/arduino-libraries/Servo
  28.  
  29. /****** FUNCTION PROTOTYPES *****/
  30. void setup(void);
  31. void loop(void);
  32. void updateOutputs(void);
  33.  
  34. /***** DEFINITION OF ANALOG INPUT PINS *****/
  35. const uint8_t Base_Potentiometer_Vout_PIN_A0        = A0;
  36.  
  37. /***** DEFINITION OF PWM OUTPUT PINS *****/
  38. const uint8_t Base_Servomotor_PWMSignal_PIN_D3      = 3;
  39. const uint8_t Base_Servomotor_PWMSignal_PIN_D5      = 5; // Added for servoBraccio1
  40. const uint8_t Base_Servomotor_PWMSignal_PIN_D6      = 6; // Added for servoPolso
  41. const uint8_t Base_Servomotor_PWMSignal_PIN_D9      = 9; // Added for servoS
  42. const uint8_t Base_Servomotor_PWMSignal_PIN_D10     = 10; // Added for servoPinza
  43.  
  44. /***** DEFINITION OF OUTPUT RAW VARIABLES *****/
  45. /***** used to store raw data *****/
  46. uint8_t Base_Servomotor_PWMSignal_PIN_D3_rawData        = 0;
  47.  
  48. /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/
  49. /***** used to store data after characteristic curve transformation *****/
  50. float   Base_Servomotor_PWMSignal_PIN_D3_phyData        = 0.0;
  51.  
  52. /****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
  53. Servo servoBase; // Added for servo control
  54. Servo servoBraccio1; // Added for servo control
  55. Servo servoPolso; // Added for servo control
  56. Servo servoS; // Added for servo control
  57. Servo servoPinza; // Added for servo control
  58.  
  59. // Posizioni iniziali dei servo (in gradi)
  60. int posizioneBase = 90; // Added for servo control
  61. int posizioneBraccio1 = 120; // Added for servo control
  62. int posizionePolso = 115; // Added for servo control
  63. int posizioneS = 90; // Added for servo control
  64. int posizionePinza = 145; // Added for servo control
  65.  
  66. // Funzione per limitare i valori degli angoli
  67. int constrainAngle(int angolo, int minimo, int massimo) {
  68.   return constrain(angolo, minimo, massimo);
  69. }
  70.  
  71. void setup(void)
  72. {
  73.     // put your setup code here, to run once:
  74.  
  75.     pinMode(Base_Potentiometer_Vout_PIN_A0, INPUT);
  76.     pinMode(Base_Servomotor_PWMSignal_PIN_D3,    OUTPUT);
  77.  
  78.     // Associazione dei servomotori ai rispettivi pin
  79.     servoBase.attach(Base_Servomotor_PWMSignal_PIN_D3);
  80.     servoBraccio1.attach(Base_Servomotor_PWMSignal_PIN_D5);
  81.     servoPolso.attach(Base_Servomotor_PWMSignal_PIN_D6);
  82.     servoS.attach(Base_Servomotor_PWMSignal_PIN_D9);
  83.     servoPinza.attach(Base_Servomotor_PWMSignal_PIN_D10);
  84.  
  85.     // Posizionamento iniziale dei servo
  86.     servoBase.write(posizioneBase);
  87.     servoBraccio1.write(posizioneBraccio1);
  88.     servoPolso.write(posizionePolso);
  89.     servoS.write(posizioneS);
  90.     servoPinza.write(posizionePinza);
  91.  
  92.     Serial.begin(9600); // Added for serial communication
  93.     Serial.println("Sistema pronto. Usa i tasti per controllare i servo:"); // Added for user instructions
  94.     Serial.println("q/a - Base"); // Added for user instructions
  95.     Serial.println("w/s - Braccio 1"); // Added for user instructions
  96.     Serial.println("e/d - Polso"); // Added for user instructions
  97.     Serial.println("r/f - Rotazione Polso (S)"); // Added for user instructions
  98.     Serial.println("t/g - Pinza"); // Added for user instructions
  99. }
  100.  
  101. void loop(void)
  102. {
  103.     // put your main code here, to run repeatedly:
  104.     updateOutputs(); // Refresh output data
  105.  
  106.     // Read the potentiometer value and convert it to an angle for the servo
  107.     int potValue = analogRead(Base_Potentiometer_Vout_PIN_A0); // Read the potentiometer
  108.     int angle = map(potValue, 0, 1023, 0, 180); // Map the potentiometer value to an angle (0-180 degrees)
  109.     servoBase.write(angle); // Write the angle to the servo
  110.  
  111.     // Controlla se è stato ricevuto un comando tramite seriale
  112.     if (Serial.available() > 0) {
  113.         char comando = Serial.read();
  114.  
  115.         // Aggiorna la posizione del servo in base al comando ricevuto
  116.         switch (comando) {
  117.             case 'q':
  118.                 posizioneBase = constrainAngle(posizioneBase + 2, 0, 180);
  119.                 break;
  120.             case 'a':
  121.                 posizioneBase = constrainAngle(posizioneBase - 2, 0, 180);
  122.                 break;
  123.             case 'w':
  124.                 posizioneBraccio1 = constrainAngle(posizioneBraccio1 + 2, 100, 140);
  125.                 break;
  126.             case 's':
  127.                 posizioneBraccio1 = constrainAngle(posizioneBraccio1 - 2, 100, 140);
  128.                 break;
  129.             case 'e':
  130.                 posizionePolso = constrainAngle(posizionePolso + 2, 100, 130);
  131.                 break;
  132.             case 'd':
  133.                 posizionePolso = constrainAngle(posizionePolso - 2, 100, 130);
  134.                 break;
  135.             case 'r':
  136.                 posizioneS = constrainAngle(posizioneS + 2, 0, 180);
  137.                 break;
  138.             case 'f':
  139.                 posizioneS = constrainAngle(posizioneS - 2, 0, 180);
  140.                 break;
  141.             case 't':
  142.                 posizionePinza = constrainAngle(posizionePinza + 2, 120, 175);
  143.                 break;
  144.             case 'g':
  145.                 posizionePinza = constrainAngle(posizionePinza - 2, 120, 175);
  146.                 break;
  147.             default:
  148.                 Serial.println("Comando non valido. Usa i tasti indicati.");
  149.                 break;
  150.         }
  151.  
  152.         // Aggiorna i servo alle nuove posizioni
  153.         servoBase.write(posizioneBase);
  154.         servoBraccio1.write(posizioneBraccio1);
  155.         servoPolso.write(posizionePolso);
  156.         servoS.write(posizioneS);
  157.         servoPinza.write(posizionePinza);
  158.  
  159.         // Stampa la nuova posizione del servo per monitoraggio
  160.         Serial.print("Base: ");
  161.         Serial.print(posizioneBase);
  162.         Serial.print(" | Braccio1: ");
  163.         Serial.print(posizioneBraccio1);
  164.         Serial.print(" | Polso: ");
  165.         Serial.print(posizionePolso);
  166.         Serial.print(" | Rotazione Polso (S): ");
  167.         Serial.print(posizioneS);
  168.         Serial.print(" | Pinza: ");
  169.         Serial.println(posizionePinza);
  170.     }
  171. }
  172.  
  173. void updateOutputs()
  174. {
  175.     analogWrite(Base_Servomotor_PWMSignal_PIN_D3, Base_Servomotor_PWMSignal_PIN_D3_rawData);
  176. }
  177.  
  178. /* END CODE */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement