Étape 28 : Le Code
Ce code peut être porté vers IDE Arduino de Energia et fonctionne parfaitement sur les deux plates-formes.
Vous pouvez télécharger energia ici : http://energia.nu/download/
CHANGER le x et le D AND THE nm VARIABLES à MATCH vos résultats de la dernière étape ! Sinon votre étalonnage sera mon étalonnage pour ma machine, pas vôtre. Il échoue alors à fournir des données précises.
Le Code ci-dessous est à utiliser avec une carte SD et le flux en direct.
#include « SPI.h » #include « pfatfs.h » #define cs_pin 10 / / puce pin select #define read_buffer 128 / / taille (en octets) de lecture de la mémoire tampon unsignedshortint bw, br; / /, i ; tampon de char [read_buffer] ; int rc ; DIR dir ; / * Objet répertoire * / fno FILINFO ; / * Objet d’informations de fichier * ///I/O Belowconstint StepperMotor = P2_4 ; constint StepperDirection = P2_5 ; constint capteurs [] = {P1_3} ; Ajouter plus de capteurs ici! \//Constants pour étalonnage ci-dessous! constdouble nm = 405 ; Source de Calibration connue Frequencyconstdouble x = 33,28 ; Distance du point supérieur à la « Screen » constdouble D = 48,78 ; distance à la « Screen » constdouble degreesperstep = 18 ; Degrés par étape pour le stepper motorconstdouble micropas = 8 ; Cela vous permet de déterminer la fréquence à laquelle l’échantillon à prélever (inverse microstep) constdouble mmPerRotation = 2,76 ; Il s’agit de la distance entre les deux dents de la broche qui déplace le capteur vers le haut et downconstdouble heightofTray = 38.00 ; Sous estimer cela un starty bitconstdouble = 32,35 ; constboolean carte SD = false ; Jouer avec le dessous à vos propres risques! ///constdouble stepsperrotation = 360/degreesperstep ; constdouble microstepsuntilend = heightofTray/mmPerRotation * stepsperrotation * (micropas) ; constdouble d = (nm*1e-9)/sin(atan(x/D)) ; const double d = 720e-9; //const double x = (nm * 1e-9 * d); int wavelengthvIntensity [sizeof (capteurs) -1] ; datafile int = 0 ; double cnt = 0 ; char buf [30] ; double tempnm = 0 ; double currenty = 0 ; constdouble zéro = starty-x ; char de ksk = « 0 » ; voidconfigurationsérie.println()série; Série.print (« a échoué avec rc = ") ; Serial Serial Série.println (« écriture scan Data") ; Delay(100) ; BW = 0 ; pour (int i = 0; j’ai < sizeof(wavelengthvIntensity);i++) {sprintf (buf, "% lu, «, wavelengthvIntensity[i]) ; int StringLength = strlen(buf) ; RC = FatFs.write (buf, StringLength, & bw) ; Si (rc ||! p.c.) break ; } sprintf (buf, « %lu\n\r », tempnm) ; int StringLength = strlen(buf) ; RC = FatFs.write (buf, StringLength, & bw) ; Si die(rc) (rc) ; RC = FatFs.write (0, 0, & bw) ; Finaliser l’écriture si die(rc) (rc) ; RC = FatFs.close() ; Fermer die(rc) IPSI (rc) ; } voidbouclesériesériesériesériesérie
Le Code ci-dessous est le Code pour le spectromètre : Live Mode uniquement.
Stepping motor Belowconstint d’e/s = P2_4 ; constint StepperDirection = P2_5 ; constint capteurs [] = {P1_3} ; Ajouter plus de capteurs ici! \//Constants pour étalonnage ci-dessous! constdouble nm = 405 ; Source de Calibration connue Frequencyconstdouble x = 37,65 ; Distance du point supérieur à la « Screen » constdouble D = 50.00 ; distance à la « Screen » constdouble degreesperstep = 18 ; Degrés par étape pour le stepper motorconstdouble micropas = 8 ; Cela vous permet de déterminer la fréquence à laquelle l’échantillon à prélever (inverse microstep) constdouble mmPerRotation = 2,76 ; Il s’agit de la distance entre les deux dents de la broche qui déplace le capteur vers le haut et downconstdouble heightofTray = 38.00 ; Sous estimer cela un starty bitconstdouble = 32,35 ; Jouer avec le dessous à vos propres risques! ///constdouble stepsperrotation = 360/degreesperstep ; constdouble microstepsuntilend = heightofTray/mmPerRotation * stepsperrotation * (micropas) ; constdouble d = (nm*1e-9)/sin(atan(x/D)) ; const double d = 720e-9; //const double x = (nm * 1e-9 * d); int wavelengthvIntensity [sizeof (capteurs) -1] ; datafile int = 0 ; double cnt = 0 ; char buf [30] ; double tempnm = 0 ; double currenty = 0 ; constdouble zéro = starty-x ; char de ksk = « 0 » ; annulerle programme d’installationsérie.begin(9600) ; Ah, j’ai oublié d’ajouter ceci en particulier grâce à le tommy_goh1997 pour repérer le bug ! pinMode (Stepping motor, sortie) ; pinMode (StepperDirection, sortie) ; digitalWrite (Stepping motor, faible) ; digitalWrite (StepperDirection, basse) ; pour (int j’ai = 0; j’ai < sizeof(wavelengthvIntensity);i++) {pinMode (entrée de capteurs [i]);} pour (int j’ai = 0; j’ai < microstepsuntilend; i ++) {digitalWrite (Stepping motor, élevée); delayMicroseconds(250) ; digitalWrite (Stepping motor, LOW); delayMicroseconds(250);} digitalWrite (StepperDirection, élevée) ; } voidbouclesériesériesériesériesérie