Stap 2: Code
De code is niet iets te schrijven home over. Het is vrij eenvoudig aangezien ik geen expert programmeur door een stuk van de verbeelding ben.
int moistureSensor = 0; // nail to read from is pin A0int moisture_val; const int redLEDPin = 3; // red LED connected to digital pin const int yellowLEDPin = 4; // yellow LED connected to digital pin const int greenLEDPin = 5; // green LED connected to digital pin const int blueLEDPin = 7; // blue LED connected to digital pin const int buttonPin = 9; // button connected to digital pin const int voltage = 8; // the voltage nail is on pin D8 int buttonState = 0; // initialise button as off void setup() { Serial.begin(9600); //open serial port pinMode(redLEDPin, OUTPUT); pinMode(greenLEDPin, OUTPUT); //set the LED pins as outputs pinMode(yellowLEDPin, OUTPUT); pinMode(blueLEDPin, OUTPUT); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { digitalWrite(blueLEDPin, HIGH); digitalWrite(voltage, HIGH); moisture_val = analogRead(moistureSensor); //read the value from the nail Serial.print("moisture level: "); // Serial.println( moisture_val ); //print moisture level 0-1024 delay(1000); // fake thinking... digitalWrite(blueLEDPin, LOW); if (moisture_val < 170) { digitalWrite(redLEDPin, HIGH); // if moisture is less than 190 have red on, others off digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, LOW); } if (moisture_val < 200 && moisture_val > 170) { digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, HIGH); // if moisture is less than 230 but over 190 have yellow on, others off digitalWrite(greenLEDPin, LOW); } if (moisture_val > 200 && moisture_val < 240) { digitalWrite(redLEDPin, LOW); digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, HIGH); // if moisture is over 230 and less than 300 have green on, others off } if (moisture_val > 280) { digitalWrite(redLEDPin, HIGH); // if moisture is over than 300 (possibly flooded) have red on, others off digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, LOW); } digitalWrite(voltage, LOW); // reset button state delay(5000); // wait 5 ses digitalWrite(redLEDPin, LOW); // if moisture is over than 300 (possibly flooded) have red on, others off digitalWrite(yellowLEDPin, LOW); digitalWrite(greenLEDPin, LOW); } }
Vanaf normaal beginnen we door pinnen aan etiketten toe te wijzen.
De void setup spul is gewoon de seriële poort te openen en een modus toewijzen aan de pennen van de LED.
De void lus is waar de goede dingen gebeurt. Als de knop is ingedrukt. We de blauwe LED licht schakelen van de spanning op één nagel, luiden naar de waarde van de andere nagel, wacht een beetje (om u te laten zien van de blauwe LED op) dan het uitschakelen van de spanning bij de nagel. Nu hebben we een resultaat van de nagel van de (niet-spanning) we kunnen het doorlopen van enkele als-instructies om te zien wat leidde tot licht.
Uiteraard hebt u sommige tests uitvoeren (door het openen van de seriële monitor) om te zien welke waarde is ideaal voor uw installatie. Dan beslissen welke waarden zijn zo-zo en slecht.
Zodra één LED het huidige resultaat is gebleken, en 5 seconden zijn verstreken, zal alle de LEDs gaan.
Het systeem is nu resetten en klaar voor een andere knop drukt.
Het probleem van de nagels roesten is nog steeds aanwezig, maar veel minder dan voorheen.