Показать сообщение отдельно
Старый 20.06.2016, 22:49   #481
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
По умолчанию

Ну в общем-то вот окончательный вариант:
PHP код:
unsigned long time0 0;
unsigned long stage_timer 0;
int in_progress 0;
int stage 0;
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() {
//Измеряем среднее значение напряжения автомобиля.
  
if ((millis() - time0) > 1000){
      if (
accpowercount == 60){
      
accpoweravg accpower 60;
      
accpowercount 0;
      
accpower 0;
      }
      else{
      
accpower accpower analogRead(A7);
      
accpowercount accpowercount 1;
      }
    
time0 millis();
  }

 if (
in_progress == 0){
   if ((
digitalRead(8) == HIGH || digitalRead(9) == HIGH) &&  analogRead(20) < 400mag_car_on(); //Если магнитола или зажигание включено, а питания на подсветке нету.
   
if (digitalRead(8) == LOW && digitalRead(9) == LOW && analogRead(20) > 400power_off();       //Если магнитола выключена и зажигание выключено, но подсветка работает.
   
if (digitalRead(8) == LOW && digitalRead(9) == LOW && accpoweravg 541halt();               //Если магнитола и зажигание выключены и сел акумулятор, а отключение не выполнялось.
 
}
 else {
   if (
in_progress == 1mag_car_on();
   if (
in_progress == 2power_off();
   if (
in_progress == 3halt();
 } 
 
}

void mag_car_on(){
  
in_progress 1;
  
digitalWrite(19LOW);
  
digitalWrite(21LOW);
//Клик кнопкой 300мс, после этого ждём 2с и на стадии 2 проверяем включился ли планшет,
//и если нет, то зажимаем кнопку на 3с, потом ждём 2с.
  
if (stage == 0) {
  
digitalWrite(18HIGH);
  
stage 1;
  
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 300) {
  
digitalWrite(18LOW);
  
stage 2;
  
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 2000) {
    if (
analogRead(20) > 400) {
      
stage 0;
      
in_progress 0;
    }
    else {
      
digitalWrite(18HIGH);
      
stage 3;
      
stage_timer millis();
    }
  }  
  if (
stage == && (millis() - stage_timer) > 3000) {
    
digitalWrite(18LOW);
    
stage 4;
    
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 2000) {
    
stage 0;
    
in_progress 0
  }
}
 
void power_off(){
  
in_progress 2;
  if (
stage == 0) {
    
digitalWrite(18HIGH);
    
stage 1;
    
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 300) {
    
digitalWrite(18LOW);
    
stage 2;
    
stage_timer millis();
  }
  if (
stage == && (millis() - stage_timer) > 5000) {
    
digitalWrite(19HIGH);
    if (
analogRead(20) < 400){
      
stage 0;
      
in_progress 0;
    }
    else {
      
digitalWrite(10HIGH);
      
stage 3;
      
stage_timer millis();
    }
  }
  if (
stage == && (millis() - stage_timer) > 2000) {
    
digitalWrite(10LOW);
    
stage 4;
    
stage_timer millis();
  } 
  if (
stage == && (millis() - stage_timer) > 30000) {
    
stage 0;
    
in_progress 0;
  }
}
 
void halt(){
  
in_progress 3;
  
digitalWrite(19HIGH);
  
digitalWrite(21HIGH);
  
in_progress 0

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