ממשיכים להגיע אליכם עד הבית!
משלוח חינם

קוד עבודה עם מסך 7 מקטעים

אחת משיטות התצוגה הנפוצות היא תצוגת 7 מקטעים.

בתצוגה זו, כל תו מורכב מ-7 מקטעים/נורות, שבעזרתן ניתן ליצור מספרים וגם אותיות.

כדי להציג את המידע, יש לתת לכל מקטע ערך דולק/כבוי.

כשנרצה 4 תווים, זה יוצא הרבה פינים, ולכן יש רכיב המשתמש באוגר הזזה (shift register).

לרכיב זה יש ספריה מוכנה (NX7Seg), אשר משתמשת בספריית עזר להצגת אותיות (ASCIIDic) ואנו מתבססים עליהן בקוד זה.

את הספריות ניתן להוריד ישירות מכאן: NX7Seg   , ASCIIDic

או מהכתובות

 https://github.com/AlexisTM/ASCIIDic
 https://github.com/AlexisTM/NX7Seg

 

בתחילת הקוד נכלול את הספריות הללו

    

	#include 

	#include 
	
  

כאמור, המסך משתמש באוגר הזזה כך שבעזרת 3 פינים בלבד מצליחים לשלוט על כל המקטעים של המסך.

השורות הבאות מגדירות את הפינים שאיתם נעבוד עבור המסך

    
 #define CLK_DIO   8   // sclk

	#define LATCH_DIO 7 //rclk

	#define DATA_DIO  6  // dio

	bool reverse = false;

	
  

אתחול של אובייקט המסך (נדרש לשימוש בספריות המוכנות עבור עבודה עם המסך)

    
 nx7seg my4x7seg = nx7seg(LATCH_DIO,CLK_DIO,DATA_DIO,reverse);

	
  

עם תחילת הריצה יש לאתחל את הפינים לאופן העבודה. נגדיר זאת בפונקציה שאליה נקרא מתוך פונקציית setup ה"רגילה"  


 void setup_7seg (){

	  /* Set DIO pins to outputs */

	  pinMode(LATCH_DIO,OUTPUT);

	  pinMode(CLK_DIO,OUTPUT);

	  pinMode(DATA_DIO,OUTPUT);

	}

	 

	

פונקציה להצגת רמת המשחק

הרמה מוגדרת במשתנה גלובלי בשם gameLevel, ומציגים אותו עם האות L כדי להבהיר שמדובר על רמת המשחק.

הפונקציה משתמשת בפקודה my4x7seg.write של הספריה, שמקבלת מערך של אותיות ומציגה אותו.

לכל תו יש ייצוג מספרי (ASCII). כשאנחנו רוצים להציג מספר כאות, נוסיף לו '0', כלומר את הערך המספרי של 0, וכך יהיה לנו את הערך המספרי של אותה ספרה, כלומר הפכנו מספר אל "אות" שאותה ניתן להדפיס עם פונקציית הדפסת האותיות.
(אנו משתמשים בפונקציית הדפסת אותיות כדי שנוכללשלב אותיות עם המספרים)
 

בסיום הפונקציה נשתמש בפקודה my4x7seg.refresh שמרעננת את המסך עם הערך החדש שטענו אליה.

פונקציה זו מקבלת כפרמטר את משך ההצגה, ובמהלך זמן זה לא מתבצעת כל פעילות אחרת בארדואינו. לכן נעדיף להקטין את הזמן הזה ככל הניתן.


void showLevel(int refresh_time){

	 char data[4]="----";

	data[1]=char('0'+gameLevel%10);

	 data[2]='L';

	 my4x7seg.write(data,4);

	 my4x7seg.refresh(refresh_time);

	}
  

פונקציה להצגת תוצאות המשחק

יש כאן התייחסות גם למקרה של תוצאה דו ספרתית. במקרה כזה מפרקים את המספר לספרות השונות וכל אחת מהן מוצגות במקומה על המסך.

אופן הפירוק- משתמשים בפקודת % שזה חישוב שארית. כאשר נעשה x%10 נקבל את ספרת האחדות של x לאחר מכן נחלק את x ב-10 וכך נקבל את ספרת העשרות שלו (שגם אותה נעביר דרך % כדי לנטרל את הספרות שאחרי הנקודה)


void showScore(int refresh_time){

	 char data[4]="    ";

	data[1]=char('0'+gameScore%10);

	 if(gameScore >= 10){

	 data[2]=char('0'+(gameScore/10) %10);

	 }

	

	 my4x7seg.write(data,4);

	 my4x7seg.refresh(refresh_time);

	}
  

הצגת תוצאה סופית של המשחק.

התוצאה מוצגת עם קווים סביבה, כדי להדגיש שזה סוף המשחק


void showFinishedScore(int refresh_time){

	    char data[4]="----";

	    data[1]=char('0'+gameScore%10);

	    if(gameScore >= 10){

	      data[2]=char('0'+(gameScore/10) %10);

	    }

	    my4x7seg.write(data,4);

	    my4x7seg.refresh(refresh_time);

	 }
  

הצגה של התוצאה הטובה ביותר עד כה, עם האות b ליד המספר


 void showBest(int num){

	    char data[4]="   b";

	    data[0]=char('0'+num%10);

	    if(num >= 10){

	      data[1]=char('0'+(num/10) %10);

	    }

	    if(num >= 100){

	      data[2]=char('0'+(num/100) %10);

	    }

	    my4x7seg.write(data,4);

	    my4x7seg.send();

	}
  

פונקציה זו לא משתמשת ב-refresh כדי להימנע מהשהיות מיותרות

 

פונקציה להצגת מספר ללא השהיות



	void showDigits(int num){

	    char data[4]="    ";

	    data[0]=char('0'+num%10);

	    if(num >= 10){

	      data[1]=char('0'+(num/10) %10);

	    }

	    if(num >= 100){

	      data[2]=char('0'+(num/100) %10);

	    }

	    my4x7seg.write(data,4);

	    my4x7seg.send();

	}
  

כיבוי של תצוגת המסך


 void displayOFF(){

	    char data[4]="    ";

	    my4x7seg.write(data,4);

	    my4x7seg.refresh(10);

	}
  

הצגה של המילה go על המסך


void displayGO(){

	    char data[4]=" OG ";

	    my4x7seg.write(data,4);

	    my4x7seg.refresh(100);

	}
  

הצגה של פס על המסך


 void displayVoid(int refresh_time){

	    char data[4]="----";

	    my4x7seg.write(data,4);

	    my4x7seg.refresh(refresh_time);

	}
  

תגובות גולשים