Étape 6: Deuxième programme : sortie Servo
Le plaisir commence maintenant ! En utilisant le programme que je l’ai souligné précédemment, permet d’ajouter une sortie servo à l’aide de la bibliothèque de servo par défaut. J’ai également décidé d’utiliser un tableau pour les données d’entrée au lieu de huit variables séparées. Si vous avez un Uno, que je vais utiliser ce dernier, tout ce que vous avez à faire est changer les variables d’emplacement de broche.
Cela sera croquis sera lu tous les 8 canaux d’un récepteur RC et entrer les valeurs via serial monitor.
Programmé pour l’Arduino MEGA 2560
Bibliothèques incluses
#include < Servo.h >
Définir des Variables :
const int chA = 22 ; Variables constantes relatives aux emplacements de code pin
const int chB = 27 ;
const int chC = 30 ;
const int chD = 35 ;
const int chE = 38 ;
const int chF = 43 ;
const int chG = 46 ;
const int chH = 51 ;
Limite de conditionnement de signaux
const int lo = 920 ;
const int hi = 1640 ;
const int deadlo = 1270 ;
const int deadhi = 1290 ;
const int Centre = 1280 ;
int ch [8] ; Tableau pour stocker et afficher les valeurs de chaque canal
int ch4 ; Variable de sortie de servo
Steer servo ; Servo de direction
la routine d’installation s’exécute une fois que lorsque vous appuyez sur reset :
void setup()
{
initialiser une communication série 9600 bits par seconde :
Serial.Begin(9600) ;
Broches d’entrée :
pinMode(chA,INPUT) ;
pinMode(chB,INPUT) ;
pinMode(chC,INPUT) ;
pinMode(chD,INPUT) ;
pinMode(chE,INPUT) ;
pinMode(chF,INPUT) ;
pinMode(chG,INPUT) ;
pinMode(chH,INPUT) ;
Sorties de servo :
Steer.Attach(2) ; Fixez le Servo de direction à PWM borne 2
}
Programme principal
void loop()
{
lire les canaux d’entrée
ch [0] = pulseIn (chA, HIGH) ; Lire et stocker le canal 1
ch [1] = pulseIn (chB, HIGH) ;
ch [2] = pulseIn (chC, HIGH) ;
ch [3] = pulseIn (chD, HIGH) ;
ch [4] = pulseIn (chE, HIGH) ;
ch [5] = pulseIn (chF, HIGH) ;
ch [6] = pulseIn (chG, HIGH) ;
ch [7] = pulseIn (chH, HIGH) ;
Conditionnement de signaux d’entrée
pour (int i = 0; j’ai < = 8; i ++) boucle de climatisation //Signal
{
Si (ch [i] < = lo) //Trim bruit de l’extrémité inférieure
{
ch [i] = lo ;
}
Si (ch [i] < = deadhi & & ch [i] > = deadlo) //Create bande morte
{
ch [i] = center ;
}
Si (ch [i] > = hi) //Trim bruit de haut de gamme
{
ch [i] = Salut ;
}
}
Direction sortie de contrôle sur le canal 4
CH4 = ch [3] ;
Si (ch4 > = lo & & ch4 < = deadlo)
{
CH4 = carte (ch4, lo, deadlo, 0, 90) ;
}
ElseIf (ch4 == Centre)
{
CH4 = 90 ;
}
ElseIf (ch4 > = deadhi & & ch4 < = Salut)
{
CH4 = carte (ch4, deadhi, Salut, 90, 180) ;
}
Steer.Write(CH4) ;
Sorties de série
Serial.Print (« Ch1: ") ; Chaîne de texte d’affichage sur Serial Monitor pour distinguer les variables
Serial.Print (ch[0]) ; Impression de la valeur du canal 1
Serial.Print ("|") ;
Serial.Print ("Ch2:") ;
Serial.Print (ch[1]) ;
Serial.Print ("|") ;
Serial.Print (« Ch3: ") ;
Serial.Print (ch[2]) ;
Serial.Print ("|") ;
Serial.Print (« Ch4: ") ;
Serial.Print (ch[3]) ;
Serial.Print ("|") ;
Serial.Print ("Ch5:") ;
Serial.Print (ch[4]) ;
Serial.Print ("|") ;
Serial.Print ("Ch6:") ;
Serial.Print (ch[5]) ;
Serial.Print (& q uot; | ") ;
Serial.Print ("Ch7:") ;
Serial.Print (ch[6]) ;
Serial.Print ("|") ;
Serial.Print ("Ch8:") ;
Serial.println (ch[7]) ;
Serial.Print ("direction sortie:") ;
Serial.println (ch4) ;
}
Je vais supposer que le servo avait une dépression nerveuse et mis au point une graduation légère ? La fenêtre de terminal confirme que les roues tout simples tombé OFF de votre projet, maintenant ce qui ? Avant de vous engager votre servo ou Arduino à la maison de la noix, c’est quelque chose qui peut être contourné. Le problème est comment la bibliothèque de servo Arduino génère le signal de sortie requis. Il interrompt le programme principal pour maintenir l’impulsion de 50Hz et entrera en conflit avec la fonction pulsein corrompre valuesbeing lire. Les deux servo Bibliothèque et pulsein sont interruption fondée mais que l'on nous Regardez remplaçant ? J’ai choisi d’éliminer la bibliothèque servo après beaucoup de google-fu.