2 LEDD проблема
- Войдите на сайт для отправки комментариев
Ср, 19/12/2018 - 23:09
Здравствуйте
Могу включить каждый отдельно, но когда включаю диод на БД14 второй не включается.
#include "EmonLib.h" // Include Emon Library EnergyMonitor emon1; // Create an instance #include <LiquidCrystal.h> LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5); const int ResetPin = PB12; const int numReadings = 50; int LED = PB15; int LED2 = PB14; int readings[numReadings]; // the readings from the analog input int readIndex = 0; // the index of the current reading int total = 0; // the running total int average = 0; // the average int inputPin = PA7; int analogInput = PB0; int value = 0; float vout = 0.0; float vin = 0.0; float Vo; float Irms = 0.0; //float Vo; float Io; void setup() { // initialize all the readings to 0: for (int thisReading = 0; thisReading < numReadings; thisReading++) { readings[thisReading] = 0; } pinMode(PB15, OUTPUT); // LED pinMode(PB14, OUTPUT); // LED2 pinMode(ResetPin, INPUT_PULLDOWN); pinMode(PA7, INPUT); // AC pinMode(PB0, INPUT_ANALOG); //DC lcd.begin(16, 2); //emon1.voltage(PA7, 234.26, 1.7); // Voltage: input pin, calibration, phase_shift emon1.current(PA7, 2.8); } void loop() { emon1.calcVI(20, 2000); if (digitalRead(ResetPin) == HIGH) { Io = emon1.Irms; } else { { // subtract the last reading: total = total - readings[readIndex]; // read from the sensor: readings[readIndex] = analogRead(inputPin); // add the reading to the total: total = total + readings[readIndex]; // advance to the next position in the array: readIndex = readIndex + 1; } // if we're at the end of the array... if (readIndex >= numReadings) { // ...wrap around to the beginning: readIndex = 0; } } // calculate the average: average = total / numReadings; // send it to the computer as ASCII digits Serial.println(average); delay(1); if (digitalRead(ResetPin) == HIGH) //(digitalRead(ResetPin) == HIGH) { Vo = vin; } else { // read the value at analog input value = analogRead(analogInput); vout = (value * 3.3) / 4190.0; // 4200 vin = vout; if (vin < 0.09) vin = 0.0; //statement to quash undesired reading ! } float Irms = emon1.Irms; //if (Irms - Vo <= 0.90 && Irms - Vo >= 0.100) // delta 0.3 if (Irms - Io <= 0.90 && Irms - Io >= 0.100) // AC { digitalWrite(PB15, HIGH); LED = 1; } else { digitalWrite(PB15, LOW); LED = 0; } if (vin - Vo <= 0.4 && vin - Vo >= 0.1) // DC // if(vin-Vo<= 1.20 && vin-Vo >= 1.00) { digitalWrite(PB14, HIGH); LED2 = 1; } else { digitalWrite(PB14, LOW); LED2 = 0; } /////////////////////////////////////////////////////////////////////////////// lcd.setCursor(0, 1); lcd.print(vin); lcd.setCursor(5, 1); lcd.print("o"); lcd.print(Vo, 2); lcd.setCursor(11, 1); lcd.print (vin - Vo); //delay(500); lcd.setCursor(0, 0); lcd.print(Irms); lcd.setCursor(5, 0); lcd.print("o"); lcd.print(Io, 2); lcd.setCursor(11, 0); lcd.print (Irms - Io); }
А можно расшивровать "когда включаю диод на БД14 второй не включается." ?
Исправление
БД14 =
LED2 = PB14;
Ну я догадался, что БД14 это PB14. Вопросы
- Каким образом происходит " включаю диод на БД14" ?
- Почему при этом должен включаться второй? Может просто условие в 109 строчке не выполняется?
Добавь между 107 и 109 строкой
И посмотри в сериал мониторе какие там значения.
эти значения я вижу на LCD
Ну, и какие они?
Они как у обычного вольтметра , работают как надо, проблема только с LED.
Значения vin - Vo в диапазоне 0.1 - 0.4 есть?
Исправь 109 строчку на
сообщение #9 = ничего не изменилось