#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define BACKLIGHT_PIN 3
int e;
int p=0;
char t;
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
const byte wiersze= 4; //ilosc wierszy
const byte kolumny= 4; //ilosc kolumn
char mapaklawiszy[wiersze][kolumny]=
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte wiersze_piny[wiersze] = {9,8,7,6};//{0,1,2,3};
byte kolumny_piny[kolumny] = {5,4,3,2};//{4,5,6,7};
Keypad myKeypad= Keypad(makeKeymap(mapaklawiszy), wiersze_piny, kolumny_piny,wiersze, kolumny);
volatile int l=0;
int mykey[4];
int haslo[4];
int zapis_h[4]={-2,-2,-2,-2};
void setup()
{
Serial.begin(9600);
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
pinMode(10,OUTPUT);
pinMode(A0,INPUT_PULLUP);
pinMode(A1,INPUT_PULLUP);
lcd.home();
lcd.print(" GOTOWY ??? ");
lcd_czas_zero();
lcd_haslo_zero();
}
void loop()
{
int test=0;
char wybor;
wybor=myKeypad.getKey();
switch(wybor)
{
case 'A': //case '1':
{
opcja1();
}
break;
case 'C': //case '1':
{
lcd.setCursor(0,0);
lcd.print("ARE YOU READY ? ");
lcd_czas_zero();
lcd_haslo_zero();
}
break;
}
}
int opcja1()
{
lcd_czas_zero();
lcd_haslo_zero();
lcd.setCursor(0,0);
lcd.print(" Ust. CZAS ");
Serial.println("case 1");
jaki_czas();
}
int czas(int j, int i)
{
boolean czy=false;
lcd.setCursor(0,0);
lcd.print(" Ust. HASLO ");
Serial.println("HASLO");
l=0;
haslo_glowne();
lcd.setCursor(0,0);
lcd.print(" ");
start_czas();
i=i*10;
while(j>-1)//(int x=j+1;j>-1;x--)
{
for(int y=i;y>-1;y--)
{
if(j<10)
{
lcd.setCursor(2,1);
lcd.print("0");
lcd.setCursor(3,1);
lcd.print(j);
}
else
{
lcd.setCursor(2,1);
lcd.print(j);
}
lcd.setCursor(4,1);
lcd.print(":");
if(y<100)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
}
else
{
lcd.setCursor(5,1);
lcd.print(y/10);
}
if(y<100 & j==0)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
if(y%10 == 0)
{
digitalWrite(10,HIGH);
lcd.noDisplay();
}
}
else if(y<100)
{
lcd.setCursor(5,1);
lcd.print("0");
lcd.setCursor(6,1);
lcd.print(y/10);
}
else
{
lcd.setCursor(5,1);
lcd.print(y/10);
}
test_haslo();
float odczyt1 = analogRead(A0);
float odczyt2 = analogRead(A1);
if(odczyt1 >1000.00 && odczyt2 >1000.00)
{
if(haslo[0]==zapis_h[0] && haslo[1]==zapis_h[1] && haslo[2]==zapis_h[2] && haslo[3]==zapis_h[3])
{
Serial.println("HASLO POPRAWNE");
lcd.display();
digitalWrite(10,LOW);
lcd.setCursor(4, 1);
czy=true;
break;
}
}
if(zapis_h[0]>-1 && zapis_h[1]>-1 && zapis_h[2]>-1 && zapis_h[3]>-1)
{
zapis_h[0]=-1;
zapis_h[1]=-1;
zapis_h[2]=-1;
zapis_h[3]=-1;
Serial.println("HASLO NIE POPRAWNE");
lcd_haslo_zero();
}
delay(70);
lcd.display();
digitalWrite(10,LOW);
delay(30);
}
float odczyt1 = analogRead(A0);
float odczyt2 = analogRead(A1);
if(odczyt1 >1000.00 && odczyt2 >1000.00)
{
if(haslo[0]==zapis_h[0] && haslo[1]==zapis_h[1] && haslo[2]==zapis_h[2] && haslo[3]==zapis_h[3])
{
Serial.println("HASLO POPRAWNE");
lcd.display();
digitalWrite(10,LOW);
lcd.setCursor(4, 1);
czy=true;
break;
}
}
i=600;
j=j-1;
}
int o=0;
if(czy)
{
lcd.setCursor(0, 0);
lcd.print("HASLO. POPRAWNE ");
while(o<3)
{
digitalWrite(10,HIGH);
delay(200);
digitalWrite(10,LOW);
delay(200);
o++;
}
}
else
{
lcd.setCursor(0, 0);
lcd.print(" BOOOOOM!!! ");
digitalWrite(10,HIGH);
delay(5000);
digitalWrite(10,LOW);
}
}
//wyswietlenie czasu ktory jest nieznany
int lcd_czas_zero()
{
lcd.setCursor(0,1);
lcd.print("T~--:--");
}
//wyswietlenie hasła ktore jest nieznane
int lcd_haslo_zero()
{
lcd.setCursor(10,1);
lcd.print("H~****");
}
int jaki_czas()
{
lcd_czas_zero();
int i,j;
for(int q=0;q<4;q++)
{
mykey[q]=0;
}
i=0;
j=0;
l=0;
while(l<4)
{
char keypressed = myKeypad.getKey();
if (keypressed)
{
mykey[l]=keypressed-'0';
if(l<=1)
{
lcd.setCursor(l+2,1);
lcd.print(mykey[l]);
}
else
{
lcd.setCursor(l+3,1);
lcd.print(mykey[l]);
}
l++;
Serial.println(keypressed);
}
}
i=(mykey[0]*10)+mykey[1];//i=((mykey[0]-'0')*10)+(mykey[1]-'0');
j=(mykey[2]*10)+mykey[3];// j=((mykey[2]-'0')*10)+(mykey[3]-'0');
lcd.setCursor(0,0);
lcd.print(" ");
while(l!=66)
{
l=myKeypad.getKey();
if(l==67)
{
jaki_czas();
}
}
czas(i,j);
}
int start_czas()
{
int l=0;
while(l!=35)
{
l=myKeypad.getKey();
}
lcd.setCursor(0,0);
lcd.print(" START ");
Serial.println("START");
}
int haslo_glowne()
{
lcd_haslo_zero();
l=0;
while(l<4)
{
char keypressed_1 = myKeypad.getKey();
if (keypressed_1) //if (keypressed != NO_KEY)
{
haslo[l]=keypressed_1-'0';
lcd.setCursor(l+12,1);
lcd.print(haslo[l]);
l++;
}
}
while(l!=35)
{
l=myKeypad.getKey();
Serial.println("2 while");
if(l==67) //C = 67, B=66
{
haslo_glowne();
}
}
lcd_haslo_zero();
Serial.println("HASLO ZAPISANE");
}
int test_haslo()
{
int keypressed_2 = 0;
if(zapis_h[0]==-1)
{
p=0;
}
keypressed_2 = myKeypad.getKey()-'0';
if( p<4 && keypressed_2>0 )
{
zapis_h[p]=keypressed_2;
lcd.setCursor(p+12,1);
lcd.print(zapis_h[p]);
p++;
}
}
he he he chciało by się dostać kodzik rabatowy do botlandu? To mogłeś się postarać, dać obudowę, przerzucić to na atmegę, zrobić to na płytce a nie taki ”pająk”
Troszkę niestarannie, ale pomysł fajny, kreatywny i przede wszystkim przydatny!
Co do obudowy to fajna była by walizka. Dodało by to klimatu strzelanki :)
Atrapa czego? Bomby?
Haha, czepiacie się, moim zdaniem fajny pomysł.
Pomysł fajny jednak muszę się przyczepić do filmików na których wyświetlacz jest nieczytelny. ledwo jestem w stanie odczytać co jest tam wyświetlane.
Czy mogę wykonać ten projekt na płytce Arduino Nano bez zmieniania kodu?
Nie, ponieważ w Uno mamy normalnie wyprowadzone piny SCL i SDA a w NANO są to piny A5 i A4.
arduino uno również posiada piny scl i sda na pinach analogowych jedynie ma dodatkowo wyprowadzone dla większej czytelności. Tak w zasadzie uno i nano są bardzo podobne i różnią się głównie tym że uno ma np. więcej pinów zasilania i dodatkowo wyprowadzone piny komunikacyjne dla lepszej czytelności
Czy mogę wykonać ten projekt na klonie płytki Arduino Nano?
Jak najbardziej. Używając NANO mamy więcej miejsca w porównaniu do UNO.
Pomoże ktoś w przerobieniu kodu? https://majsterkowo.pl/forum/atrapa-bomby-do-asg-t4976.html
Nie ma podanych bibliotek sam musiałem szukać u wujka google i mam problem bo podczas kompilacji mam taki błąd:
Arduino:1.6.11 (Windows 10), Płytka:”Arduino/Genuino Uno”
timebombs:10: error: no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)’
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);
^
C:\Users\konrad\OneDrive\Documents\Arduino\timebombs\timebombs.ino:10:41: note: candidates are:
In file included from C:\Users\konrad\OneDrive\Documents\Arduino\timebombs\timebombs.ino:2:0:
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:71:2: note: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t)
LiquidCrystal_I2C(uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);
^
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:71:2: note: candidate expects 4 arguments, 8 provided
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:60:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)
class LiquidCrystal_I2C : public Print {
^
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 8 provided
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:60:7: note: constexpr LiquidCrystal_I2C::LiquidCrystal_I2C(LiquidCrystal_I2C&&)
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:60:7: note: candidate expects 1 argument, 8 provided
C:\Users\konrad\OneDrive\Documents\Arduino\timebombs\timebombs.ino: In function ‘void setup()’:
timebombs:36: error: no matching function for call to ‘LiquidCrystal_I2C::begin(int, int)’
lcd.begin (16,2);
^
C:\Users\konrad\OneDrive\Documents\Arduino\timebombs\timebombs.ino:36:17: note: candidate is:
In file included from C:\Users\konrad\OneDrive\Documents\Arduino\timebombs\timebombs.ino:2:0:
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:76:7: note: void LiquidCrystal_I2C::begin()
void begin();
^
C:\Users\konrad\OneDrive\Documents\Arduino\libraries\LiquidCrystal-I2C/LiquidCrystal_I2C.h:76:7: note: candidate expects 0 arguments, 2 provided
timebombs:37: error: ‘class LiquidCrystal_I2C’ has no member named ‘setBacklightPin’
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
^
timebombs:37: error: ‘POSITIVE’ was not declared in this scope
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
^
exit status 1
no matching function for call to ‘LiquidCrystal_I2C::LiquidCrystal_I2C(int, int, int, int, int, int, int, int)’
Ten raport powinien zawierać więcej informacji jeśli w
File -> Preferencje zostanie włączona opcja “Pokaż
szczegółowe informacje podczas kompilacji”
Pomocy proszę
można prosić schemat?