קורס אמבדד – RB19-02 מבוא למיקרובקרים – תרגול + פתרון
פתרון יעלה בהמשך
תרגיל 1: פוטנציומטר , לדים ומשפטי תנאי
בנה תוכנה בשפת C בסביבת ארדואינו על ידי שימוש ב https://wokwi.com בחר במעבד ESP32
- חבר לפין 35 פוטנציומטר
- חבר לפין מספר 2 לד אדום
- אם ערך הפונציומטר קטן או שווה מ 1000 הדלק רק אור אדום
- אם ערך הפונטציומטר גדול מ 1000 וקטן מ 3000 הדלק רק אור ירוק
- אם ערך הפונטציומטר גדול או שווה מ 3000 הדלק רק אור כחול מהבהב
- שלח את ערך הפווטנציומטר לטרמינל
תרגיל 2 – משתנים ולולאות
- מה טווח הערכים של משתנה מסוג char
- מה טווח הערכים של משתנה של int
- מה טווח הערכים של משתנה float
- מה תפקיד unsigned עבור char ו int
- בנה תוכנה שמדפיסה מ 10 עד 60 את המשנה j . בהתחלה מדפיסה START ובסוף END
- שנה את קוד התוכנה בסאיף 5 שידפס בקפיצות של 10
- בנה תוכנה שמדפיסה מ 50 – עד 60 את המשתנה j .
תרגיל 3 – סרבו , קליטת לחצן , משפטי תנאי , ציפצוף חירום שימוש בבאזר
תוכנות עזר : https://wokwi.com/projects/348323129018286675
תוכנת עזר : https://wokwi.com/projects/367266327027947521
תוכנת עזר : https://wokwi.com/projects/367267691172942849
- בנה תוכנת השקייה על ידי סרבו שמשקה כל 10 שניות למשך 5 שניות , מוגדר ש 180 מעלות סרבו פתוח , 0 מעלות סרבו סגור אין השקיה ,
- שהסרבו פתוח ל 180 מעלות נדלק או כחול , שמערכת ההשקיה לא משקה , האור הכחול כבוי
- הגדר מצב חירום שאם נלחץ כפתור חירום בצבע אדום , נשלחת למסך הודעת STOP ונלדק אור אדום , ומפעיל צפצוף על ידי באזר אין סופי עלידי רכיב באזר
תרגיל 4 : תרגול תיקון שגיאות בתוכנה
- תקן את התוכנית הבאה https://wokwi.com/projects/367621120836528129
- תקןן את התכונית הבאה https://wokwi.com/projects/367621320378458113
פתרון תרגיל 1
שאלה 1
https://wokwi.com/projects/368088764239250433
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 |
int potpin = 35; int val; #define LedRed 2 #define LedGreen 15 #define LedBlue 4 int State=1; void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.print("start potentiometer example "); pinMode(LedRed, OUTPUT); pinMode(LedGreen, OUTPUT); pinMode(LedBlue, OUTPUT); } /* אם ערך הפונציומטר קטן או שווה מ 1000 הדלק רק אור אדום אם ערך הפונטציומטר גדול מ 1000 וקטן מ 3000 הדלק רק אור ירוק אם ערך הפונטציומטר גדול או שווה מ 3000 הדלק רק אור כחול מהבהב */ void loop() { val = analogRead(potpin); Serial.print("val : "); Serial.println(val); //------------------------- if (val <= 1000) { digitalWrite(LedRed , HIGH); } else { digitalWrite(LedRed, LOW); } if ( (val > 1000) && (val < 3000) ) { digitalWrite(LedGreen, HIGH); } else { digitalWrite(LedGreen, LOW); } if (val >= 3000 ) { // BLINKING LED if (State==1) { digitalWrite(LedBlue, HIGH); State=0; } else { digitalWrite(LedBlue, LOW); State=1; } } else { digitalWrite(LedBlue, LOW); } // Turn on LED at GPIO15 delay(500); } |
פתרון תרגיל 3
סאיף 1- 4
סאיף 4
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 |
void setup() { int j; // put your setup code here, to run once: Serial.begin(115200); Serial.println("start"); delay(1000); for(j=10;j<=60;j=j+10) { Serial.println(j); } Serial.println("end"); } void loop() { // put your main code here, to run repeatedly: delay(10); // this speeds up the simulation } |
סאיף 5
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 |
void setup() { int j; // put your setup code here, to run once: Serial.begin(115200); Serial.println("start"); delay(1000); for(j=10;j<=60;j++) { Serial.println(j); } Serial.println("end"); } void loop() { // put your main code here, to run repeatedly: delay(10); // this speeds up the simulation } |
סאיף 6
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 |
void setup() { int j; // put your setup code here, to run once: Serial.begin(115200); Serial.println("start"); delay(1000); for(j=10;j<=60;j=j+10) { Serial.println(j); } Serial.println("end"); } void loop() { // put your main code here, to run repeatedly: delay(10); // this speeds up the simulation } |
סאיף 7
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 |
void setup() { int j; // put your setup code here, to run once: Serial.begin(115200); Serial.println("start"); delay(1000); for(j=-50;j<=60;j++) { Serial.println(j); } Serial.println("end"); } void loop() { // put your main code here, to run repeatedly: delay(10); // this speeds up the simulation } |
פתרון תרגיל 3
https://wokwi.com/projects/368150523892717569
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
#include "ESP32Servo.h" Servo myservo; #define Servo1Pin 19 #define ledWatringOn 2 #define ledEmg 15 #define button 12 #define speaker1 4 #define WaterOpen 180 #define WaterClose 0 int buttonState; int IsEmg=0; void setup() { // put your setup code here, to run once: myservo.attach(Servo1Pin); pinMode(ledWatringOn,OUTPUT); pinMode(ledEmg,OUTPUT); pinMode(button, INPUT_PULLUP); pinMode(speaker1, OUTPUT); Serial.begin(115200); Serial.println("start program"); digitalWrite(ledWatringOn, LOW); digitalWrite(ledEmg, LOW); /* myservo.write(0); Serial.println("Servo 0"); // close delay(3000); Serial.println("Servo 180"); // open myservo.write(180); */ } void loop() { if (IsEmg!=1) { digitalWrite(ledWatringOn, LOW); myservo.write(WaterClose); for(int i=0;i<10;i++) { Serial.println("Not watering"); buttonState = digitalRead(button); if ( buttonState==0) { //Serial.println("Emg pressed"); Serial.println("Stop"); myservo.write(WaterClose); digitalWrite(ledWatringOn, LOW); digitalWrite(ledEmg, HIGH); IsEmg=1; break; } if ( buttonState==1) { digitalWrite(ledEmg, LOW); // Serial.println("Emg not pressed "); } delay(1000); } } if (IsEmg!=1) { digitalWrite(ledWatringOn, HIGH); myservo.write(WaterOpen); for(int i=0;i<5;i++) { Serial.println("watering"); buttonState = digitalRead(button); if ( buttonState==0) { //Serial.println("Emg pressed"); Serial.println("Stop"); myservo.write(WaterClose); digitalWrite(ledWatringOn, LOW); digitalWrite(ledEmg, HIGH); IsEmg=1; break; } if ( buttonState==1) { digitalWrite(ledEmg, LOW); // Serial.println("Emg not pressed "); } delay(1000); } } // if Emg=1 if (IsEmg==1) { Serial.println("System Stoped : Emg button pressed "); for(;;) { tone(speaker1, 1700); // Send 1200KHz sound signal, which is a G tone delay(50); noTone(speaker1); // Stop sound delay(500); } } // put your main code here, to run repeatedly: delay(1000); // this speeds up the simulation } |
פתרון תרגיל 4