פעם שעברה הרכבנו את הטלפון על המטריצה והפונקציות הבסיסיות עבדו, עכשיו הטלפון מתחיל לתפוס צורה ולמעשה מוכן להפעלה.
הפונקציה של שליחת מסרונים ירדה מהפרק בגלל המורכבות שלה. הפונקציה של זיהוי שיחה ירדה גם היא מהפרק כדי לשמור על אלמנט ההפתעה, מי זה מתקשר? נושים מהבנק? אקסית קנאית? נהיה חייבים לענות כדי לדעת.
ההפעלה היא פשוטה כדי לעשות שיחה מקלידים את המספר ולוחצים על מקש B, כדי לענות לשיחה נכנסת לוחצים על מקש A כדי לנתק שיחה לוחצים על מקש D וכדי לנקות את המסך במקרה שהקלדנו מספר לא נכון לוחצים על מקש C.
יש גם חיבורים חיצוניים לכל הרכיבים – למסך יש חיבורי I2C לתקשורת וחיבור מתח, יש חיבורים ללוח מקשים לרמקול למיקרופון ולבטריה.
החיבור המעניין שנוסף הוא אפשרות לתכנת את הבקר ושם יש את החיבורים RX,TX,RESET,3.3V,GND. ככה אפשר לשנות את התוכנה שנמצאת עליו עם כל מתכנת UART או עם ארדואינו אונו, ובנוסף לעשות דיבאגינג.
הקוד דומה לפעם שעברה עם תוספת קטנה של ניתוק שיחה. גם ספרית OLED הוחלפה לספריה קצת יותר סימפטית.
#include "Adafruit_FONA.h" #include <Keypad.h> #include <Wire.h> #include <SoftwareSerial.h> #include "ssd1306.h" #define FONA_RX 2 #define FONA_TX 3 #define FONA_RST 4 SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); SoftwareSerial *fonaSerial = &fonaSS; Adafruit_FONA fona = Adafruit_FONA(FONA_RST); const byte ROWS = 4; //four rows const byte COLS = 4; //three columns char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#', 'D'} }; int counter = 0; char number[11]; byte rowPins[ROWS] = {5, 6, 7, 8}; //connect to the row pinouts of the keypad byte colPins[COLS] = {9, 10, 11, 12}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ fonaSerial->begin(9600); if (! fona.begin(*fonaSerial)) { while (1); } Wire.begin(); ssd1306_128x64_i2c_init(); ssd1306_fillScreen(0x00); ssd1306_setFixedFont(ssd1306xled_font6x8); ssd1306_printFixedN (8, 8, "ARDUPHONE", STYLE_BOLD, FONT_SIZE_2X); } void loop(){ char key = keypad.getKey(); if (key){ // if press any key if (key == 'A' ){ fona.pickUp(); // answer phone } else if(key == 'B'){ // make a call counter = 0; // initialize counter array fona.callPhone(number); } else if(key == 'C'){ // clear display and initialize counter ssd1306_fillScreen(0x00); ssd1306_printFixedN (8, 8, "ARDUPHONE", STYLE_BOLD, FONT_SIZE_2X); counter = 0; for(int i=0;i<11;i++){ number[i] = ' '; } } else if(key == 'D'){ // hang up phone fona.hangUp(); } else{ number[counter] = key; // put the key in number ssd1306_printFixedN (0, 50, number, STYLE_NORMAL, FONT_SIZE_2X); counter = counter + 1; // go up counter delay(500); // delay for buttons } } }
יש בעולם שלושה סוגים של הלחמות – הלחמות יפות, הלחמות מכוערות והלחמות כל כך מגוחכות שזה מצחיק. ההלחמה פה שייכת לסוג השלישי:
לאור ההלחמה השערורייתית הזאת מתחיל לגרד באצבעות לעצב לוח מודפס. אפשר לעשות את זה עם פריצינג.
הלוח המודפס הזה לא הכי אסטתי אבל עושה את העבודה כמו שצריך, תמיד אפשר לשפר אחרי זה.
בשרטוט גם לא רואים אבל פסי הנחושת של המתח צריכים גם להיות יותר עבים כי עוברים בהם עד 2 אמפר ברגעים מסוימים.
שימו לב שהמיקרופון בסופו של דבר יושב על הלוח, כמה שהחוטים שלו ארוכים יותר כך יש יותר סיכוי לרעשים. אפשר לסנן רעשים על ידי חוטים מסוככים ומלופפים שמבטלים EMI אבל אם אפשר לבטל את החוטים לגמרי אפילו יותר טוב.
שאלה שצריכה להשאל היא למה ללכת על לוח מודפס? אם אנחנו מייצרים יצור המוני המוצר מאבד את כל היחודיות שלו וכל הזמן והאהבה שהשקענו במוצר הולכים לפח. בסופו של עניין החלטתי לייצר שלושה לוחות מודפסים אבל בשום אופן לא יותר מזה.
הפלאפון הזה הוא מוצר בעבודת יד וכל מה שנשאר עכשיו זה לארוז אותו…. יש לי הרגשה שאני יודע איפה לעשות את זה.
האם אפשר תרשים יותר פשוט? כמו בחלק א?
היי אשמח לעזרה ממש לפרט את התוכנית כי אני מאוד רוצה לנסות לעשות את זה בעצמי וכבר קניתי את המוצרים שצריך להפעיל ואשמח גם עם תוכנית להכין טלפון עם מסך מגע