• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Wskazania poziomu lpg w aucie + zegarek
#41
Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);  

#include <Wire.h>
#include "RTClib.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 };
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 };

RTC_DS1307 rtc;
   
 int rok ;
 byte miesiac ;
 byte dzien ;
 byte godzina ;
 byte minuta ;
 byte sekunda ;
 long pm ;
 long zm ;
 byte Lcd = 2;
 int POM[10];
 byte x = 0 ;
 long Pm = 0 ;
 byte Srednia = 0 ;
 byte LPG = 0 ;
 byte s = 0 ;
 
void setup () {

 lcd.begin(20,4);  
 lcd.backlight();            
 lcd.clear();
 
 sensors.begin();
 
 sensors.setResolution(Termo1, 12);
 sensors.setResolution(Termo2, 12);
 
 Serial.begin(9600);
 
 if (! rtc.begin()) {
   Serial.println("Couldn't find RTC");
   while (1);
 }

 if (! rtc.isrunning()) {
   Serial.println("RTC is NOT running!");
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
   rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
 }  
}

void loop () {
 
 sensors.requestTemperatures();
 
 long cm = millis();
 
  if ( cm - zm > 10000 ){
   
     Lcd ++ ;lcd.clear();zm = cm;
     if (Lcd > 1)Lcd = 1;
   
   }
 
 DateTime now = rtc.now();
   
   rok = now.year(),DEC;
   miesiac = now.month(),DEC;
   dzien = now.day(),DEC;
   godzina = now.hour(),DEC;
   minuta = now.minute(),DEC;
   sekunda = now.second(),DEC;
     
   if ( cm - pm >= 500 ){

    int pom = analogRead(A0)/4;
    POM[x] = pom ;
    x = x + 1 ;
    pm = cm ;
 }

if ( x > 9 ){
     
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
     POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;
     x = 0;}
 
LPG = map( Srednia,42,232,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika

switch(Lcd){

case 1:
   
     lcd.setCursor(5, 0);
     lcd.print(zero(dzien));
     lcd.print('/');
     lcd.print(zero(miesiac));
     lcd.print("/");
     lcd.print(rok);
     lcd.print("  ");

     lcd.setCursor(6, 1);
     lcd.print(zero(godzina));
     lcd.print(":");
     lcd.print(zero(minuta));
     lcd.print(":");
     lcd.print(zero(sekunda));
     lcd.print("  ");

     lcd.setCursor(0, 2);
     lcd.print("LPG PALIWO");
     lcd.setCursor(16, 2);
     lcd.print(sto(LPG));
     lcd.print('%');
     lcd.setCursor(0, 3);
     lcd.print('E');
     lcd.setCursor(19, 3);
     lcd.print('F');
     
     s = map(LPG,0,100,1,19);
     
     for ( int i = 1 ; i < s ; i++){
     lcd.setCursor(i, 3);
     lcd.print((char)255);
     }          
 break;
 

  }    
}

int zero(int number) {
 
   if (number < 10){lcd.print('0');}
   return number;}

int sto(int number) {
 
   if (number < 100){lcd.print(' ');}
   if (number < 10){lcd.print(' ');}
   return number;}
   

Termometry wywaliłem bo nie umiem ogarnąć tematu. Zrobiłem sobie pod nowy ekran. Nie umiem aby do końca wywalić przełączania ekranów i co jakiś czas ekran przygasa jakby miał się przełączyć. finalnie raczej zostaje tak jak jest.

Mogę prosić jedynie o wyczyszczenie programu z tego przełączania ekranów do końca?
 
Odpowiedź
#42
Zerknę jutro mam nocki
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#43
Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);  

#include <Wire.h>
#include "RTClib.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 };
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 };

RTC_DS1307 rtc;
   
 int rok ;
 byte miesiac ;
 byte dzien ;
 byte godzina ;
 byte minuta ;
 byte sekunda ;
 long pm ;
 long zm ;
 byte Lcd = 2;
 int POM[10];
 byte x = 0 ;
 long Pm = 0 ;
 byte Srednia = 0 ;
 byte LPG = 0 ;
 byte s = 0 ;
 
