Показать сообщение отдельно
Старый 26.05.2016, 01:19   #415
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Итак- вот скетч.
Делеи менять на задержку реального временни желания нет, так как эта ардуина рулит только питанием и ни чем более. Чтоб вы себе долго не ломали голову почему мерию на двух пинах напругу- я контролирую сон и пробуждение планшета по напряжению подсветки экрана.

А на вопрос про засыпание и пробуждение планшета ответит сам скетч, но оно ни как не зависит от замера напряжения.
Так что вставил ключь или включил магнитолу- всё запустилось, вытащил, кондёр разрядился- всё потухло.
На зажигании 220,0 стоит, на магнитоле 22,0. 220 это примерно 4 секунды задержки.

PHP код:
unsigned long time0 0;
boolean OnceLoPow false;
unsigned int accpower 0;
int accpowercount 0;
int accpoweravg 1023;

void setup() {
  
//Arduino Pro-Micro
  //21 = A3
  //20 = A2
  //19 = A1
  //18 = A0
pinMode(18OUTPUT); //Tablet button
pinMode(19OUTPUT); //HUB power
pinMode(20INPUT);  //Tablet Screen action. Analog! If input >232 then screen on 
pinMode(21OUTPUT); //Tablet power
pinMode(10OUTPUT); //Tablet power supply low if car bat level low

pinMode(A7INPUT);   //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8INPUT);   //Radio input
pinMode(9INPUT);   //ACC input

digitalWrite(21LOW);
digitalWrite(19LOW);
digitalWrite(18LOW);
digitalWrite(10LOW);
}

void loop() {
WorkLoop();
  if ((
millis() - time0) > 100){
      if (
accpowercount == 60){
      
accpoweravg accpower 60;
      
accpowercount 0;
      
accpower 0;
      }
      else  
ACCLevel();
    
time0 millis();
  }
}

void WorkLoop(){
//_____________________________ON_______________________________
  
if (digitalRead(8) == HIGH || digitalRead(9) == HIGH){
    
OnceLoPow false;
    
digitalWrite(19LOW);
    
digitalWrite(21LOW);
    if(
analogRead(20) < 400) {
     
BtnClick(300);
      if (
analogRead(20) < 400BtnClick(3000);
    }
  }
//____________________STAND-BY or LO POWER_______________________  
   
else{
    if (
accpoweravg 541){
      
OnceLoPow false;
      if(
analogRead(20) > 400) {
        
BtnClick(300);
        
delay(4000);
      }
     
digitalWrite(19HIGH);
    }
    else{
      if (!
OnceLoPow){
       
digitalWrite(10HIGH);
       
delay(10000);
       
digitalWrite(10LOW);
       
OnceLoPow true;
      }
    
digitalWrite(19HIGH);
    
digitalWrite(21HIGH);  
    }
   }
}

void BtnClick(int Interval) {
    
digitalWrite(18HIGH);
    
delay(Interval);
    
digitalWrite(18LOW);
    
delay(1000);
  }

void ACCLevel() {
  
accpower accpower analogRead(A7);
  
accpowercount accpowercount 1;

T_r_D вне форума   Ответить с цитированием