DIGITAL PRODUCTION
Electronics



const int RED_pin = 3; // הגדרת פין ללד
const int Danny_pin = A0; // הגדרת חיבור פטציומטר ממקור 0
int how_many_times; // הגדרת משתנה
int pot_value;
int led_brightness;
void setup() {
// put your setup code here, to run once:
pinMode(RED_pin, OUTPUT);
Serial.begin(9600); // הגדרה ראשונית
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println("how many hivhuvim?"); // "?הגדרת הוראה שאל את המשתמש "כמה הבהובים
while(Serial.available() == 0){ // האם יש מידע בתיבת הטקסט
}
how_many_times = Serial.parseInt(); קבלת הקלט שהקליד המשתמש
for(int i=1; i<= how_many_times; i++){
pot_value = analogRead(Danny_pin); // הכנסת ערכו המספרי של הפטציומטר למשתנה
led_brightness = map(pot_value, 0, 1023, 0, 255); // מיפוי של שינוי הערכים אליהם יכול להגיע הפנטציומטר בעוצמת הנורה
analogWrite(RED_pin, led_brightness); // הדלקת הנורה לפי המשתנה שהוכנס
delay(500); // המתנה של חצי שניה
analogWrite(RED_pin, 0); // כיבוי הנורה
delay(500); // המתנה של חצי שניה
}
}