void setup () {

 lcd.begin(20,4);  
 lcd.backlight();            
 lcd.clear();
 
 sensors.begin();
 
 sensors.setResolution(Termo1, 12);
 sensors.setResolution(Termo2, 12);
 
 Serial.begin(9600);
 
 if (! rtc.begin()) {
   Serial.println("Couldn't find RTC");
   while (1);
 }

 if (! rtc.isrunning()) {
   Serial.println("RTC is NOT running!");
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
   rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
 }  
}

void loop () {
 
 sensors.requestTemperatures();
 
 long cm = millis();
 
  if ( cm - zm > 10000 ){
   
     Lcd ++ ;lcd.clear();zm = cm;
     if (Lcd > 1)Lcd = 1;
   
   }
 
 DateTime now = rtc.now();
   
   rok = now.year(),DEC;
   miesiac = now.month(),DEC;
   dzien = now.day(),DEC;
   godzina = now.hour(),DEC;
   minuta = now.minute(),DEC;
   sekunda = now.second(),DEC;
     
   if ( cm - pm >= 500 ){

    int pom = analogRead(A0)/4;
    POM[x] = pom ;
    x = x + 1 ;
    pm = cm ;
 }

if ( x > 9 ){
     
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
     POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;
     x = 0;}
 
LPG = map( Srednia,42,232,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika


   
     lcd.setCursor(5, 0);
     lcd.print(zero(dzien));
     lcd.print('/');
     lcd.print(zero(miesiac));
     lcd.print("/");
     lcd.print(rok);
     lcd.print("  ");

     lcd.setCursor(6, 1);
     lcd.print(zero(godzina));
     lcd.print(":");
     lcd.print(zero(minuta));
     lcd.print(":");
     lcd.print(zero(sekunda));
     lcd.print("  ");

     lcd.setCursor(0, 2);
     lcd.print("LPG PALIWO");
     lcd.setCursor(16, 2);
     lcd.print(sto(LPG));
     lcd.print('%');
     lcd.setCursor(0, 3);
     lcd.print('E');
     lcd.setCursor(19, 3);
     lcd.print('F');
     
     s = map(LPG,0,100,1,19);
     
     for ( int i = 1 ; i < s ; i++){
     lcd.setCursor(i, 3);
     lcd.print((char)255);
     }          

 

   
}

int zero(int number) {
 
   if (number < 10){lcd.print('0');}
   return number;}

int sto(int number) {
 
   if (number < 100){lcd.print(' ');}
   if (number < 10){lcd.print(' ');}
   return number;}
   

W sumie to chyba wywaliłem ekrany.  Ale czasem jakby ekran cały mignie. Nie wiem czy tak ma być czy to jeszcze gdzieś coś.
 
Odpowiedź
#44
ahaa a termometr próbowałem ale nic z tego. Pokazuje aby 0C i 32F. Adresu nie umie odszukać. jutro jadę po taki wodoodporny. Może on ruszy. A obok zegarka w narożniku aby będzie temperatura w środku z jednego termometru o ile uda się podłączyć.
 
Odpowiedź
#45
       
A tak to wyglada
 
Odpowiedź
#46
No i pytanie teraz odnośnie podłączenia czujnika poziomu płynu. Kupiłem czujnik oporowy do poziomu płynu w zbiorniczku wyrównawczym. Czy da się to zrobić tak żeby podłączyć go np. pod napięcie 3.3v albo 5V i pod wejście analogowe i po uruchomieniu przez ileś czasu w razie wystąpienia braku płynu wyświetla informację o jego braku?
Np. w pierwszej linii zamiast daty przez 10sek od uruchomienia pojawia się napis "brak płynu chłodniczego" i potem znika i tyle.
Miernikiem sprawdzałem i przy braku obwód się po prostu zamyka bo miernik pika.
Z czego mierzy on poziom ale mnie nie interesuje ilość a jedynie informacja o braku płynu.
 
Odpowiedź
#47
No i kilka dni w aucie i widzę, że zresetowało się. Zegarek przestawił datę i godzinę.
A da się zrobić 2 przyciski i ustawianie daty z godziną żeby nie rozbierać auta do podłączenia arduino?
I taki drugi temat.
Wartość dla czujnika gazu w butli to np. 20-220. Ale wskaźnik czasem skacze i pokazuje więcej jak 220 przez co na wyświetlaczu zapala się 254% i górnej linii zapalają się te kwadraciki. Czy da się zrobić, że powyżej 220 jest po prostu 100% i ani wartość ani kwadraciki nie będą pokazywać więcej skali jak 100%?
Odnośnie skrajnie niskiej wartości jest to samo i paradoksalnie też wyświetla 254%.
 
Odpowiedź
#48
x = analogRead(A0);
if (x < 20)x = 20;
if (x >220)x = 220;
lpg = x;

( ogranicznik min i max )

da się z tym zegarkiem ale to sporo pisania a chwilowo czasu nie mam , podrzucę w nocy przykład
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#49
To przestań. Jak dużo roboty to wymienię baterię na nową i może to coś zmieni.
 
Odpowiedź
#50
Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);  

