Делаю контролер нагрева питающийся от липо батареи
подскажите как сделать чтобы при достижении низкого напряжения отключать ардуину (отправить спать)  пытался сделать но ничего не выходит.
Код собирал из кусочков, получилось что получилось, главное работает всё кроме контроля низкого заряда батареи.
Собираю все на ардуине нано
Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в то же самое если посмотреть на выход с ШИМ периоды квадратные но разной высоты. 
- Код: Выделить всё
- //Voltage monitor website https://create.arduino.cc/projecthub/nickthegreek82/diy-voltmeter-with-arduino-and-a-nokia-5110-display-cc5092?ref=platform&ref_id=424_trending___&offset=49
 
 int counter = 0;
 int switchPin = 2;
 int PWM_SET;
 
 #define MIN_VOLT = 9.0;
 
 //----PWM_ADJ------
 int POT_PIN = A7;
 //----PWM_ADJ_END------
 
 
 //-------led outputs
 int LED_GREEN = 5;
 int LED_BLUE = 6;
 int LED_RED = 7;
 
 float VOLT_MIN;
 
 float voltage = 0.0;
 int sensorPin = A1;
 float sensorValue = 0.0f;
 String voltageString ="0.0";
 int stringLength = 0;
 
 
 float vout = 0.0;
 float vin = 0.0;
 float R1 = 83000.0;
 float R2 = 18000.0;
 
 
 
 
 void setup() {
 // put your setup code here, to run once:
 Serial.begin(9600);
 pinMode(switchPin, INPUT);
 pinMode(LED_GREEN, OUTPUT);
 pinMode(LED_BLUE, OUTPUT);
 pinMode(LED_RED, OUTPUT);
 
 }
 
 void loop() {
 //----провека напряжения на входеб если ниже 9В то ничего не делать.
 // for (float i = 0; i < voltage; ++i){
 //  if (VOLT_MIN < voltage)
 //   continue;
 
 
 //-------------pwm------- https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
 pinMode(3, OUTPUT);
 // pinMode(11, OUTPUT);
 
 
 
 TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
 TCCR2B = _BV(CS22);
 // OCR2A = 0; //pin 11
 OCR2B = (PWM_SET);
 
 /*
 
 * Output A frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
 Output A duty cycle: 180 / 255 = 70.6%
 Output B frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
 Output B duty cycle: 50 / 255 = 19.6%
 
 
 Timer output Arduino output  Chip pin  Pin name
 OC0A  6
 OC0B  5
 OC1A  9
 OC1B  10
 OC2A  11
 OC2B  3
 */
 // --------------pwm end
 
 //---------------------------------pwm adjusts
 
 int PWM_ADJUST, PWM_ADJ;
 
 PWM_ADJ = analogRead(POT_PIN);
 
 PWM_ADJUST = PWM_ADJ / 20;
 
 //---button
 
 //Handle input
 int switchVal = digitalRead(switchPin);
 if(switchVal == LOW)
 {
 delay(500);
 counter ++;
 //Reset count if over max mode number
 if(counter == 7)
 {
 counter = 0;
 }
 }
 
 else
 
 //Change mode
 switch (counter) {
 case 1:
 PWM_SET = 0;
 digitalWrite(LED_GREEN, LOW);
 digitalWrite(LED_BLUE, LOW);
 digitalWrite(LED_RED, LOW);
 break;
 
 case 2:
 PWM_SET = (50);
 digitalWrite(LED_GREEN, 255);
 digitalWrite(LED_BLUE, 0);
 digitalWrite(LED_RED, 0);
 break;
 
 case 3:
 PWM_SET = (100);
 digitalWrite(LED_GREEN, 255);
 digitalWrite(LED_BLUE, 255);
 digitalWrite(LED_RED, 0);
 break;
 
 case 4:
 PWM_SET = (150);
 digitalWrite(LED_GREEN, 0);
 digitalWrite(LED_BLUE, 255);
 digitalWrite(LED_RED, 0);
 break;
 
 case 5:
 PWM_SET = (200);
 digitalWrite(LED_GREEN, 0);
 digitalWrite(LED_BLUE, 255);
 digitalWrite(LED_RED, 255);
 break;
 
 case 6:
 PWM_SET = 254;
 digitalWrite(LED_GREEN, 0);
 digitalWrite(LED_BLUE, 0);
 digitalWrite(LED_RED, 255);
 break;
 
 }
 
 
 
 //----button end
 
 
 
 voltage = readVoltage();
 
 Serial.println(voltage);
 
 
 Serial.println(PWM_SET);
 
 voltageString = String(voltage,1);
 
 stringLength = voltageString.length();
 displayVoltage(stringLength);
 delay(100);
 }
 //}
 
 
 float readVoltage()
 {
 
 sensorValue = analogRead(sensorPin);
 vout = (sensorValue * 5.0) / 1024.0;
 vin = vout / (R2/(R1+R2));
 return vin;
 }
 
 
 void displayVoltage(int length)
 {
 // switch(length)
 {
 // case 3:  Serial.print(voltageString,14,19); break;
 //  case 4:  Serial.print(voltageString,2,19); break;
 //  default:  Serial.print(voltageString,2,19); break;
 }
 
 }
 
 
 
 
 
		
			