*/
#include <LiquidCrystal.h>
const int btn = 8; //הגדרת כפתור לפין 8
char* introText[]={"Dodge the defs!!","Created on:", "Hit the button..."}; .// הגדרת רשימת טקסטים לשימוש על פי מיקום ברשימה
//הגדרת משתנים
int game=0;
int buttonPress = 0;
int buttonState=0;
int obstaclePos;
int obsDelay;
int score=0;
unsigned long lastDebounceTime = 0; // הפעם האחרונה שבה הפלט הוחלף (unsigned long - סוג של משתנה)
unsigned long debounceDelay = 50;
int lastButtonState=LOW; // מצב הגדרה של הכפתור
// הגדרת גרפיקה כל דמות בפני עצמה לדוגמא קפיצה ריצה וכו
byte runnin1[8] = {
0b01100,
0b01100,
0b00000,
0b11100,
0b01110,
0b01100,
0b11110,
0b00011
};
byte runnin2[8]={
0b00110,
0b00110,
0b00000,
0b00111,
0b01110,
0b00110,
0b01110,
0b00101
};
byte jump[8]={
0b00100,
0b01100,
0b11100,
0b01110,
0b01100,
0b11111,
0b00000,
0b00001
};
byte def1[8] = {
0b00100,
0b00110,
0b00111,
0b01110,
0b00110,
0b01111,
0b01000,
0b00000
};
byte def2[8]={
0b00100,
0b00110,
0b00111,
0b01110,
0b00110,
0b00110,
0b00110,
0b00010
};
byte slide[8]={
0b00000,
0b00000,
0b00011,
0b00011,
0b00000,
0b01111,
0b11111,
0b00000
};
LiquidCrystal lcd(4,6,10,11,12,13); // הגדרת פעולות מובנות שיש באדרוינו במסך LCD
void setup() {
Serial.begin(9600);// הגדרת ראשונית
pinMode(btn,INPUT);
lcd.begin(16,2); // הגדרה ראשוני של מסך ( מחייב לפני כל פעולה על המסך)
lcd.createChar(0,runnin1); // הגדרה של דמויות לפי פיקסלים שהוגדרו מראש
lcd.createChar(1,runnin2);
lcd.createChar(2,jump);
lcd.createChar(3,def1);
lcd.createChar(4,def2);
lcd.createChar(5,slide);
buttonState=digitalRead(btn); // הגדרת מצב כפתור
}
void loop()
{
while(game==1) // כל עוד המשתנה שווה ל 1 תעבוד
ballActive();
endGame();
}
void intro()
{
score=0;
lcd.clear(); // ניקוי מסך
lcd.print(introText[0]); //הדפסת טקסט מקום 0 ברשימה TEXT
lcd.setCursor(7,1); // הגדרת מיקום הטקסט על המסך
delay(2000);
lcd.clear();
lcd.print(introText[1]); //הדפסת טקסט מקום 1 ברשימה TEXT
lcd.setCursor(0,1); // הגדרת מיקום הטקסט על המסך
delay(2000);
lcd.clear();
while(button()!=1) //חכה שהמשתמש ילחץ על הכפתור עד אז הראה את הטקסט מיקום 2 ברשימת TEXT
{
lcd.setCursor(0,0);
lcd.print(introText[2]);
delay(100);
}
if(button()==1) // אם לחצו על הכפתור אז GAME=1
game=1;
}
void reset()
{
if(obstaclePos%2==0) //אם השארית שווה 0 שנה תצוגה בכדי שירגיש שהדמות רצה
{
lcd.clear();
lcd.setCursor(0,1);
lcd.write(byte(0));
}
else // אחרת הדפס מיקום 1 ברשימת TEXT
{
lcd.clear();
lcd.setCursor(0,1);
lcd.write(1);
}
}
void ballActive()
{
obsDelay=200;
obstaclePos=15; //since it is a 16x2 lcd, and index starts from 0.
while(game==1) // כל עוד GAME=1 תאתחל
{
reset();
if(button()==1) //אם הכפתור לחוץ
{
lcd.clear();
lcd.setCursor(0,0);
lcd.write(2); //הדפס את השחקן שקופץ
obstacle(obstaclePos); // הדפס מכשול
delay(400); //חכה 4 מאיות שניה כדי שיהיה אפשר להבחין במצב
lcd.clear();
lcd.setCursor(0,1);
lcd.write(1); //הדפס את השחקן על הקרקע
obstacle(obstaclePos);
}
else //אחרת
{
if(obstaclePos!=0) //אם המכשול לא נגע בשחקן המשך
{
reset();
obstacle(obstaclePos);
}
else if(obstaclePos==0) //אם השחקן נתקע במכשול סיים את המשחק
game=0;
break;
}
}
obstaclePos--; //הבאת המכשול קרוב יותר לשחקן
if(obstaclePos<0) // אם השחקן הצליח לקפות מעל המכשול
{
obsDelay=obsDelay-20; //העלה מהירות
obstaclePos=15; //שים את המכשול בנקודת ההתחלה (סוף המסך)
score++; //העלה את המשתנה באחד
}
if(obsDelay==0) //אם השחקן התחמק 10 פעמים הפסק את המשחק
delay(obsDelay);
}
}
int button()
{
int reading = digitalRead(btn);
//אם הכפתור השתנה
if (reading != lastButtonState) {
//אפס את טיימר הקפיצה
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
buttonState = reading;
if (buttonState == HIGH) {
lastButtonState = reading;
return 1;
}
}
lastButtonState = reading;
}
void obstacle(int i)
{
if(obstaclePos%2==0&& obstaclePos>2) //if defender is far away from the player, then show him running
{
lcd.setCursor(i,1);
lcd.write(3);
}
else if(obstaclePos%2!=0&& obstaclePos>2)
{
lcd.setCursor(i,1);
lcd.write(4);
}
else //if he is 2 steps close to the player, then show him sliding
{
lcd.setCursor(i,1);
lcd.write(5);
}
}
void endGame()
{
if(score==10)
{
lcd.clear();
lcd.print("Congratulations!");
lcd.setCursor(0,1);
lcd.print("You beat 'em all");
delay(3000);
}
else if(score<3)
{
lcd.clear();
lcd.print("You suck");
lcd.setCursor(0,1);
lcd.print("Score: ");
lcd.print(score);
delay(3000);
}
else if(score<6)
{
lcd.clear();
lcd.print("Not bad!");
lcd.setCursor(0,1);
lcd.print("Score: ");
lcd.print(score);
delay(3000);
}
else
{
lcd.clear();
lcd.print("Great!");
lcd.setCursor(0,1);
lcd.print("Score: ");
lcd.print(score);
delay(3000);
}
}
}