Код (C++): long time4 = 0; void setup() { pinMode(12, OUTPUT); Serial.begin(38400); } void loop(){ if (millis() >= (time4+5000)) { // если прошло 5 секунд то проверяем напряжение int sensor = analogRead(A4); if ((sensor) < 522) digitalWrite(12, HIGH); if ((sensor) > 522) digitalWrite(12, LOW); Serial.print("voltag-"); Serial.println(sensor); time4=millis(); // засекаем время } } В общем хочу сделать измерение напряжения и при падении напряжения на определённое значение, начнёт мигать светодиод (это в идеале), а он просто загорается, и гаснет после того, как напряжение начинает повышаться от заданного значения (например 2,8 вольт) ВОПРОС как мне сделать так, что бы мигало при падении напряжения и не перестовала мигать после 10 циклов мигания с паузой по 0,5 сек??? А этот код немного не то что я хотел(((
Самое простое - поставить мигающий светодиод. )) Ну или как то так: Код (C++): long time4 = 0; int led = 12; void setup() { pinMode(led, OUTPUT); Serial.begin(38400); } void loop(){ if (millis() >= (time4+5000)) { // если прошло 5 секунд то проверяем напряжение int sensor = analogRead(A4); Serial.print("voltag-"); Serial.println(sensor); time4=millis(); // засекаем время if ((sensor) < 522) Blink(); } } void Blink(){ for(int i=0;i<10;i++){ digitalWrite(led, HIGH); delay(250); digitalWrite(led, LOW); delay(250);} }
А как ещё сделать так что бы из единиц в вольты переводил..ну например, я знаю, что весь диапазон измерения 0-1024, а 512 соответствует 2,5.....это нужно типа примерчика написать,что бы он сам решал и в мониторе порта сразу вольты показывал..?? Мне в принципе не принципиально что бы вольты показывал, ну вот хочу посмотреть сколько вольт!)
Код (C++): const byte maxVoltage = 5; // максимально возможное измеряемое напряжение float voltage = map(analogRead(A4),0,1024,0,maxVoltage*100)/100.0; Serial.println(voltage);
Код (C++): unsigned long time4 = 0; const byte ledPin = 12; const byte maxVoltage =5;// максимально возможное измеряемое напряжение void setup() { pinMode(ledPin, OUTPUT); Serial.begin(38400); } void loop() { if(millis()>=(time4+5000)) // если прошло 5 секунд то проверяем напряжение { float voltage = map(analogRead(A4),0,1024,0,maxVoltage*100)/100.0; Serial.print("Voltage:"); Serial.println(voltage); time4=millis();// засекаем время if(voltage<2.5) blink(); } } void blink() { for(int i=0;i<10;i++) { digitalWrite(ledPin, HIGH); delay(250); digitalWrite(ledPin, LOW); delay(250);} }
Здравствуй ещё раз!) Помощ нужна твоя!!! Я решил залить этот код на Attiny13 но он туда не помещаетс!!!!(((( я видел что то делают с кодом и он меньше весит!!! Как мне его уменьшить то ??? там что то с #define связано а сам код вот этот Код (C++): unsigned long time4 = 0; const byte ledPin = 0; const byte maxVoltage =5;// максимально возможное измеряемое напряжение void setup() { pinMode(ledPin, OUTPUT); } void loop() { if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение { float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0; time4=millis();// засекаем время if(voltage<2.8) blink(); } } void blink() { for(int i=0;i<10;i++) { digitalWrite(ledPin, HIGH); delay(250); digitalWrite(ledPin, LOW); delay(250);} }
А вот эта строка if(millis()>=(time4+5000)) // если прошло 5 секунд то проверяем напряжение зачем?В смысле измерять напряжение только через 5 минут а "по кругу"-непрерывно не?
Можно и по кругу, что бы замерялось напряжение аккумулятора...и если напряжение будет (по задумке) меньше 2,8 вольта то начинается мигалка, простая мигалка, 10 раз помигал и хорошь ) вот это и нужно как то уместить
Нет!!! не на А4.) мне нужно что бы провод батарейки присоединялся к А1, а выход мигалки на D0 ! Может что то подправить нужно в скетче моём??
Нет проблем вход читаем float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0; В сетапе pinMode(0, OUTPUT); А строчку if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение тупо закоментируем (или удалим?) вот так //if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение Код (C++): const byte maxVoltage =5;// максимально возможное измеряемое напряжение void setup() { pinMode(0, OUTPUT);// пин0 как выход } void loop() { float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0; //измерили V if(voltage<2.8) blink(); //если напряжение меньше 2.8 вольт то мигаем 10 раз } void blink() { for(int i=0;i<10;i++) { digitalWrite(0, HIGH);// пин 0 вкл delay(250); digitalWrite(0, LOW);// пин 0 выкл delay(250);} }