Ви не увійшли.
analogValue = analogRead(0);
см. код qwone
const int battery_pin = A0 ; //нога измеритель батареек
voltage = analogRead(battery_pin) * 5 / 1023;
important - A0
Спасибо!
Нет . У вас проблемы в схемотехнике. 1 - на батарейку надо дать нагрузку. Хотя бы 1 кОм паралельно батарейке. 2 - бреадбоард тоже не лучший вариант. Там тоже контакты гуляют.
ПС: Из фундаментального. На батарейке не стабильное напряжение. Внутреняя ЭДС, внутренее сопротивление. Нужна какая-то наргузка. А аналоговый вход Ардуины такой нагрузки не дает. Тем более там АЦП одно и оно переключается по аналоговым выходам.
Ваш код для моей цепи написан был? Просто он ещё хуже работает, светодиоды тоже рандомно моргают, но тестер уже не работает. Если не так, то подскажите что исправить нужно в цепи?
С другом посидели над кодом методом проб вот что самое лучшее получилось родить. Вместо батареек использовал сетевой адаптер , чтоб удобнее было, поменял диапозоны напряжений . Светодиоды опять же ведут себя надекватно, горит то один, то два, то три, но они мерцают, дребезжат. На адаптере напряжение при установленном 4.5 В выдает, 4.61 вольт, но сам тестер врубает как видите желтый до 4.92, т.е. в самой цепи гуляет какое-то напряжение где-то в 305 вольт.
Начинаю подозревать, что это косяк моей ардуины.. Ещё раз прошу посмотреть, правильно ли я собрал цепь, а то может я упускаю нечто простейшее фундаментальное , т.к. это первая схема которую я собрал не по картинке.
// Проект 6 - Тестер для одноэлементных батареек
#define newLED 2 //зеленый светодиод "новая"
#define okLED 4 //желтый cветодиод "норма"
#define oldLED 6 //красный светодиод "старая"
int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;
void setup()
{
pinMode(newLED, OUTPUT);
pinMode(okLED, OUTPUT);
pinMode(oldLED, OUTPUT);
}
void loop()
{
analogValue = analogRead(0);
voltage = 0.0048*analogValue;
if (voltage >=1 && voltage <= 4) //напряжение от 1 до 4 - горит красный
{
digitalWrite(newLED, HIGH);
digitalWrite(okLED, LOW);
digitalWrite(oldLED, LOW);
}
else if (voltage > 4 && voltage <= 4.92) //напряжение от 4 до 4.92 - горит красный
{
digitalWrite(newLED, LOW);
digitalWrite(okLED, HIGH);
digitalWrite(oldLED, LOW);
//delay(ledDelay);
//digitalWrite(okLED, LOW);
}
else if (voltage > 4.92)
{
digitalWrite(okLED, LOW);
digitalWrite(newLED, LOW);
digitalWrite(oldLED, HIGH);
}
else
{
digitalWrite(oldLED, LOW); //если напряжение меньше 1 вольта - ничего не горит
digitalWrite(okLED, LOW); // но по факту они по прежнему горят
digitalWrite(newLED, LOW);
}
}
Ну-ну. Учебники они такие. Они до добра не доведут.
/*Тестер для одноэлементных батареек
тестируемая батарейка -> AO;
GND->GND
светодиод зеленый ->2 (led_green_pin) 1 горит 0 нет
GND->GND
светодиод желтый ->4 (led_yellow_pin) 1 горит 0 нет
GND->GND
светодиод красный ->6 (led_red_pin) 1 горит 0 нет
*/
const int battery_pin = A0 ; //нога измеритель батареек
float voltage = 0;
const int led_green_pin = 2 ; //зеленый светодиод "новая"
const int led_yellow_pin = 4 ; //желтый cветодиод "норма"
const int led_red_pin = 6 ; //красный светодиод "старая"
void setup() {
pinMode(led_green_pin, OUTPUT);
pinMode(led_yellow_pin, OUTPUT);
pinMode(led_red_pin, OUTPUT);
}
void loop() {
digitalWrite(led_green_pin, 0);
digitalWrite(led_yellow_pin, 0);
digitalWrite(led_red_pin, 0);
delay(1000);
voltage = analogRead(battery_pin) * 5 / 1023;
if (voltage >= 1.6) digitalWrite(led_green_pin, 1);
if (voltage < 1.6 && voltage > 1.4) digitalWrite(led_yellow_pin, 1);
if (voltage <= 1.4) digitalWrite(led_red_pin, 1);
delay(1000);
}
Правильно ли я собрал схему?
Тупо все по книжке сделал, только цепь по схеме,картинок не было , но как оказалось и тут может быть какой-то косяк. Светодиоды горят поочередно, как-то рандомно. При тесте батареек вроде реагируют, и то не в 100% случаях и всегда с какой-то небольшой задержкей.
Что делаю не так?
// Проект 6 - Тестер для одноэлементных батареек
#define newLED 2 //зеленый светодиод "новая"
#define okLED 4 //желтый cветодиод "норма"
#define oldLED 6 //красный светодиод "старая"
int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;
void setup()
{
pinMode(newLED, OUTPUT);
pinMode(okLED, OUTPUT);
pinMode(oldLED, OUTPUT);
}
void loop()
{
analogValue = analogRead(0);
voltage = 0.0048*analogValue;
if (voltage >= 1.6)
{
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW);
}
else if (voltage < 1.6 && voltage > 1.4)
{
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW);
}
else if (voltage <= 1.4)
{
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW);
}
}
Попробовал от себя добавить значение low всем LEDам в setup, но потом удалил т.к. ничего не дало?
Что не так?