AllSense: En elektronisk multiverktyg (4 / 6 steg)
Steg 4: Koden
Vi har all elektronik klar för användning nu, så låt oss lägga upp koden. Jag har lagt en länk som leder dig till en offentlig gist på GitHub där du kan se alla min kod som används i ett perfekt format, eftersom koden höll att få bytt och bud upp lite när jag direkt klistra in det som kod här, men jag har gjort det båda hållen. Likaledes bör man en ".ino" fil på detta steg som kommer att hämta som en IDE fil att öppna med Arduino koden program.
Som ni kanske har märkt, i början av koden inkludera jag några bibliotek, så jag har lagt upp alla de som jag använde och som inte kommer redan med Arduino programmet till detta steg. Om du inte vet hur man installerar bibliotek kolla denna Arduino handledning som förklarar det mycket väl: installera bibliotek
Den LiquidCrystal och Wire biblioteken finns redan på kommer med programmet.
Om du vill ändra tiden skärmen tänd för sedan ändra det värde som jag har att nå i den medan satsen på rad 60. Eller om du vill ändra tiden mellan varje uppdatering av mätvärdena ändrar delay() på rad 127.
Och om EMF läsning är alltid hög eller aldrig hög, då kan du fiol med om uttalanden start på linje 99, ändra värdena enligt problemet.
Läs kommentarerna för att förstå koden. Hela EMF delen blir ganska komplicerat, om du vill ha en mer detaljerad förklaring på denna del så kolla in denna länk: http://www.aaronalai.com/emf-detector
#include < dht.h > //Here vi inkluderar alla bibliotek som vi hämtat...
#include < BMP085.h >
#include < Wire.h >
#include < LiquidCrystal.h >
#define dht_apin A2 //saying vad pin-modulen DHT bör läsa info.
#define NUMREADINGS 15 / / här vi definierar NUMREADINGS som 15 datavärden; ta upp detta nummer för att öka data utjämning. Detta är för EMF.
int senseLimit = 15.
int probePin = A0; inställningen probePin som analoga 0.
int val = 0; läsa från probePin
DHT DHT;
BMP085 bmp;
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); Start lcd med stiften vi tilldelats.
CONST int inUse = 8. Detta kommer att vara stiftet där växeln tilt är kopplad till.
int jag = 0;
CONST int skärmen = 6;
int avläsningar [NUMREADINGS]; avläsningar från analog ingång
heltal index = 0; index för den aktuella behandlingen
int totala = 0; den löpande summan
int medelvärde = 0;
void setup() {
Ange den LCD antal kolumner och rader:
LCD.BEGIN (16, 2);
Serial.BEGIN(9600);
BMP.BEGIN();
Skriv ut ett meddelande till LCD-skärmen.
pinMode (inUse, ingång);
pinMode (skärm, OUTPUT);
för (int jag = 0; jag < NUMREADINGS; i ++)
avläsningar [i] = 0;
}
void loop() {
Jag = 0;
om (digitalRead(inUse) == hög) {
LCD.Clear();
digitalWrite (skärm, låg);
}
annat {
medan (jag < 30) {
digitalWrite (skärm, hög);
DHT.read11(dht_apin);
ställa markören till kolumn 0, linje 1
(Obs: linje 1 är den andra raden, sedan räknar börjar med 0):
Skriva ut ett budskap till andra raden av LCD
LCD.Clear();
lcd.setCursor (8, 0);
LCD.Print((bmp.readPressure() + 2000) / 100);
Serial.println(bmp.readPressure());
LCD.Print("HPA");
lcd.setCursor (1, 1);
LCD.Print(DHT.humidity);
Serial.println(DHT.humidity);
LCD.Print("%");
LCD.Print("");
LCD.Print(DHT.temperature);
LCD.Print("C");
Val = analogRead(probePin); ta en läsning från sonden
lcd.setCursor (0, 0);
LCD.Print("IE");
om (val > = 1) {/ / gör om behandlingen inte är noll,
Val = begränsa (val, 1, senseLimit); slå någon läsning högre än senseLimit i senseLimit värde
Val = karta (val, 1, senseLimit, 1, 1023); mappa om det begränsade värdet inom en 1 till 1023
totala-= avläsningar [index]; subtrahera den sista behandlingen
avläsningar [index] = val; läsa från sensorn
totala += avläsningar [index]; Lägg till läsningen av totala
index = (index + 1); avancera till nästa index
om (index > = NUMREADINGS) {/ / om vi är i slutet av kedjan...
index = 0; .. .wrap runt till början
}
genomsnittliga = totalt / NUMREADINGS;
Serial.println(Average);
om (genomsnitt > 150) {//checking värdet av den genomsnittliga och skriva ut en ">" om det är betydande.
LCD.Print(">");
}
om (genomsnitt > 350) {//checking igen, men denna gång för ett högre värde.
LCD.Print(">");
}
om (genomsnitt > 550) {/ / och så vidare...
LCD.Print(">");
}
om (genomsnittliga > 750) {
LCD.Print(">");
}
om (genomsnittliga > 950) {
LCD.Print(">");
}
}
Jag + = 1;
Delay(1000);
}
}
}