Arduino Battery Capacity Tester - V2.0

nik82av
Offline
Зарегистрирован: 20.03.2021

Всем привет

есть проект Arduino Battery Capacity Tester - V2.0, https://www.instructables.com/DIY-Arduino-Battery-Capacity-Tester-V20/

в проекте используется дислпей 0.96 ssd1306, а мне необходимо заменить его на 1.3 sh1106, установил все нужные библиотеки , в том числе U8glib.h но как именно правильно вписать  данные для sh1106  я не понимаю, прошу помощи!

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// ARDUINO BATTERY CAPACITY TESTER
//Version-2.0
//by deba168,INDIA // The code is taken from Hesam Moshiri ( https://www.pcbway.com/blog/technology/Battery_capacity_measurement_usin... )
//Dated : 20/10/2019
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#include<JC_Button.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


const float Low_BAT_level = 3.0;
//Current steps with a 3R load (R7)
const int Current [] = {0,110,210,300,390,490,580,680,770,870,960,1000};
const byte PWM_Pin = 10;
const byte Buzzer = 9;
const int BAT_Pin = A0;
int PWM_Value = 0;
unsigned long Capacity = 0;
int ADC_Value = 0;
float Vcc = 4.96 ; // Voltage of Arduino 5V pin ( Mesured by Multimeter )
float BAT_Voltage = 0;
float sample =0;
byte Hour = 0, Minute = 0, Second = 0;
bool calc = false, Done = false;
Button UP_Button(2, 25, false, true);
Button Down_Button(3, 25, false, true);


void setup () {
//
Serial.begin(9600);
pinMode(PWM_Pin, OUTPUT);
pinMode(Buzzer, OUTPUT);
analogWrite(PWM_Pin, PWM_Value);
UP_Button.begin();
Down_Button.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE); 
display.setTextSize(1);
display.setCursor(12,25);
display.print("Open Green Energy");
display.display();  
delay(3000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(2,15);
display.print("Adj Curr:"); 
display.setCursor(2,40);
display.print("UP/Down:");
display.print("0");
display.display();  
}

//************************* End of Setup function *******************************

void loop() {
  UP_Button.read();
  Down_Button.read();
if (UP_Button.wasReleased() && PWM_Value < 55 && calc == false)
 {
  PWM_Value = PWM_Value + 5; 
  analogWrite(PWM_Pin,PWM_Value);


  
  display.clearDisplay();
  display.setCursor(2,25);
  display.print("Curr:");   
  display.print(String(Current[PWM_Value / 5])+"mA");
  display.display();  
//  Serial.println(String(Current[PWM_Value / 5]));
 }
if (Down_Button.wasReleased() && PWM_Value > 1 && calc == false)
{ 
  PWM_Value = PWM_Value - 5; 
  analogWrite(PWM_Pin,PWM_Value); 
  display.clearDisplay();
  display.setCursor(2,25);
  display.print("Curr:");   
  display.print(String(Current[PWM_Value / 5])+"mA");
  display.display();  
 // Serial.println(String(Current[PWM_Value / 5]) + "mA");
  
} 

if (UP_Button.pressedFor (1000) && calc == false)
{
  digitalWrite(Buzzer, HIGH);
  delay(100);
  digitalWrite(Buzzer, LOW);
  display.clearDisplay();
  timerInterrupt(); 
   
  }
}

//************************* End of Loop function *******************************

void timerInterrupt(){
  calc = true;
  while (Done == false)  {
     Second ++;
    if (Second == 60)  {
      Second = 0;
      Minute ++;      
    }
    if (Minute == 60)  {
      Minute = 0;
      Hour ++;
    }

 //************ Measuring Battery Voltage ***********
  
  for(int i=0;i< 100;i++)
  {
   sample=sample+analogRead(BAT_Pin); //read the Battery voltage 
   delay (2);
  }
  sample=sample/100; 
  BAT_Voltage = sample * Vcc/ 1024.0; 
 
  //*********************************************

    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(20,5);
    display.print(String(Hour) + ":" + String(Minute) + ":" + String(Second));

    display.setTextSize(1);
    display.setCursor(0,25);
    display.print("Disch Curr: ");   
    display.print(String(Current[PWM_Value / 5])+"mA");
     
    
    display.setCursor(2,40);   
    display.print("Bat Volt:" + String(BAT_Voltage)+"V" );



    Capacity =  (Hour * 3600) + (Minute * 60) + Second;
    Capacity = (Capacity * Current[PWM_Value / 5]) / 3600;
    display.setCursor(2, 55);
    display.print("Capacity:" + String(Capacity) + "mAh");
    display.display();

    
    if (BAT_Voltage < Low_BAT_level)
    {
      Capacity =  (Hour * 3600) + (Minute * 60) + Second;
      Capacity = (Capacity * Current[PWM_Value / 5]) / 3600;
      display.clearDisplay(); 
      display.setTextSize(2);      
      display.setCursor(2,15);     
      display.print("Capacity:");
      display.setCursor(2,40);  
      display.print(String(Capacity) + "mAh");
      display.display();
      Done = true;
      PWM_Value = 0;
      analogWrite(PWM_Pin, PWM_Value);
      digitalWrite(Buzzer, HIGH);
      delay(100);
      digitalWrite(Buzzer, LOW);
      delay(100);
      digitalWrite(Buzzer, HIGH);
      delay(100);
      digitalWrite(Buzzer, LOW);
      delay(100);
    }
       delay(1000);
  } 
   
}

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

