קורס אמבדד – RB19-04 מבוא למיקרובקרים – תכנות ואלקטרוניקה – מחרוזות
מסך OLED
שלבים הוספת OLED
1.הוספת חומרה – מסך OLED
2. הוספת דרייבר תכונה למסך OLED
3. הוספת קוד תוכנה לכתיבה למסך OLED
חיבור מסך – קישור תוכנה
https://wokwi.com/projects/350341364144144978
הוספת דרבייר תוכנה לחומרה
תוכנה פשוטה לכתיבה למסך
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED width, in pixels #define SCREEN_HEIGHT 64 // OLED height, in pixels // create an OLED display object connected to I2C Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { Serial.begin(9600); // initialize OLED display with I2C address 0x3C if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("failed to start SSD1306 OLED")); while (1); } delay(2000); // wait two seconds for initializing oled.clearDisplay(); // clear display oled.setTextSize(1); // set text size oled.setTextColor(WHITE); // set text color oled.setCursor(0, 2); // set position to display (x,y) oled.println("Robotronix"); // set text oled.display(); // display on OLED } void loop() { } |
מבוא למחרוזות – מערכים המשך
מערך הינו משתנה עם הרבה מאוד תאים , ניתן לפנות לכל מתשנה דרך אינדקס.
סרטון העשרה : מודם לווייני
תו בודד : משתנה טיפוס char
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
void setup() { // Initialize serial communication at 9600 bits per second Serial.begin(9600); } void loop() { // Declare and initialize a char variable char myCharacter = 'A'; // Print the char variable Serial.print("The character is: "); Serial.println(myCharacter); // Wait for a second delay(1000); } |
טבלת – ASCII
בנה תוכנית בשפת C בסביבת ארדואינו שמדפיסה טבלת ASCII – שימוש בפונקציה ()char
https://wokwi.com/projects/367911371728770049
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
void printAsciiTable(void) { int j; float avg=0; for(j=0;j<255;j++) { Serial.print("Dec : "); Serial.print(j); Serial.print(" , "); Serial.println(char(j)); } } void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.println("Array start"); printAsciiTable(); } void loop() { // put your main code here, to run repeatedly: delay(10); // this speeds up the simulation } |
קליטת תו בודד –
https://wokwi.com/projects/367911659129827329
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
char msg[80]; // array to store incoming characters int idx = 0; // index into array int ledPins[] = {15, 2, 4, 5}; int numLeds = 4; int i = 0; char ch; void setup() { // array of GPIO pins Serial.begin(115200); Serial.println("Program start "); for (i=0; i < numLeds; i++) { pinMode(ledPins[i], OUTPUT); } // Initialize each GPIO pin as an output and turn on the LED for (i = 3; i >= 0; i--) { digitalWrite(ledPins[i], LOW); delay(500); } } void loop() { // No code needed in the loop for this example // Check if data is available to read if (Serial.available() > 0) { ch = Serial.read(); if (ch=='1') { digitalWrite(ledPins[0], HIGH); Serial.println("key 1 pressed"); } if (ch=='2') { digitalWrite(ledPins[1], HIGH); Serial.println("key 2 pressed"); } if (ch=='3') { digitalWrite(ledPins[2], HIGH); Serial.println("key 3 pressed"); } if (ch=='4') { digitalWrite(ledPins[3], HIGH); Serial.println("key 4 pressed"); } if (ch=='5') { for (i = 3; i >= 0; i--) { digitalWrite(ledPins[i], LOW); delay(500); } } if (ch=='6') { for (i = 3; i >= 0; i--) { digitalWrite(ledPins[i], HIGH); delay(500); } } } } |
מחרוזות :
הגדרת מחרזות והדפסה שלהם
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
void setup() { // Initialize serial communication at 9600 bits per second Serial.begin(9600); char msg[80]; strcpy(msg, "http://robotronix.co.il"); // copy the URL into the msg array Serial.println(msg); // print the URL // Print the length of msg Serial.print("Length of msg: "); Serial.println(strlen(msg)); // Check the URL and print the appropriate message if (strstr(msg, ".co.il") != NULL) { Serial.println("Israeli site"); } else if (strstr(msg, ".com") != NULL) { Serial.println("Commercial site"); } else if (strstr(msg, ".it") != NULL) { Serial.println("Italian site"); } // Check if the site uses HTTPS or HTTP if (strstr(msg, "https://") != NULL) { Serial.println("Site is secure"); } else if (strstr(msg, "http://") != NULL) { Serial.println("Site is not secure"); } } void loop() { // No need for code in the loop for this example } |
קריאת ערכים מכניסה סיריאלית
https://wokwi.com/projects/367273385352846337
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
char msg[80]; // array to store incoming characters int idx = 0; // index into array void setup() { // Initialize serial communication at 9600 bits per second Serial.begin(9600); } void loop() { // Check if data is available to read if (Serial.available() > 0) { char receivedChar = Serial.read(); // If received character is a newline, print the message and reset the index if (receivedChar == '\n') { msg[idx] = '\0'; // Null-terminate the C-string Serial.print("Received message: "); Serial.println(msg); idx = 0; // Reset index to start storing at the beginning of msg } else if (idx < sizeof(msg) - 1) { // Ensure we don't go past the end of the array // Add the received character to the msg array msg[idx] = receivedChar; idx++; } } } |
פתור תרגול 2 שאלה 3
תרגיל כיתה 1 :
1. הוסף לתוכנית הבאה משקה moka ללד כחול : https://wokwi.com/projects/367273385352846337
2. תקן את התוכנית הבא רמז שורה 9 : https://wokwi.com/projects/367252012078679041
3. תקן את השגיאות בקוד התכונה : https://wokwi.com/projects/367273813452882945
תרגיל כיתה 2 :
1 כתוב פנקציה בשם GetTemarture אשר לא מקבלת ערכים ומחזירה ערך אקראי מסוג int בין 200 ל 25 מעלות
2.הוסף למסך חומרה מסך OLED אשר מגציהה בתוך LOOP את ערך הפונקציה GetTemarture בדלאי של 1000 מילי שניה . כתוב בתוך LOOP
2.כאשר לוצים על כפתור המסך מתנקה
תרגיל כיתה 3 : מנעול חשמלי – ( עבודה בזוגות )
1.בנה תוכנה של מנעול חשמלי הכוללךת סרבו , לד אדום , לד ירוק., סרבו מאותחל למצב 0 מעלות
2 הגדר בתוכנית נתון קוד פתיחה "1234"
3.למשתמש יש 3 ניסיונות להקלדת קוד מתשמש עם לולאת for אם טעה מדליק לד אדום , אם טעה ב 3 פעם בהקלדת סיסמא , התוכנה נתקעת ל 10 שניות ומציגה על המסך ספירה
4. אם הקוד נכון נלדק לד ירוק ,סרבו זז ל 180 ונשמע צפצוף 3 פעמים
5. הוסף מסך OLED אם בתחילת התוכנית התוכנה מנקה את המסך , אם הרודל קוד נכון ווהמנעול מפתח כובת למבך בפונט 3 OPEN אם נכל כותבת Fail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
void setup() { // Initialize serial communication at 9600 bits per second Serial.begin(9600); } void loop() { // Define weight and height float weight = 70.0; // weight in kilograms float height = 1.75; // height in meters // Calculate BMI and print result calculateAndPrintBMI(weight, height); // Wait for a second delay(1000); } void calculateAndPrintBMI(float weight, float height) { // Calculate BMI float bmi = weight / (height * height); // Print the result Serial.print("BMI is: "); Serial.println(bmi); // Print BMI classification if (bmi < 18.5) { Serial.println("Underweight"); } else if (bmi < 24.9) { Serial.println("Normal weight"); } else if (bmi < 29.9) { Serial.println("Overweight"); } else { Serial.println("Obesity"); } } |
אקסלומר וגיירוסקופ – אלקטרוני
https://wokwi.com/projects/348859059935380052
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
// robotics blocks - Trafic light - Kids road Gase #include <ESP32Servo.h> const int servoPin = 18; int buttonOpenState; int buttonCloseState; #define ledRed 4 #define ledGreen 2 #define buttonOpen 12 #define buttonClose 14 int pos = 90; Servo servo; char gateState=0; // 0= close , 1 = open void setup() { // initialize serial for debugging Serial.begin(115200); Serial.println("start....system"); pinMode(buttonOpen, INPUT_PULLUP); pinMode(buttonClose, INPUT_PULLUP); pinMode(ledRed,OUTPUT); pinMode(ledGreen,OUTPUT); servo.attach(servoPin, 500, 2400); servo.write(90); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk"); } void loop() { buttonOpenState = digitalRead(buttonOpen); buttonCloseState = digitalRead(buttonClose) ; if ( (buttonOpenState==0) && (gateState==0)) { // open gate digitalWrite(ledGreen, LOW); digitalWrite(ledRed, HIGH); for (pos =90; pos <= 180; pos = pos + 1) { servo.write(pos); // Serial.println(pos); digitalWrite(ledRed, HIGH); delay(15); } gateState=1; Serial.println("Road close- kids can walk"); } if( (buttonCloseState==0) && (gateState==1) ) { // close gate if(pos>=180) // check if gate is already opemed { for (pos =180; pos >= 90; pos =pos- 1) { servo.write(pos); // Serial.println(pos); delay(15); } gateState=0; digitalWrite(ledRed , LOW); digitalWrite(ledGreen,HIGH); Serial.println("Road Open- kids can not walk "); } } } |