28-04-2016, 21:20
(Ten post był ostatnio modyfikowany: 28-04-2016, 21:45 przez sisidor/Tomek.
Powód edycji: dodanie kodu
)
Z racji że jest to mój pierwszy post, powinienem się przywitać więc CZEŚĆ wszystkim
Robiłem sobie prosty projekt na Arduino i wystąpił niezrozumiały dla mnie problem, do rzeczy
1. Podłączyłem klawiaturę 4x4 membranową na I2C
2. Podłączyłem wyświetlacz 16x2 bezpośrednio do Arduino Uno
3. Wyświetla mi wszystko bez problemu na ekranie
Problem pojawia się gdy dokładam linijkę servo.attach(9);
Wtedy wyświetlacz ma problemy - raz działa, raz wypisuje bzdury
Podobnie przestaje działać gdy ustawię serial.begin(9600);
Czy ktoś wie jak to rozwiązać albo jakie są tego przyczyny?
Pozdrawiam
PS nie znalazłem rozwiązania na forum
Edit: wstawiam kod + za chwile film z działania
Film z działania
Robiłem sobie prosty projekt na Arduino i wystąpił niezrozumiały dla mnie problem, do rzeczy
1. Podłączyłem klawiaturę 4x4 membranową na I2C
2. Podłączyłem wyświetlacz 16x2 bezpośrednio do Arduino Uno
3. Wyświetla mi wszystko bez problemu na ekranie
Problem pojawia się gdy dokładam linijkę servo.attach(9);
Wtedy wyświetlacz ma problemy - raz działa, raz wypisuje bzdury
Podobnie przestaje działać gdy ustawię serial.begin(9600);
Czy ktoś wie jak to rozwiązać albo jakie są tego przyczyny?
Pozdrawiam
PS nie znalazłem rozwiązania na forum
Edit: wstawiam kod + za chwile film z działania
Kod:
#include <Wire.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Servo.h>
#include <EEPROM.h>
LiquidCrystal lcd(0, 1, 2, 3, 4, 5); //podpięcie wyswietlacza
const byte ROWS = 4; //ilosc wierszy
const byte COLS = 4; //ilosc kolumn
char keys[ROWS][COLS] = { //definicja klawiszy
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {0,1,2,3}; //wiersze 0-3
byte colPins[COLS] = {4,5,6,7}; //kolumny 0-3
int i2caddress = 0x20;
Keypad_I2C kpd = Keypad_I2C( makeKeymap(keys), rowPins, colPins, ROWS, COLS, i2caddress ); //definicja klawiatury - zaczerpniete dane ze zmiennych
int pamiec[4]; //pamiec wcisnietych klawiszy
char kod[4]={'1','2','3','4'};
Servo serwo;
void setup()
{ lcd.begin(16, 2); //Deklaracja typu
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("Witaj! wpisz kod"); //Wyświetlenie tekstu
kpd.begin();
pinMode(7, OUTPUT);
digitalWrite(7,LOW);
serwo.attach(9);
//serwo.write(0);
}
void stan_norm()
{ lcd.begin(16, 2); //Deklaracja typu
lcd.clear();
lcd.setCursor(0, 0); //Ustawienie kursora
lcd.print("Witaj! wpisz kod"); //Wyświetlenie tekstu
digitalWrite(7,LOW); //zgaszenie diody
//serwo.write(0);
}
void wypisanie_kodu() //zapisywanie kodu + sterowanie zamkiem
{
lcd.setCursor(0,1);
for(int l=0; l<=3 ; l++ )
{
char key;
do key= kpd.getKey(); while(key==NO_KEY);
digitalWrite(7, HIGH);
{
pamiec[l]=(key); //zapisanie cyfry kodu
//lcd.setCursor(l,1);
lcd.print(key);
delay(100); //dlugosc sygnalu dzwiekowego
digitalWrite(7, LOW);
if (l==3)
{ if (pamiec[0]==kod[0] && pamiec[1]==kod[1] && pamiec[2]==kod[2] && pamiec[3]==kod[3])
otwarte();
else
zamkniete();
}
}
}
}
void zamkniete()
{ lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Bledny kod");
digitalWrite(7, HIGH);
delay(500);
digitalWrite(7, LOW);
delay(600);
stan_norm();
}
void otwarte()
{ serwo.write(120);
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("OTWARTE");
for (int i=0;i<5;i++)
{digitalWrite(7, HIGH);
delay(100);
digitalWrite(7,LOW);
delay(100);
}
delay(5000);
stan_norm();
}
void loop ()
{ wypisanie_kodu();
}