• 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
Wyświetlacz 16x2 na I2C + serwo = problem
#1
Z racji że jest to mój pierwszy post, powinienem się przywitać więc CZEŚĆ wszystkim Smile

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 Sad

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();
}
Film z działania
 
Odpowiedź
  


Wiadomości w tym wątku
Wyświetlacz 16x2 na I2C + serwo = problem - przez sisidor/Tomek - 28-04-2016, 21:20

Skocz do:


Przeglądający: 2 gości