Mauritius
Offline
Jr. Member
Karma: 2
Posts: 93
Learning Never Ends . . .
|
 |
« on: January 04, 2013, 09:11:42 am » |
Hello to all,
I just modified some codes concerning soil moisture measurement, i already implement the hardware part as well and incorporate an LCD screen display 16 x 2, to print the soil moisture in percentage. I added a push button in my sketch to enable myself to swap menu on the LCD display. For the time being it displays the soil moisture % and the other menu display hello world, later on i shall make it display some reading for light intensity.
My issue is before i implemented this swap menu function the reading of % moisture would display correctly and the value will be updated after a delay of 1000.
Later when i add this menu swap function my value of percentage do not update until i swap menu to 'Hello World" and back to soilMoist % reading.
Any comments please. My apologies for the code format as i am encountering an error while copying for forum.
The code is as follows: ------------------------------------------------------------------------------------------------------------ [ code ] /* Soil Moisture measurement v0.1 Alternate DC current circuit Callibrated at 100% with water (H20) Started by Mike Rice, October 14, 2009 Modified by M.A. de Pablo, October 17, 2009 Modified and new adaptation by Tazlim Goolap, January 1, 2013 Circuit: To connect two Copper Wire and a 100 KOhms resistor as shown: digital 13---* | \ / \ R1(100K Ohms) / | | analog 1----* | | *----> nail 1 *----> nail 2 | | R2 (100 Ohms) | digital 12---* */
/*--------------------------------------------------------------------*/
/* Declaration of I/Os */
#define moisture_input 1 // Analog Input pin 1 connected to collect Moisture reading. #define dcSource_top 13 // Power source 5V top connected to digitsl pin 13 #define dcSource_bottom 12 // Power Source 5V bottom connected to digital pin 12 #define SwapButton 4 // Push Button connected to digital pin 4. Purpose : To sawp menu on LCD screen.
/*--------------------------------------------------------------------*/
/* Library Code to be included */
#include <LiquidCrystal.h> // include the library code:
/*--------------------------------------------------------------------*/
/* Declaration Of Variables */
int moisture; // Analogical value obtained from the experiment double PercentMoisture; // Varible to store % Percentage Soil Moisture Value int val; // Variable for reading the pin status to compare with buttonState int val2; // Variable to read the debounced status int buttonState; // Variable to hold the last button state int lcdMode = 0; // Variable to swap between LCD menu.
/*--------------------------------------------------------------------*/
/* LCD Connections: rs (LCD pin 4) to Arduino pin 11 rw (LCD pin 5) to Arduino pin 10 enable (LCD pin 6) to Arduino pin 9 LCD pin 15 to Arduino pin 4 LCD pins d4, d5, d6, d7 to Arduino pins 8, 7, 6, 5 */
LiquidCrystal lcd(11, 10, 9, 8, 7, 6, 5); // Initialize the library with the numbers of the interface pins
void setup (void) { Serial.begin(115200); // Set up Serial Communication at 9600 bps. pinMode(SwapButton,INPUT); // Define Digital Pin as Input buttonState = digitalRead(SwapButton); // Read the initial state and save into buttonState.
lcd.begin(16,2); // Rows, columns. use 16,2 for a 16x2 LCD. lcd.clear(); // Start with a blank screen lcd.setCursor(0,0); // Set cursor to column 0, row 0 }
int SoilMoisture(){ int reading; // Variable to hold value from Moisture input. // Set driver pins to outputs pinMode(dcSource_top,OUTPUT); pinMode(dcSource_bottom,OUTPUT);
// Drive a current through the divider in one direction digitalWrite(dcSource_top,LOW); digitalWrite(dcSource_bottom,HIGH);
// Wait a moment for capacitance effects to settle delay(1000);
// Take a reading reading=analogRead(moisture_input);
// Reverse the current digitalWrite(dcSource_top,HIGH); digitalWrite(dcSource_bottom,LOW);
// Give as much time in 'reverse' as in 'forward' delay(1000);
// stop the current digitalWrite(dcSource_top,LOW);
return reading; }
void LCDprintSoilMoist(void) {
//lcd.clear(); lcd.print("SoilMoisture:"); lcd.setCursor(0,1); lcd.print("Percentge:"); lcd.print(PercentMoisture); lcd.setCursor(16,1); lcd.print("%"); }
void LCDprintMenu (void) { lcd.clear(); lcd.setCursor (0,0); lcd.print("Hello World"); }
/* int SwapMenu (){ // Push Button connected to PIN 4 by Pull up resistor Circuit for swapping Menu on LCD } */
void loop (void) { val = digitalRead(SwapButton); // Read Input value and store in val. delay(10); val2 = digitalRead(SwapButton); // Read Input again to check for bounces if (val == val2){ if(val != buttonState){ if (val == LOW){ if (lcdMode == 0){ lcdMode = 1; LCDprintMenu(); } else{ lcdMode = 0; LCDprintSoilMoist(); } } } buttonState = val; // Save the new state in the Variable for monitoring further button press (Continuous program loop). } delay (1000); moisture=SoilMoisture(); // assign the result of SoilMoisture() to the global variable 'moisture' Serial.print("Soil moisture: "); Serial.print(moisture); // print the analogical measurement of the experiment PercentMoisture = ((moisture/950.00)*100.00); // Derivation of Soil Moisture in % Serial.print(" Percentage Soil Moisture = "); Serial.print(PercentMoisture); Serial.println(); delay(1000);
Serial.print ("buttonState"); Serial.println (buttonState); }
[ /code ]
__________________________________________________________________________________
|