Étape 4: Structure entière du code Arduino
#include
#include « rgb_lcd.h » #include #include
rgb_lcd lcd ;
const int blanc [] = {255, 255, 255} ; const int rouge [] = {255, 0, 0} ;
const int pinRot = A0 ; const int pinTemp = A1 ; const int pinIR = A2 ; const int pinUV = A3 ;
const int pinBut = 7 ; const int pinBuz = 8 ;
const int tempref = 3975 ;
int statecount = 0 ; int tanperc = 0 ; int tantarg = 0 ; flotteur alltemp [8] = {0, 0, 0, 0, 0, 0, 0, 0} ; flotteur allIR [8] = {0, 0, 0, 0, 0, 0, 0, 0} ; char martinsebastien1970 [8] = {0, 0, 0, 0, 0, 0, 0, 0} ; pt int = 0 ; float acctemp = 0 ; flotteur accIR = 0 ; float accUV = 0 ; exposition de flotter = 0 ; const int displayrate = 40 ; const int burnrate = 170 ;
int maxuv = 0 ; maxtemp int = 0 ; unsigned long starttime = 0 ; unsigned long endtime = 0 ;
void setup() {Serial.begin(9600), lcd.begin (16, 2); lcd.setRGB (blanc [0], [1], white[2]) ; lcd.setCursor (0, 0); lcd.print ("Bonjour, je suis votre"); lcd.setCursor (0, 1); lcd.print ("Solmate : date") ; pinMode (pinBut, entrée) ; digitalWrite (pinBut, HIGH) ; pinMode (pinBuz, sortie) ; statecount = 0 ; Delay(4000) ; setTan() ; }
void clrRow(int row) {lcd.setCursor (0, row); lcd.print("");}
Sub setTan() {lcd.setRGB (blanc [0], [1], white[2]) lcd.setCursor (0, 0); lcd.print ("Set votre tan %!"); clrRow(1) ; tandis que (! digitalRead(pinBut)) {int rotread = analogRead(pinRot) ; tanperc = rotread * 100 / 1015 ; tantarg = rotread * répercussions / 1015 ; char perc [] = "100 %"; int targ = tanperc ; pour (int j’ai = 2; J’ai > = 0; i--) {si (j’ai < 2 & & targ == 0) {perc [i] = ' ';} else {perc [i] = '0' + targ % 10;} targ / = 10;} lcd.setCursor (6 , 1); LCD.Print(PERC) ; Delay(100) ; } exposition = 0 ; tandis que (digitalRead(pinBut)) ; LCD.Clear() ; StartTime = millis() ; maxuv = 0 ; maxtemp = 0 ; }
readFile() booléens {//Get le résultat de la requête de données de fichier char [16] ; FICHIER * fp ; FP = fopen (« /tmp/tantweet.txt », « r ») ; if(FP!=null) {fgets (données, 16, fp); fclose(fp) ; if (data [0] == « 1 ») return true ; sinon retourne false;} else {return false;}}
void tanned() {endtime = millis() ; lcd.setRGB (rouge [0], rouge [1], red[2]) clrRow(0) ; clrRow(1) ; lcd.setCursor (0, 0); lcd.print ("parfaitement bronzée!"); digitalWrite (pinBuz, HIGH); delay(500) ; digitalWrite (pinBuz, basse); delay(500) ; digitalWrite (pinBuz, HIGH); delay(500) ; digitalWrite (pinBuz, basse); delay(500) ; digitalWrite (pinBuz, HIGH); delay(500) ; digitalWrite (pinBuz, basse); delay(500) ; lcd.setRGB (blanc [0], [1], white[2]) ; clrRow(0) ; lcd.setCursor (0 , 0); LCD.Print ("Tweet it?") ; tweet int = 0 ; tandis que (! digitalRead(pinBut)) {//select oui ou non int rotread = analogRead(pinRot) ; lcd.setCursor (0, 1); if (rotread < 512) {lcd.print ("> Oui non") ; Tweet = 1 ; } else {lcd.print ("Yes > non") ; Tweet = 0 ; } delay(100) ; } tout en (digitalRead(pinBut)) ; Si (tweet == 1) {String cmd = « python /home/root/test7.py -m » ; CMD = cmd + tanperc + « -e » ; CMD = cmd + ((endtime-starttime)/60000) + "-t" ; CMD = cmd + maxtemp + « -u » ; CMD = cmd + maxuv + "> /tmp/tantweet.txt" ; Exécuter la requête et obtenir le résultat system(cmd.buffer) ; LCD.Clear() ; Si (readFile()) {lcd.setRGB (blanc [0], [1], white[2]) ; lcd.clear() ; lcd.setCursor (0, 0); lcd.print("Tweeted!");} else {lcd.setRGB (blanc [0], [1], white[2]) ; lcd.clear() ; lcd.setCursor (0, 0); lcd.print ("Failed to"); lcd.setCursor (0, 1); lcd.print("tweet...");} Delay(4000) ; } }
void loop() {Serial.println("hello") ; //check si fini si (exposition > = tantarg) {tanned() ; setTan();} else {//check si réinitialiser si (digitalRead(pinBut)) {while (digitalRead(pinBut)) ; setTan();}}
mise à jour de tous les capteurs entrées //temperature int tempread = analogRead(pinTemp) ; flotteur res = (float)(1023-tempread) * 10000/tempread ; temp de flotteur = 1 / (log (res/10000) /tempref+1/298.15) -273,15 ; Temp = temp * 1.8 + 32 ; acctemp += temp - alltemp [pt] ; Alltemp [pt] = temp ; Serial.Print("Temp:") ; Serial.println(temp) ; Flotteur de UV uv = analogRead(pinUV) ; UV = uv * 4980.0/1023.0 * 0,307 / 200,0 ; accUV += uv - martinsebastien1970 [pt] ; martinsebastien1970 [pt] = uv ; Serial.Print("UV:") ; Serial.println(accUV/8) ; PT = (pt < 7? pt + 1:0) ; sortie de données toutes les 0,5 secondes si (statecount % 10 == 0) {si (acctemp/8 > maxtemp) {maxtemp = (acctemp/8);} si (accUV/8 > maxuv) {maxuv = (accUV/8);} si (statecount < displayrate) {tampon de char //temperature [16]; sprintf (buffer, « Temp %0.1f F », acctemp/8); clrRow(0) ; lcd.setCursor (2, 0); lcd.print(buffer);} else {tampon de char //UV [16]; sprintf (buffer, « Indice UV %0.1f », accUV/8); clrRow(0) ; lcd.setCursor (2 , 0); LCD.Print(buffer) ; } //update tan lcd.setCursor (0, 1) ; pour (int i = 0; i < 16 * exposition / tantarg; i ++) {lcd.print("X");}} exposition += uv/600 ; statecount = (statecount < 2 * displayrate? statecount + 1: 0) ; Delay(100) ; }