arduino2/Arduino_Lawnmower/STOP_FUNCTION_TEST/STOP_FUNCTION_TEST.ino
2020-11-06 13:17:55 +01:00

86 lines
3.2 KiB
C++

// STOP_FUNCTION_TEST
// Read sensors
int Sensepinleft = 4 ; // Define PIN A4 for left Sensor
int Sensepinright = 3 ; // Define PIN A3 for right Sensor
int Sensevalueleft; // Define variable for sensorvalue left
int Sensevalueright; // Define variable for sensorvalue right
// Status LED
int Ledbat = 3; // Define PIN 3 for digital output red LED
int Ledstart = 4; // Define PIN 4 for digital output green LED
// Read Battery voltage
int Voltpin = 0; // Define PIN A0 for reading battery voltage
float Volt; // Define variable for voltage
float Voltvalue; // Define variable for avarage voltage calculation
float Voltlow = 10; // Define variable and setup for minimum operation voltage
int I; // Define variable for LOOP counter
int I_bat = 20; // Define variable for battery status (low or high)
void setup() { // Setup
// Print
Serial.begin(9600); // Start the serial communication
// Status LEDs
pinMode(Ledbat, OUTPUT); // Define Ledbat PIN as OUTPUT
pinMode(Ledstart, OUTPUT); // Define Ledstart PIN as OUTPUT
}
void loop() { // Start main programm
digitalWrite(Ledstart, HIGH); // Switch green status LED ON
// Read Voltpin for 10 times and calculate average voltvalue
Voltvalue = 0;
for (I = 0;I<10; I++){
Volt = analogRead(Voltpin);
Voltvalue = Voltvalue + Volt;
delay(10);
Serial.println(I); // Print LOOP counter
}
Voltvalue = Voltvalue / 10; // calculate average value
Voltvalue = Voltvalue * 0.02765; // 0.02765 is factor for voltagedevider 22K / 4,7K
Serial.print("Battery voltage = "); // Print text without linefeed
Serial.println(Voltvalue); // Print avarage voltvalue with linefeed
Serial.println(" "); // Print nothing as a linefeed
if (Voltvalue < Voltlow) { // Make dicission: Batteryvoltage O.K or low
I_bat = 1; // If battery voltage is low set status 1
Stop(); // If battery is low go to “Stop()” function
}
delay(500); // Wait 500ms
}
/////////FUNCTIONS///////////
void Stop() { // Stop the ARDUMOWER if battery is low
digitalWrite(Ledstart, LOW); // Switch green status LED OFF
while (I_bat < 10) // As long as batterystatus is low, stay here
{
// flash red status LED
digitalWrite(Ledbat, HIGH);
delay(100);
digitalWrite(Ledbat, LOW);
delay(500);
Serial.println("Low Battery"); // Print "Low battery" message
}
}