26.05.2016, 16:55
|
#416
|
Гуру
Регистрация: 16.04.2014
Возраст: 40
Город: Gdynia
Регион: другой - для добавления сообщить ab
Сообщений: 2,548
|
Цитата:
Сообщение от T_r_D
Итак- вот скетч.
Делеи менять на задержку реального временни желания нет, так как эта ардуина рулит только питанием и ни чем более. Чтоб вы себе долго не ломали голову почему мерию на двух пинах напругу- я контролирую сон и пробуждение планшета по напряжению подсветки экрана.
А на вопрос про засыпание и пробуждение планшета ответит сам скетч, но оно ни как не зависит от замера напряжения.
Так что вставил ключь или включил магнитолу- всё запустилось, вытащил, кондёр разрядился- всё потухло.
На зажигании 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(18, OUTPUT); //Tablet button
pinMode(19, OUTPUT); //HUB power
pinMode(20, INPUT); //Tablet Screen action. Analog! If input >232 then screen on
pinMode(21, OUTPUT); //Tablet power
pinMode(10, OUTPUT); //Tablet power supply low if car bat level low
pinMode(A7, INPUT); //Car bat level (In bord PIN 6!!!) 541=11,91 **analogRead(A7) * (1.1 / 1023.0*20.50);
pinMode(8, INPUT); //Radio input
pinMode(9, INPUT); //ACC input
digitalWrite(21, LOW);
digitalWrite(19, LOW);
digitalWrite(18, LOW);
digitalWrite(10, LOW);
}
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(19, LOW);
digitalWrite(21, LOW);
if(analogRead(20) < 400) {
BtnClick(300);
if (analogRead(20) < 400) BtnClick(3000);
}
}
//____________________STAND-BY or LO POWER_______________________
else{
if (accpoweravg > 541){
OnceLoPow = false;
if(analogRead(20) > 400) {
BtnClick(300);
delay(4000);
}
digitalWrite(19, HIGH);
}
else{
if (!OnceLoPow){
digitalWrite(10, HIGH);
delay(10000);
digitalWrite(10, LOW);
OnceLoPow = true;
}
digitalWrite(19, HIGH);
digitalWrite(21, HIGH);
}
}
}
void BtnClick(int Interval) {
digitalWrite(18, HIGH);
delay(Interval);
digitalWrite(18, LOW);
delay(1000);
}
void ACCLevel() {
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
}
|
а зачем void ACCLevel() {
accpower = accpower + analogRead(A7);
accpowercount = accpowercount + 1;
вынесен в отдельную функцию?
PHP код:
WorkLoop();
if ((millis() - time0) > 100){
if (accpowercount == 60){
accpoweravg = accpower / 60;
accpowercount = 0;
accpower = 0;
}
else { (accpower = accpower + analogRead(A7)); (accpowercount = accpowercount + 1); };
time0 = millis();
}
}
А так можно?
|
|
|