Záměr byl takový, aby se teplota objevila na 2 min a pak by se objevil voltmetr na 1 min a tak by se to měnilo ve smyčce a tu je ten problém s kterým bych potřeboval pomoc, najde se někdo….., Díky
Kód: Vybrat vše
/**************************************************************************
Zapojení: pin:
Arduino nano
Oled 0.96 i2c SDA-A4
SCL-A5
RST 4
DS1307 SDA-A4
SCK-A5
LDR A0 (modul)
Vystup pro rele A1,A2 (modul)
2x tlačitko 9,8 nastavení hodin
DS18B20 5
voltmetr A3
R1 100K
R2 10K
Porovnání s vaším laboratorním DVM neshodoval, použijte přesný DMM k nalezení
skutečného odporu R1 a R2, a nahraďte R1 = 100000,0 a R2 = 10000,0 v kódu těmito
hodnotami. Dále zkontrolujte napájení 5V s laboratorním DVM na GND a 5V piny na desce
Arduino. Mohlo by vám poskytnout méně (například 4,95 V), nahradit hodnotu do
kódu vout = (hodnota * 5,0) / 1024,0 (tj. Nahradit hodnotu 5,0 skutečnému
čtení V, v tomto případě 4,95 V). Dále se vždy snažte použít přesné 1% toleranční
rezistory pro R1 a R2.
**************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5
#define OLED_RESET 4
#define SSD1306_LCDHEIGHT 64
Adafruit_SSD1306 display(OLED_RESET);
#define button1 9 // Tlačítko
#define button2 8 // Tlačítko
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int analogInput = A3;
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
// 'auto Logo', 128x64px
const unsigned char myBitmap [] PROGMEM = {
0x00,0x00,0x00,0x00,0x00,0x18,0x01,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0xC1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x8A,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x81,0x8B,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x44,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0xE4,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0xF4,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x03,0x56,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x3F,0xF8,0x00,0x03,0x53,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xE0,0x0F,0xC0,0x02,0x61,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x0C,0x00,0x00,0x78,0x02,0xE1,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x18,0x00,0x00,0x0F,0xFE,0xC6,0x0D,0xF8,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,
0x60,0x10,0x00,0x00,0x00,0x0F,0x98,0x18,0xF4,0x07,0xFF,0xF8,0xE0,0x00,0x00,0x00,
0x70,0x20,0x00,0x00,0x03,0xF9,0x18,0x28,0x1E,0x1C,0x00,0x00,0x18,0x00,0x00,0x00,
0x78,0x47,0x8F,0x00,0xDE,0xC5,0x8F,0x08,0x1E,0x30,0x00,0x00,0x0C,0x00,0x00,0x00,
0x48,0xDF,0x8F,0x0F,0xD9,0x81,0x03,0x08,0x0F,0x30,0xFB,0xFF,0x06,0x00,0x00,0x00,
0x48,0x9F,0x8F,0x97,0xAD,0x03,0x00,0x08,0x0F,0x33,0xF8,0xFF,0xC3,0x00,0x00,0x00,
0x79,0xBF,0x8F,0x9F,0xAF,0x81,0x80,0x08,0x0F,0x67,0xF8,0xFF,0xF9,0x80,0x00,0x00,
0x01,0x3F,0x8F,0xCF,0xA7,0x41,0x00,0x08,0x07,0x6F,0xF8,0xFF,0xFC,0xC0,0x00,0x00,
0x3F,0x7F,0x8F,0xC7,0xA7,0xB9,0x00,0x00,0x07,0xFF,0xF8,0xFF,0xFE,0x60,0x00,0x00,
0x10,0x3F,0x8F,0xE3,0x9B,0xB1,0xFC,0x7F,0x7F,0xDF,0xF8,0xFF,0xFF,0x30,0x00,0x00,
0x10,0x00,0x87,0xE1,0x8F,0xC1,0x02,0x5F,0xFF,0x9F,0xF8,0xFF,0xFF,0x18,0x00,0x00,
0x10,0x00,0x07,0xE1,0x83,0xB0,0x06,0x60,0x07,0x3F,0xF8,0xFF,0xFF,0x8F,0xFC,0x00,
0x10,0x00,0x03,0xC0,0x03,0xFC,0x0B,0xE0,0x16,0xFF,0xF8,0xFF,0xFF,0x80,0x3F,0x00,
0x30,0xFC,0x00,0x00,0x00,0x1F,0x0B,0x7F,0xFC,0x80,0xF8,0x00,0x1F,0x80,0x0D,0x80,
0x21,0xF4,0x00,0x00,0x00,0xFE,0x8B,0x00,0x00,0x80,0x00,0x00,0x00,0x03,0xFF,0x80,
0x23,0x74,0x00,0x00,0x01,0x8F,0x0B,0xBF,0x81,0xF0,0x00,0x00,0x00,0x00,0x7F,0x40,
0x23,0xFC,0x00,0x00,0x01,0x1F,0x0E,0x07,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x60,
0x27,0xFC,0x00,0x00,0x01,0xBF,0x06,0x00,0xE0,0x07,0xFF,0xFF,0xE0,0x01,0xBF,0xF0,
0x26,0x3C,0x00,0x00,0x00,0xE0,0x7E,0x03,0xC0,0x01,0x80,0x00,0xC0,0x00,0xC0,0x10,
0x3E,0x1E,0x00,0x00,0x00,0x7F,0xDA,0x07,0x1F,0x00,0xC0,0x01,0x80,0x00,0x60,0x10,
0x3E,0x1E,0x00,0x00,0x00,0x7F,0xDA,0x07,0x1F,0x00,0xC0,0x01,0x80,0x00,0x60,0x10,
0x06,0x0F,0x00,0xFC,0x00,0xC0,0x3E,0x1E,0x31,0xF0,0x40,0x03,0x1F,0xC0,0x60,0x10,
0x05,0x0F,0x01,0x66,0x00,0x80,0xCC,0x1C,0x7F,0xF8,0x60,0x02,0x31,0xF0,0x20,0x10,
0x05,0x87,0x82,0xDF,0x01,0x81,0x8F,0x88,0x5F,0xFC,0x00,0x04,0x7F,0xFC,0x30,0x10,
0x06,0xEF,0xC3,0xB5,0x81,0x0E,0x7F,0x80,0xFC,0x7E,0x00,0x04,0x5F,0xF7,0x80,0x10,
0x03,0x3F,0xFF,0xC6,0xC1,0xF0,0x60,0x80,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x10,
0x03,0xFF,0x87,0xC2,0xC0,0x00,0x20,0x8F,0x70,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x10,
0x03,0xFF,0x87,0xC2,0xC0,0xE0,0x20,0xFF,0x60,0x1F,0x00,0x03,0x70,0x0B,0x80,0x30,
0x01,0xFF,0x07,0xC6,0xE1,0x80,0xFE,0x7F,0x70,0x1F,0x8F,0xFF,0xD0,0x0B,0x80,0x60,
0x00,0x7E,0x07,0xDD,0x61,0x07,0x60,0x0E,0x70,0x17,0xFF,0xFF,0xD8,0x1F,0xC0,0x40,
0x00,0x00,0x07,0xF3,0xFF,0xFF,0x80,0x00,0x78,0x1F,0x80,0x00,0x58,0x37,0xFF,0xC0,
0x00,0x00,0x07,0xFE,0xC1,0xFC,0x00,0x00,0x7F,0xFF,0x00,0x00,0x58,0x6F,0x80,0x00,
0x00,0x00,0x07,0xC7,0x80,0x00,0x00,0x00,0x7F,0xFF,0x00,0x00,0x7F,0xFE,0x80,0x00,
0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x3F,0xFE,0x00,0x00,0x6F,0xFD,0x00,0x00,
0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0xFB,0x00,0x00
};
void setup(void) {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.drawBitmap(0, 0, myBitmap, 128, 64, WHITE);
display.display();
delay(3500);
pinMode(A0,INPUT); //Analog A2 in LDR Pin
pinMode(A1,OUTPUT); //Světla On/Off Pin - potkavací
pinMode(A2,OUTPUT); //Světla On/Off Pin - tlumená
pinMode(analogInput, INPUT);
pinMode(button1, INPUT_PULLUP);
pinMode(button2, INPUT_PULLUP);
delay(1000);
display.clearDisplay();
display.display();
sensors.begin();
}
char Time[] = " : : ";
byte i, second, minute, hour;
void DS1307_display(){
// Convert BCD to decimal
second = (second >> 4) * 10 + (second & 0x0F);
minute = (minute >> 4) * 10 + (minute & 0x0F);
hour = (hour >> 4) * 10 + (hour & 0x0F);
Time[7] = second % 10 + 48;
Time[6] = second / 10 + 48;
Time[4] = minute % 10 + 48;
Time[3] = minute / 10 + 48;
Time[1] = hour % 10 + 48;
Time[0] = hour / 10 + 48;
draw_text(16, 5, Time, 2);
}
void blink_parameter(){
byte j = 0;
while(j < 10 && digitalRead(button1) && digitalRead(button2)){
j++;
delay(25);
}
}
byte edit(byte x_pos, byte y_pos, byte parameter){
char text[3];
sprintf(text,"%02u", parameter);
while(!digitalRead(button1)); // Počkejte, až uvolníte tlačítko B1
while(true){
while(!digitalRead(button2)){ // Pokud je stisknuto tlačítko B2
parameter++;
if(i == 3 && parameter > 23) // Pokud jsou hodiny> 23 ==> hodiny = 0
parameter = 0;
if(i == 4 && parameter > 59) // Pokud minuty> 59 ==> minuty = 0
parameter = 0;
sprintf(text,"%02u", parameter);
draw_text(x_pos, y_pos, text, 2);
delay(200); // Počkejte 200ms
}
draw_text(x_pos, y_pos, " ", 2);
blink_parameter();
draw_text(x_pos, y_pos, text, 2);
blink_parameter();
if(!digitalRead(button1)){ // Pokud je stisknuto tlačítko B1
i++; // Přírůstek „in“ pro další parametr
return parameter; // Vraťte hodnotu parametru a ukončete
}
}
}
void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
display.setCursor(x_pos, y_pos);
display.setTextSize(text_size);
display.print(text);
display.display();
}
void loop () {
display.drawLine(0, 0, 127, 0, WHITE);
display.drawLine(0, 23, 127, 23, WHITE);
display.drawLine(127, 0, 127, 63, WHITE);
display.drawLine(127, 63, 0, 63, WHITE);
display.drawLine(0, 63, 0, 0, WHITE);
//display.setTextSize(2); //vrchní řádek
//display.setTextColor(WHITE);
//display.setCursor(3, 26);
//display.println("[");
display.setTextSize(2); //spodní řádek
display.setTextColor(WHITE);
display.setCursor(3, 46);
display.println("[");
//display.setTextSize(2); //vrchní řádek
//display.setTextColor(WHITE);
//display.setCursor(113, 26);
//display.println("]");
display.setTextSize(2); //spodní řádek
display.setTextColor(WHITE);
display.setCursor(113, 46);
display.println("]");
if(!digitalRead(button1)){ // Pokud je stisknuto tlačítko B1
i = 0;
while(!digitalRead(button1)); // Počkejte na uvolnění tlačítka B1
while(true){
while(!digitalRead(button2)){ // Při stisknutém tlačítku B2
delay(200); // Wait 200 ms
}
if(!digitalRead(button1)) // Pokud je stisknuto tlačítko B1
blink_parameter(); // Bliká dané číslo
display.setTextColor(WHITE, BLACK);
break;
}
hour = edit(16, 5, hour); // Upravit hodiny
minute = edit(52, 5, minute); // Upravit minuty
// Convert decimal to BCD
minute = ((minute / 10) << 4) + (minute % 10);
hour = ((hour / 10) << 4) + (hour % 10);
// Write data to DS1307 RTC
Wire.beginTransmission(0x68); // Start I2C protokol s adresou DS1307
Wire.write(0); // Adresa odeslat registr
Wire.write(0); // Resetujte sekundy a spusťte oscilátor
Wire.write(minute); // Napiše minutu
Wire.write(hour); // Napiše hodinu
Wire.endTransmission(); // Zastavení přenosu a uvolnění I2C sběrnici
delay(200); // Počkejte 200ms
}
Wire.beginTransmission(0x68); // Start I2C protokol s adresou DS1307
Wire.write(0); // Odeslat registrační adresu
Wire.endTransmission(false); // I2C restart
Wire.requestFrom(0x68, 7); // Vyžáda si 7 bajtů od DS1307 a uvolněte I2C sběrnici na konci čtení
second = Wire.read(); // Čtení sekund z registru 0
minute = Wire.read(); // Přečtěte si zápis z registru 1
hour = Wire.read(); // Přečíst hodinu z registru 2
DS1307_display(); // Zobrazit čas
delay(50); // Počkejte 50ms
//Head Light On/Off
int digital=analogRead(A0); // LDR in
display.println(digital);
if(digital>=700){
digitalWrite(A1,LOW); // Zapne světla - potkavací
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(17, 27);
display.println("Z.Svetla");
digitalWrite(A2,LOW); // Zapne světla - tlumená
delay(100);
}
else {
digitalWrite(A1,HIGH); // Vypne světla - potkavací
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(13, 27);
display.println("D.Sviceni");
digitalWrite(A2,HIGH); // Vypne světla - tlumená
delay(100);
}
// DS18B20
float temp;
sensors.requestTemperatures();
temp = sensors.getTempCByIndex(0);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(25,46);
display.println(temp);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(93, 46);
display.println("C");
delay(1000);
// voltmetr
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // odpor R1 (100K)
float R2 = 10000.0 ; // odpor R1 (10K)
int value = 0;
value = analogRead(analogInput);
vout = (value * 5.0) / 1024.0;
vin = vout / (R2 / (R1 + R2));
if (vin<0.09) {
vin=0.0;
}
Serial.print("INPUT Voltage= ");
Serial.println(vin, 2);
display.setTextSize(2);
display.setCursor(25, 46);
display.println(vin, 2);
display.setCursor(93, 46);
display.println("V");
delay(500);
}