#include <Wire.h>
#include "RTClib.h"

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 }; 
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 }; 

RTC_DS1307 rtc;
    
  int rok ;
  byte miesiac ;
  byte dzien ;
  byte godzina ;
  byte minuta ;
  byte sekunda ;
  long pm ;
  long zm ;
  byte Lcd = 2;
  int POM[10];
  byte x = 0 ;
  long Pm = 0 ;
  byte Srednia = 0 ;
  byte LPG = 0 ;
  byte s = 0 ;
  
void setup () {

  lcd.begin(20,4);  
  lcd.backlight();            
  lcd.clear();
  
  sensors.begin();
  
  sensors.setResolution(Termo1, 12);
  sensors.setResolution(Termo2, 12);
  
  Serial.begin(9600);
  
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
  }  
}

void loop () {
  
  sensors.requestTemperatures();
  
  long cm = millis();
  
   if ( cm - zm > 10000 ){
     
      Lcd ++ ;lcd.clear();zm = cm;
      if (Lcd > 1)Lcd = 1;
     
    }
  
  DateTime now = rtc.now();
    
    rok = now.year(),DEC;
    miesiac = now.month(),DEC;
    dzien = now.day(),DEC;
    godzina = now.hour(),DEC;
    minuta = now.minute(),DEC;
    sekunda = now.second(),DEC;
      
    if ( cm - pm >= 500 ){

     int pom = analogRead(A0)/4;
     if (pom < 25)pom = 25; 
     if (pom >230)pom = 230; 
     POM[x] = pom ;
     x = x + 1 ;
     pm = cm ;
  }

if ( x > 9 ){
      
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
      POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;
      x = 0;}

      
LPG = map( Srednia,25,230,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika


    
      lcd.setCursor(5, 0);
      lcd.print(zero(dzien));
      lcd.print('/');
      lcd.print(zero(miesiac));
      lcd.print("/");
      lcd.print(rok);
      lcd.print("  ");

      lcd.setCursor(6, 1);
      lcd.print(zero(godzina));
      lcd.print(":");
      lcd.print(zero(minuta));
      lcd.print(":");
      lcd.print(zero(sekunda));
      lcd.print("  ");

      lcd.setCursor(0, 2);
      lcd.print("LPG PALIWO");
      lcd.setCursor(16, 2);
      lcd.print(sto(LPG));
      lcd.print('%');
      lcd.setCursor(0, 3);
      lcd.print('E');
      lcd.setCursor(19, 3);
      lcd.print('F');
      
      s = map(LPG,0,100,1,19);
      
      for ( int i = 1 ; i < s ; i++){
      lcd.setCursor(i, 3);
      lcd.print((char)255);
      }          
 
   

    
}

int zero(int number) {
  
    if (number < 10){lcd.print('0');}
    return number;}

int sto(int number) {
  
    if (number < 100){lcd.print(' ');}
    if (number < 10){lcd.print(' ');}
    return number;}
    
Takie coś zrobiłem na wzór tego co pisałeś. Po odpaleniu na pustym baku pokazuje teraz 0% zamiast wartości ponad 200%. Jutro zatankuję po pracy i zobaczę czy będzie max 100%
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości