Étape 4: Code d’Upload
- Se connecter à l’ONU à un PC via USB. Copiez le code ci-dessous dans une esquisse vide à l’aide de l’IDE Arduino et transférez-le au Conseil d’administration.
- Vous devrez importer les ST7735 et les bibliothèques de GFX Adafruit qui se trouvent ici : http://learn.adafruit.com/1-8-tft-display/graphics-library
- Débranchez le câble USB et joindre la fiche de 2,1 mm pour prise d’alimentation de l’ONU.
- Vous avez maintenant un travail de balayage télémètre à ultrasons. Jouer avec certaines variables de dans le code pour modifier la vitesse du servo et les résultats sont tracés de façon à l’écran.
Copiez le code suivant traite les données d’un télémètre à ultrasons monté sur un servo
Le servo va balayer 180 degrés
Données provenant du télémètre à ultrasons sont tracé sur l’écran
Pour les petits groupes, vous pouvez utiliser toutes (4 ou) 5 broches
#define sclk 4
#define mosi 5
#define cs 6
#define dc 7
#define rst 8 / / vous pouvez également vous connecter cela à la réinitialisation de l’Arduino
Utilisez ces broches pour le bouclier !
#define sclk 13
#define mosi 11
#define cs 10
#define dc 8
#define rst 0 / / vous pouvez également vous connecter cela à la réinitialisation de l’Arduino
#include < Adafruit_GFX.h > / / bibliothèque graphique de base
#include < Adafruit_ST7735.h > / / spécifiques au matériel bibliothèque
#include < math.h >
#include < SPI.h >
#include < Servo.h >
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
Tft Adafruit_ST7735 = Adafruit_ST7735 (cs, dc, rst) ;
flotteur p = 3,1415926 ;
uint16_t x = 0 ;
uint16_t y = 0 ;
angle de flotteur = 0 ;
float angle2 = 0 ;
flotteur angle1 = 0 ;
int vers l’avant = 1 ;
capteur int = 0 ;
double distance = 0 ;
uint16_t px = 0 ;
uint16_t py = 0 ;
double échelle =. 4 ;
int i = 0 ;
double vitesse = 0,02 ;
float offset = 10 ;
int count = 0 ;
int pos = 0 ;
Servo servo ;
int servopin = 9 ;
void setup(void) {}
Fixer le servo et réglé sur la position centrale
servo.Attach(servopin) ;
Delay(500) ;
servo.Write(90) ;
Delay(500) ;
servo.Detach() ; Détacher avant d’envoyer des commandes d’affichage (interface SPI utilise même minuteries sont bibliothèque Servo)
tft.initR(INITR_BLACKTAB) ; initialiser un onglet de puce, noire ST7735S
S’enveloppe de plastique de votre TFT dispose d’un onglet rouge, utiliser la syntaxe suivante :
tft.initR(INITR_REDTAB) ; initialiser un onglet de puce, rouge ST7735R
S’enveloppe de plastique de votre TFT dispose d’un onglet vert, utiliser la syntaxe suivante :
tft.initR(INITR_GREENTAB) ; initialiser un onglet de puce, vert ST7735R
Faire un écran noir et ensuite imprimer le fond (texte et arcs)
tft.fillScreen(ST7735_BLACK) ;
tft.setCursor (0, 152) ;
TFT.Print (« 1m 2m 3M ") ;
tft.setCursor (0, 0) ;
TFT.Print("Scanning") ;
drawcircles() ;
angle1 = atan((float)tft.width()/((tft.height()/2.0)-offset)) ;
angle2 = M_PI - 1 ;
}
void loop() {}
Calculer la position des servo (servo est 0-180degrees tandis que la variable de l’angle est exprimé en radians)
POS = 180.0-180.0*(angle/p) ;
distance = analogRead(sensor) ;
ATACH servo au début de chaque boucle
servo.Attach(servopin) ;
Delay(15) ;
servo.Write(POS) ;
Copiez le code suivant convertit cooridantes polaire du capteur en coordonnées x-y
Ceci permet de déterminer quels pixels pour dessiner les données du capteur sur
Le code varie légèrement selon le quadrant de l’angle
if(angle<angle1) {}
x = (uint16_t) (tft.height()/2-offset) * tan(angle) ;
y = décalage (uint16_t) ;
PX = échelle * distance * sin(angle) ;
py = tft.height () / 2 - échelle * distance * cos(angle) ;
} ElseIf (angle <(M_PI/2.0)) {}
y = (uint16_t) ((tft.height()) / 2 - tft.width() / tan(angle)) ;
x = tft.width() ;
PX = échelle * distance * sin(angle) ;
py = tft.height () / 2 - échelle * distance * cos(angle) ;
} else if(angle<angle2) {}
y = (uint16_t) ((tft.height()) / 2 + tft.width() / tan(M_PI-angle)) ;
x = tft.width() ;
PX = échelle * distance * sin(M_PI-angle) ;
py = tft.height () / 2 + échelle * distance * cos(M_PI-angle) ;
} else if(angle>angle2) {}
x = (uint16_t) (tft.height()/2-offset) * tan(M_PI-angle) ;
y = (uint16_t) (tft.height()-offset) ;
PX = échelle * distance * sin(M_PI-angle) ;
py = tft.height () / 2 + échelle * distance * cos(M_PI-angle) ;
}
Détacher le servo lorsqu’il a atteint sa position pour le cycle et avant d’écrire des commandes d’affichage
Delay(15) ;
servo.Detach() ;
Tracer une ligne qui représente la direction que pointe du capteur
tft.drawLine (0, tft.height () / 2, x, y, ST7735_GREEN) ;
tft.drawLine (0, tft.height () / 2, x, y, ST7735_BLACK) ;
Dessiner un cercle pour le capteur
tft.fillCircle (px, py, 1, ST7735_RED) ;
Comme objets dessinés par le calcul intensif, les arcs verts ne sont tirées chaque 30 cycles
Si (comte > = 30) {}
Count = 0 ;
drawcircles() ;
TFT.Print(".") ;
}
Count ++ ;
Ce code modifie la direction que le servo tourne lorsqu’il atteint la fin de chaque balayage (0 ou 180 degrés)
Le code inclut redessiner le texte et les arcs que l’écran est effacé à la fin de chaque balayage
{if(Forward==0)}
angle = angle-Vitesse ;
Si (angle < = 0) {}
angle = 0 ;
Forward = 1 ;
tft.fillScreen(ST7735_BLACK) ;
tft.setCursor (0, 152) ;
TFT.Print (« 1m 2m 3M ") ;
tft.setCursor (0, 0) ;
TFT.Print("Scanning") ;
Count = 0 ;
drawcircles() ;
}
} else {}
angle = angle + Vitesse ;
Si (angle > = M_PI) {}
angle = M_PI ;
Forward = 0 ;
tft.fillScreen(ST7735_BLACK) ;
tft.setCursor (0, 152) ;
TFT.Print (« 1m 2m 3M ") ;
tft.setCursor (0, 0) ;
TFT.Print("Scanning") ;
Count = 0 ;
drawcircles() ;
}
}
}
Une fonction pour dessiner des cercles
void drawcircles() {}
tft.drawCircle (0, tft.height () / 2, tft.height () / 4-20, ST7735_GREEN) ;
tft.drawCircle (0, tft.height () / 2, tft.height () / 2-20, ST7735_GREEN) ;
tft.drawCircle (0, tft.height () / 2, tft.width ()-20, ST7735_GREEN) ;
}