nik82av

В папке с библиотекой подпапка examples с кучей примеров. Есть и готовые инициализаторы для огромного количества дисплеев. Выбирайте нужный. Короче, если вам этого недостаточно, вам сложно помочь будет

nik82av
Offline
Зарегистрирован: 20.03.2021

я знаю какой дислпей выбрать, что дальше?, куда эти строчки прописывать? мне достаточно, чтобы ткнули пальцем, куда именно и что прописать, что бы заработал скетч, больше я ничего не прошу. я не программист и особого желания постигать это у меня нет, я врач по профессии и ваши слова примерно так же бы прозвучали у меня на приеме, "вот в нужной книге множество примеров заболеваний, если вам этого не достаточно, то вам сложно помочь с лечением"

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

nik82av пишет:

 я не программист и особого желания постигать это у меня нет,

Вы людей так-же лечите? Звонит вам человек: Николай Иваныч, у меня в правом боку колет и в спину отдает! А вы ему: не волнуйтесь Сергей Сергеич, набирайте таз теплой воды, берите острый нож, замахните стакан - сейчас будем удалять! Не кладите трубку, буду диктовать что делать...

Короче, либо наймите специалиста, либо выбросьте эту блажь из головы и занимайтесь чем умеете

nik82av
Offline
Зарегистрирован: 20.03.2021

бред......    не вам судить о том как я лечу, тем более по телефону, смешно даже это читать!, а о вашей "помощи" из вашего ответа, уже можно сделать выводы! нечего сказать или помочь, проходите мимо! Уверен, найдутся спецы которые искренне смогут помочь, без дурных намеков

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Зачем «оно» Вам, ТС? Это не работа и, как я понял, не хобби. Зачем мучиться? Мазохизм?)

nik82av
Offline
Зарегистрирован: 20.03.2021

радиоэлетроника хобби, ардуино лишь необходимость, чтобы повторить конструкцию...

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

nik82av пишет:
нечего сказать или помочь, проходите мимо! Уверен, найдутся спецы которые искренне смогут помочь, без дурных намеков

В марте вы уже третий или четвертый врач тут... Может у другие были, не знаю, они своей профессиональной принадлежностью свою лень и нежелание учиться не прикрывали

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

nik82av пишет:

радиоэлетроника хобби, ардуино лишь необходимость, чтобы повторить конструкцию...

Вам будет сильно проще сразу обратиться в платный раздел форума. Там вам минут за 15 ваш код поправят, вопрос то у вас пустяковый совсем. 

nik82av
Offline
Зарегистрирован: 20.03.2021

ни ленью , ни профессией ни прикрываюсь, где вы это прочли? я честно сказал, что изучать не буду, и попросил помочь, где и какую строку изменить, что бы дисплей заработал

nik82av
Offline
Зарегистрирован: 20.03.2021

так бы сразу и сказали.... про платный форум

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

45 строка - медитируйте до понимания....

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

mykaida пишет:

45 строка - медитируйте до понимания....

У него в коде i2c, а надо для SPI. Там дофига чего медитировать нужно будет

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nik82av пишет:

я знаю какой дислпей выбрать, что дальше?, куда эти строчки прописывать? мне достаточно, чтобы ткнули пальцем, куда именно и что прописать, что бы заработал скетч, больше я ничего не прошу. я не программист и особого желания постигать это у меня нет, я врач по профессии и ваши слова примерно так же бы прозвучали у меня на приеме, "вот в нужной книге множество примеров заболеваний, если вам этого не достаточно, то вам сложно помочь с лечением"

А Ваша просьба звучит примерно так, как если бы на приёме Вы услышали от пациента: "мне достаточно, чтобы ткнули пальцем, где именно и что разрезать, чтобы аппендикс не болел, больше я ничего не прошу, я не врач особого желания постигать это у меня нет. Скальпель у меня есть".

Вам не смешно?

Здесь помогают тем у кого есть особое желание постигать - тем, для кого это является увлечением. Если у Вас нет желания, обратитесь в коммерческий раздел, Вам сделают за небольшие деньги.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Rumata пишет:

У него в коде i2c, а надо для SPI. Там дофига чего медитировать нужно будет

Возможно... Схемы мы не видели. Но на 16-ю строку тоже стоит помедитировать...

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

mykaida пишет:

Возможно... Схемы мы не видели. Но на 16-ю строку тоже стоит помедитировать...

Как я понял самое первое сообщение, ТСу нужно заменить в один интерфейс дисплея на другой, но сам он это делать не хочет (ибо негоже Доктору всяким таким непотребством заниматься). Поэтому выложил исходный чужой код и ждет добровольцев, кто за него все сделает. 

genia1991
Offline
Зарегистрирован: 25.12.2019

автор. ну реально же самому разобраться. Все хотят результата и быстро. а загуглить и потестить и сделать самому никто не хочет. да уж

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Rumata пишет:

Поэтому выложил исходный чужой код и ждет добровольцев, кто за него все сделает. 

Как в том анекдоте:

 - Доктор, я умру?

- А как-же! :)