Sol Mate (4 / 6 steg)
Steg 4: Hela strukturen för Arduino koden
#include
#include "rgb_lcd.h" #include #include
rgb_lcd lcd;
CONST int vit [] = {255, 255, 255}; CONST int röd [] = {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; flyta alltemp [8] = {0, 0, 0, 0, 0, 0, 0, 0}; flyta allIR [8] = {0, 0, 0, 0, 0, 0, 0, 0}; flyta alluv [8] = {0, 0, 0, 0, 0, 0, 0, 0}; int pt = 0; flyta acctemp = 0; flyta accIR = 0; flyta accUV = 0; flyta exponering = 0; CONST int displayrate = 40; CONST int burnrate = 170;
int maxuv = 0; int maxtemp = 0; osignerade långa starttime = 0; osignerade långa endtime = 0;
void setup() {Serial.begin(9600); lcd.begin (16, 2); lcd.setRGB (vit [0], vit [1], white[2]), lcd.setCursor (0, 0), lcd.print ("Hej, jag är din"), lcd.setCursor (0, 1), lcd.print ("Solmate:)" "); pinMode (pinBut, ingång); digitalWrite (pinBut, hög); pinMode (pinBuz, produktionen); statecount = 0; Delay(4000); setTan(); }
void clrRow(int row) {lcd.setCursor (0, rad); lcd.print("");}
void setTan() {lcd.setRGB (vit [0], vit [1], white[2]), lcd.setCursor (0, 0), lcd.print ("Set din tan %!"), clrRow(1); medan (! digitalRead(pinBut)) {int rotread = analogRead(pinRot); tanperc = rotread * 100 / 1015; tantarg = rotread * burnrate / 1015; char perc [] = "100%"; int targ = tanperc; för (int jag = 2; jag > = 0; i--) {om (jag < 2 & & targ == 0) {perc [i] = "";} annat {perc [i] = "0" + targ % 10.} targ = 10;} lcd.setCursor (6 , 1); LCD.Print(PERC); Delay(100); } exponering = 0; samtidigt (digitalRead(pinBut)); LCD.Clear(); StartTime = millis(); maxuv = 0; maxtemp = 0; }
booleska readfile () {//Get frågeresultatet från filen röding data [16]. Fil * fp; fp = fopen ("/tmp/tantweet.txt", "r"); IF(fp!=null) {fgets (data, 16, fp); fclose(fp); om (data [0] == '1') returnerar sant, annars returnerar falskt;} annat {return false;}}
void tanned() {endtime = millis(); lcd.setRGB (röd [0], röd [1], red[2]); clrRow(0); clrRow(1); lcd.setCursor (0, 0), lcd.print ("perfekt garvade!"); digitalWrite (pinBuz, hög); delay(500); digitalWrite (pinBuz, låg); delay(500); digitalWrite (pinBuz, hög); delay(500); digitalWrite (pinBuz, låg); delay(500); digitalWrite (pinBuz, hög); delay(500); digitalWrite (pinBuz, låg); delay(500); lcd.setRGB (vit [0], vit [1], white[2]), clrRow(0), lcd.setCursor (0 , 0); LCD.Print ("Tweet det?"); int tweet = 0; medan (! digitalRead(pinBut)) {//select ja eller nej int rotread = analogRead(pinRot); lcd.setCursor (0, 1), om (rotread < 512) {lcd.print ("> Ja Nej"); Tweet = 1; } annat {lcd.print ("ja > nr"); Tweet = 0; } delay(100); } medan (digitalRead(pinBut)); om (tweet == 1) {sträng 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"; Excute frågan och få resultatet system(cmd.buffer); LCD.Clear(); om (readFile()) {lcd.setRGB (vit [0], vit [1], white[2]); lcd.clear(); lcd.setCursor (0, 0); lcd.print("Tweeted!");} annat {lcd.setRGB (vit [0], vit [1], white[2]); lcd.clear(); lcd.setCursor (0, 0), lcd.print ("kunde inte"), lcd.setCursor (0, 1); lcd.print("tweet...");} Delay(4000); } }
void loop() {Serial.println("hello"); //check om färdig om (exponering > = tantarg) {tanned(); setTan();} annat {//check om återställa om (digitalRead(pinBut)) {medan (digitalRead(pinBut)); setTan();}}
Uppdatera alla sensor ingångar //temperature int tempread = analogRead(pinTemp); flyta res = (float)(1023-tempread) * 10000/tempread; float temp = 1 / (log (res/10000) /tempref+1/298.15)-273.15; Temp = temp * 1.8 + 32. acctemp += temp - alltemp [pt]; alltemp [pt] = härda; Serial.Print("Temp:"); Serial.println(temp); UV float uv = analogRead(pinUV); UV = uv * 4980.0/1023.0 * 0.307 / 200.0; accUV += uv - alluv [pt]; alluv [pt] = uv; Serial.Print("UV:"); Serial.println(accUV/8); PT = (pt < 7? pt + 1:0); utgången data varje 0,5 sek om (statecount % 10 == 0) {om (acctemp/8 > maxtemp) {maxtemp = (acctemp/8);} om (accUV/8 > maxuv) {maxuv = (accUV/8);} om (statecount < displayrate) {//temperature char buffer [16]; sprintf (buffert, "Temp %0.1f F", acctemp/8); clrRow(0); lcd.setCursor (2, 0); lcd.print(buffer);} annat {//UV char buffer [16]; sprintf (buffert, "UV-Index %0.1f", accUV/8); clrRow(0); lcd.setCursor (2 , 0); LCD.Print(buffer); } //update tan lcd.setCursor (0, 1); för (int jag = 0; jag < 16 * exponering / tantarg; i ++) {lcd.print("X");}} exponering += uv/600; statecount = (statecount < 2 * displayrate? statecount + 1: 0); Delay(100); }