안녕하십니까 .아두이노 정말 초보인데 형님들이 알려주셨으면 좋겠습니다.
Lcd에 랜덤 숫자6개 뜨게하는 건데 여기다 스위치를 누를때마다 숫자가1개2개3개 이렇게 늘어가게 출력되게 하는방법좀 알려주셨으면 좋겠습니다. 부탁드립니다.
//* LCD 회로 :
//* - LCD RS 핀 - 디지털 핀 12
//* - LCD 디지털 핀 11에서 핀 사용 가능
//* - LCD D4 핀 - 디지털 핀 5
//// * - LCD D5 핀 - 디지털 핀 4
// * - LCD D6 핀 - 디지털 핀 3
// * - LCD D7 핀 - 디지털 핀 2
//* - LCD R / W 핀 대 접지
//* - + 5V로 끝나고 접지 (가장 바깥 쪽 핀이 접지, 내부 전압 핀)
//* - 포트를 LCD VO 핀 (핀 3)에 트림 (LCD 명암 대비)
#include <EEPROM.h>
#include <LiquidCrystal.h>
const int numNumbers = 6;// 생성 / 처리 할 숫자의 양
const int buttonPin = 7;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // 인터페이스 핀 번호로 라이브러리를 초기화한다.
int numbers[numNumbers]; // 생성 된 숫자를 저장할 배열을 초기화합니다.
boolean isInit = false; // 첫 번째 버튼 누름을 기록합니다.
boolean lcdNeedsRefreshed = false;
boolean isFirstButtonPush = true;
// * *
// * 단추, 화면을 입력하고 난수 시드를 생성합니다.
// * /
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
// * Fourums를 스캐닝하면이 솔루션을 사용하게되었습니다.
// * EEPROM을 사용하는 더 나은 랜덤 시드.
// * /
int eeprom=EEPROM.read(0);
eeprom+=1;
EEPROM.write(0, eeprom);
randomSeed(eeprom);
// LCD의 열과 행 수를 설정하고 화면 지우기 :
lcd.begin(16, 4); //16col, 4row display
lcd.home(); //back to start
lcd.clear();
}
/**
* shows init message if button hasn't been pushed before, else
* shows the numbers and checks for a button push which would
* generate a new set of numbers.
*/
void loop(){
if(isFirstButtonPush){
readButtonPush();
if(!isInit){
showWelcomeMessage();
isInit = true;
}
}else{
readButtonPush();
if(lcdNeedsRefreshed){
lcd.home();
lcd.clear();
printNumbersToLCD();
lcdNeedsRefreshed = false;
}
}
delay(100);
}
/**
* Checks for button push and generates new numbers if it has been pushed
*/
void readButtonPush(){
//Check for button push
int reading = digitalRead(buttonPin);
if(reading == LOW){
generateRandomNumbers();
isFirstButtonPush = false;
lcdNeedsRefreshed = true;
}
}
/**
* sets up the global numbers list with new random numbers
*/
void generateRandomNumbers(){
for(int i = 0; i < numNumbers; i++){
numbers[i] = nextRandomNumber();
}
}
/**
* Generates a random number
*
* Generates a random number between 1 and 49, checks it against the global
* numbers array. If the number exists in the array, it recursivly calls
* itself till it finds a valid number.
*
* returns int - random number between 1 and 49
*/
int nextRandomNumber(){
int nextRandom = random(1,46);
boolean isDuplicate = false;
for(int i = 0; i < numNumbers; i++){
if(nextRandom == numbers[i]) isDuplicate = true;
}
if(isDuplicate) return nextRandomNumber();
return nextRandom;
}
/**
* prints "Welcome" message to the LCD display
*/
void showWelcomeMessage(){
lcd.home();
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("LOTTERY-0-MATIC!");
lcd.setCursor(8, 1);
lcd.print("v2.0");
lcd.setCursor(4, 3);
delay(1000);
lcd.print("Push button!");
delay(10);
lcd.home();
}
/**
* Outputs the global var numbers to the LCD display
*
* The LCD is a 19 col, 4 row display, so there's plenty of room
* to fit all the numbers into one line, so we'll provide some info
* as to what is being displayed along with the numbers.
*/
void printNumbersToLCD(){
lcd.setCursor(0, 0);
lcd.print("Numbers:");
lcd.setCursor(0,1);
for(int i = 0; i < numNumbers; i++){
/* Numbers will always take up two characters of the LCD,
* so prepend any less than 10 with a zero.
*/
if(numbers[i] < 10){
lcd.print(0); lcd.print(numbers[i]);
}else{
lcd.print(numbers[i]);
}
//If we're not on the last number, print a comma to seperate the numbers
if(i != 5) lcd.print(",");
}
lcd.setCursor(5, 3);
lcd.print("Good Luck!");
lcd.home();
}
|