YN AROS AM GYFIEITHIAD - DYCHWELWCH YN FUAN
Rydym wedi addasu'r deunydd a grëwyd ar gyfer ein Clwb Roboteg i unrhyw un allu ei ddefnyddio gartref neu yn yr ysgol.
Mae pob un o'r sesiynau isod yn cynnwys gwers fideo gan un o'n staff a set o ymarferion er mwyn asesu eich dealltwriaeth. Gan fod y dudalen hon ar gyfer dysgwyr annibynnol, mae'r atebion wedi'u cynnwys.
Rydym yn argymell bod dysgwyr yn ymweld â'n Cyfres Micro:Bit Ar-lein yn gyntaf i gael cyflwyniad i raglennu, a'n Cyfres Electroneg Ar-lein i ddeall mwy am y caledwedd a'r feddalwedd a ddefnyddir.
Dewiswch bennawd sesiwn i ddechrau arni.
Bydd angen i chi gopïo ein 'Valiant' Robot Tinkercad circuit i'ch cyfrif Tinkercad ar gyfer yr ymarferion hyn
I gael eich atgoffa o sut i fewngofnodi a defnyddio Tinkercad, gweler Sesiwn Un o'n Cyfres Electroneg Ar-lein
Mae'r heriau hyn yn golygu dechrau rhaglennu robot 'Valiant'.
Dylai pob dysgwr ddechrau ar lefel efydd a gweithio eu ffordd i fyny cyn belled ag y bo modd.
Cliciwch ar bennawd pob her i'w ehangu.
Pwysig: Gwnewch yn siŵr bod panel cod ar Tinkercad wedi'i osod i Text, fel y dangosir yma:
Y rhaglen a ddarperir yw rhaglen Arduino ddiofyn Tinkercad sy'n goleuo LED yr Arduino ac yn ei ddifodd.
Dilëwch gynnwys y void setup()
a'r void loop()
fel bod eich cod cychwyn yn edrych fel hyn:
//C++ code
//
void setup ()
{
}
void loop ()
{
}
void setup()
(ar ddechrau).
pinMode()
i ganfod pin sy'n cael ei ddefnyddio a gweld a yw'n INPUT neu'n OUTPUT.pinMode()
mae angen i ni ychwanegu rhif y pin a'i fod yn OUTPUT.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
void setup ()
{
pinMode(13, OUTPUT);
}
void loop ()
{
}
void loop()
(dolen am byth) ysgrifennwch y cod i oleuo'r LED hwn a'i ddiffodd.
Awgrym: Bydd angen i chi ychwanegu delay()
o 100ms rhwng newidiadau golau er mwyn eu gweld yn yr efelychydd.
digitalWrite()
i ddweud wrth gydran ddigidol am droi ymlaen neu ddiffodd.digitalWrite()
mae angen i ni gynnwys y pin rydym ni'n ei newid ac yna HIGH neu LOW.delay()
yn gwneud i'r rhaglen aros am y cyfnod o amser a nodir y tu mewn i'r cromfachau - wedi'i fesur mewn milieiliadau.void loop()
yn gweithio'r un fath â dolen am byth.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
void setup ()
{
pinMode(13, OUTPUT);
}
void loop ()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
Awgrym: Mae'r LDR/Photoresistor yn ddyfais mewnbwn analog.
void setup()
.pinMode()
fel yr eglurir yn yr ymarferion Lefel Efydd.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
}
void loop ()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
Awgrym: Dangoswyd sut mae sefydlu'r monitor cyfresol yn y wers fideo.
Serial.begin()
() y tu mewn i'r void setup()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop ()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
Awgrym: Mae'r gwerthoedd hyn yn gyfanrifau (rhifau cyfan). Mae hyn yn golygu bod angen i ni ddweud wrth y rhaglen fod hwn yn newidyn gyda math int
.
Pwysig: Mae'r lle y caiff newidyn ei greu yn y rhaglen yn penderfynu ble gellir ei ddefnyddio.
Ar gyfer y pwnc hwn, byddwn yn defnyddio Newidynnau Drwy'r Cyfan. Mae'r rhain yn newidynnau rydyn ni'n eu diffinio ar ddechrau rhaglen, cyn y void setup()
hyd yn oed. Mae hyn yn golygu y gallwn wedyn eu defnyddio mewn unrhyw ran a phob rhan o'r rhaglen.
Pe byddech chi'n creu newidyn y tu mewn i ddolen/swyddogaeth, dim ond y tu mewn i'r un ddolen/swyddogaeth honno y byddai'n hygyrch ac nid yn unrhyw ran arall o'r rhaglen. Byddai hyn yn cael ei alw'n Newidyn Lleol. Cofiwch, mae hyn yn golygu y bydd y newidyn yn cael ei ail-greu bob tro y bydd y ddolen/swyddogaeth y mae wedi ei osod ynddi yn rhedeg.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrValue = 0;
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop ()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
void loop()
, gwnewch yn siŵr bod eich newidyn gwrthydd golau-ddibynnol newydd (LDR) yn cyfateb i ddarlleniad y synhwyrydd LDR. Yna bydd y rhaglen yn argraffu gwerth y newidyn hwn i'r monitor cyfresol.
Awgrym: Mae'r LDR yn fewnbwn analog ac mae wedi'i gysylltu â phin A0.
analogRead()
gyda'r pin a nodir tu mewn i'w gromfachau.Serial.print()
yn dweud wrth y rhaglen am argraffu beth bynnag sydd o fewn ei gromfachau ar linell newydd y monitor cyfresol.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrValue = 0;
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop ()
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
ldrValue = analogRead(A0);
Serial.println(ldrValue);
}
Mae dadfygiwr wedi ei adeiladu i mewn i olygydd cod Tinkercad. Mae hyn yn rhoi gwybod i ni pan fydd gwall yn y cod a'r math o wall. Mae'n rhedeg bob tro y byddwn yn dechrau'r efelychiad. Yn yr ymarfer hwn byddwn yn cyflwyno gwallau i'n rhaglen er mwyn ein helpu i'w cyfateb i'r negeseuon gwall.
Newidiwch eich void setup()
i gyd-fynd â phob un o'r enghreifftiau isod er mwyn gweld y neges gwall a gynhyrchir.
Awgrym: gall y rhifau ar ddechrau'r negeseuon gwall fod yn wahanol gan eu bod yn cyfeirio at rifau llinell yn y cod sy'n dibynnu ar eich bylchiad.
1. Colli '}':
2. Colli '{':
void setup ()
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
3. Colli ';':
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT)
Serial.begin(9600);
}
4. Colli '()':
void setup
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
5. Camgymeriad Sillafu:
void setup ()
{
pinMoed(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
6. Colli ',':
void setup ()
{
pinMode(13 OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
In function 'void setup()':
13:1: error: a function-definition is not allowed here before '{' token
20:1: error: expected '}' at end of input
7:3: error: expected initializer before 'pinMode'
8:10: error: expected constructor, destructor, or type conversion before '(' token
9:3: error: 'Serial' does not name a type
10:1: error: expected declaration before '}' token
In function 'void setup()':
9:3: error: expected ';' before 'Serial'
5:6: error: variable or field 'setup' declared void
7:22: error: expected '}' before ';' token
8:10: error: expected constructor, destructor, or type conversion before '(' token
9:3: error: 'Serial' does not name a type
10:1: error: expected declaration before '}' token
In function 'void setup()':
7:3: error: 'pinMoed' was not declared in this scope
7:3: note: suggested alternative: 'pinMode'
1:0:
In function 'void setup()':
44:16: error: expected ')' before numeric constant
7:14: note: in expansion of macro 'OUTPUT'
7:20: error: too few arguments to function 'void pinMode(uint8_t, uint8_t)'
1:0:
134:6: note: declared here
Mae'r ymarferion hyn yn parhau i ddefnyddio'r rhaglen a ddatblygwyd yn Sesiwn Un.
Dylai pob dysgwr ddechrau ar lefel efydd a gweithio eu ffordd i fyny cyn belled ag y bo modd.
Cliciwch ar bennawd pob her i'w ehangu.
Awgrym: Gan ein bod yn dal i ddefnyddio'r LED, peidiwch â thynnu gosodiad pinMode
.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrValue = 0;
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop ()
{
ldrValue = analogRead(A0);
Serial.println(ldrValue);
}
Awgrym: Os gwnaethoch chi gwblhau'r ymarfer estyniad cyntaf yn llwyddiannus yn Sesiwn Un, cewch hepgor y cam hwn.
void setup()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(13, OUTPUT);
pinMode(A0, INPUT);
Serial.begin(9600);
}
void loop ()
{
ldrValue = analogRead(A0);
Serial.println(ldrValue);
}
Awgrym: Er ei bod yn ymddangos bod A0 yn gymysgedd o nodau a llythrennau, mae'n rhif pin ac felly caiff ei gydnabod fel cyfanrif.
void setup()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
void setup()
.void setup()
ac unwaith yn y void loop()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
void loop()
sy'n rhoi'r bwlb LED ymlaen pan fydd y darlleniad LDR yn llai na 160.
Awgrym: Os aethoch chi i'r afael â'r ymarferion estyniad yn Sesiwn Un, dim ond yr amod ar gyfer y datganiad-os mae angen i chi ei newid.
digitalWrite
gyda gwerthoedd HIGH a LOW.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
}
Awgrym: Enw'r llyfrgell/estyniad yw Servo.h
#include
i ychwanegu llyfrgell/estyniad.void setup()
.#include
hanner colon (;) ar y diwedd.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
}
Awgrym: Gall llyfrgelloedd ychwanegol fod â gwahanol ffyrdd o gynhyrchu newidynnau. Yn yr achos hwn, defnyddiwn y gorchymyn Servo variableName;
i ychwanegu servo.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
}
void setup()
i ddweud wrth y rhaglen pa bin mae myServo
wedi'i gysylltu iddo.
Awgrym: Mae'r gorchymyn llyfrgell Servo ar gyfer adnabod pinnau yn wahanol eto. Bydd angen i chi ddefnyddio strwythur gorchymynservoName.attach(pin);
servoName.attach(pin);
rhowch myServo yn lle servoName a servoPin yn lle'r pin.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
}
void loop()
, ysgrifennwch raglen gan ddefnyddio cyfarwyddiadau myServo.write(angle);
i wneud i'r servo symud rhwng onglau 0°, 90°, 180°, and back to 90°. Cynhwyswch un eiliad o saib ar ôl pob symudiad.
Awgrym: Mae cyfarwyddyd delay();
yn defnyddio milieiliadau ar gyfer y gwerth y tu mewn i'r cromfachau. 1000 milieiliadau = 1 eiliad.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
}
Awgrym: Bydd angen i chi edrych ar y gylched i wybod pa bin yw hwn.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
}
pinMode()
ar gyfer y swnyn y tu mewn i'r void setup()
.
Awgrym: Bydd angen i chi ystyried a yw'r swnyn yn fewnbwn neu'n allbwn.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
}
void loop()
eich rhaglen.tone(pin, frequency, duration);
void loop()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
#include <Servo.h>
Servo myServo;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
if (ldrValue < 60)
{
tone(piezo, 65, 500);
}
else if (ldrValue < 100)
{
tone(piezo, 82, 500);
}
else if (ldrValue < 160)
{
tone(piezo, 98, 500);
}
else if (ldrValue < 220)
{
tone(piezo, 131, 500);
}
else if (ldrValue < 280)
{
tone(piezo, 165, 500);
}
else if (ldrValue < 340)
{
tone(piezo, 196, 500);
}
else if (ldrValue < 400)
{
tone(piezo, 262, 500);
}
else if (ldrValue < 460)
{
tone(piezo, 330, 500);
}
else if (ldrValue < 520)
{
tone(piezo, 392, 500);
}
else
{
tone(piezo, 523, 500);
}
}
Ar gyfer yr ymarferion hyn byddem yn argymell eich bod yn defnyddio copi o'ch rhaglen rhag ofn i bethau fynd o chwith.
Mapio: Fel gyda'r codio bloc blaenorol yn Makecode a Tinkercad, mae'n bosib mapio amrediad o werthoedd o fewnbynnau i allbynnau yn lle cael os-datganiadau mor hir.
Ar gyfer hyn mae angen i ni greu gwerth i gynnal y mapio:
int mappedVariable = map(inputValue, inputMin, inputMax, outputMin, outputMax);
Er enghraifft, os hoffem fapio amrediad potensiomedr (mewnbwn analog) i LED (allbwn analog), i wneud yr LED yn fwy disglair wrth i werth y potensiomedr gynyddu, mae angen y wybodaeth ganlynol arnom:
Byddai'r rhaglen yn edrych rhywbeth fel hyn:
Awgrym: Amrediad LDR yn yr efelychydd Tinkercad yw 6 i 679. Caiff ongl y servo fod yn unrhyw beth rhwng 0 a 180.
Ystod amlder y swnyn yw 31 i 4978.
Byddwn yn parhau â'r rhaglen a gynhyrchwyd yn Sesiwn Dau.
Dylai pob dysgwr ddechrau ar lefel efydd a gweithio eu ffordd i fyny cyn belled ag y bo modd.
Cliciwch ar bennawd pob her i'w ehangu.
Bydd yr ymarferion hyn yn dangos i chi sut i sefydlu swyddogaethau modur ar gyfer y robot hwn.
Newidyn o'r enw leftForwardPin sydd wedi'i osod i 10,
Newidyn o'r enw leftReversePin sydd wedi'i osod i 11,
Newidyn o'r enw rightForwardPin sydd wedi'i osod i 9,
Newidyn o'r enw rightReversePin sydd wedi'i osod i 6.
void setup()
er mwyn i ni gael eu defnyddio drwy'r cyfan.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
pinMode(leftForwardPin, OUTPUT);
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
void setup ()
{
pinMode(leftForwardPin, OUTPUT);
pinMode(leftReversePin, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightReversePin, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
Awgrym: Mae'r moduron a ddefnyddir yn y gylched hon yn ddyfeisiau digidol.
void setup()
. Bydd hyn yn lleihau'r risg o gymysgu'r swyddogaethau newydd hyn yn ddamweiniol o fewn y rhaglen bresennol.
void functionName() { }
gyda'r cyfarwyddiadau y tu mewn i'r cromfachau cyrliog.
digitalWrite();
ar gyfer pob newidyn modur.
digitalWrite();
bydd angen i chi gynnwys y newidyn a nodi a yw'n HIGH neu'n LOW.
void forward()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
int ldrValue = 0;
void robotForward()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotReverse()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotLeft()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotRight()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotStop()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, LOW);
}
void setup ()
//C++ code
//
#include <Servo.h>
Servo myServo;
int leftForwardPin = 10;
int leftReversePin = 11;
int rightForwardPin = 9;
int rightReversePin = 6;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void robotForward()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotReverse()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotLeft()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotRight()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotStop()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, LOW);
}
void setup ()
{
pinMode(leftForwardPin, OUTPUT);
pinMode(leftReversePin, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightReversePin, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
if (ldrValue < 60)
{
tone(piezo, 65, 500);
}
else if (ldrValue < 100)
{
tone(piezo, 82, 500);
}
else if (ldrValue < 160)
{
tone(piezo, 98, 500);
}
else if (ldrValue < 220)
{
tone(piezo, 131, 500);
}
else if (ldrValue < 280)
{
tone(piezo, 165, 500);
}
else if (ldrValue < 340)
{
tone(piezo, 196, 500);
}
else if (ldrValue < 400)
{
tone(piezo, 262, 500);
}
else if (ldrValue < 460)
{
tone(piezo, 330, 500);
}
else if (ldrValue < 520)
{
tone(piezo, 392, 500);
}
else
{
tone(piezo, 523, 500);
}
}
void loop()
sy'n galw ein swyddogaethau newydd pan fydd eu hangen. Rydym am i'n robot wneud y canlynol cyn symud ei servo:
Awgrym: Defnyddiwch y cyfarwyddyd delay();
ar gyfer yr amseroedd.
functionName();
gan ddisodli enw'r swyddogaeth i gyd-fynd â'r un rydych chi'n ei galw.
robotForward()
, robotReverse()
, robotLeft()
, robotRight()
, a robotStop()
. Felly, gan ddefnyddio enwau'r swyddogaethau hyn, pe baem am i'r robot symud ymlaen am 5 eiliad ac yna stopio am 2 eiliad cyn symud yn ôl am 5 eiliad, byddem yn ysgrifennu:
robotForward();
delay(5000);
robotStop();
delay(2000);
robotReverse();
delay(5000);
robotStop();
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
robotForward();
delay(1000);
robotStop();
delay(500);
robotLeft();
delay(500);
robotRight();
delay(1000);
robotLeft();
delay(500);
robotStop();
delay(500);
robotReverse();
delay(1000);
robotStop();
delay(1000);
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
}
//C++ code
//
#include <Servo.h>
Servo myServo;
int leftForwardPin = 10;
int leftReversePin = 11;
int rightForwardPin = 9;
int rightReversePin = 6;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void robotForward()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotReverse()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotLeft()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotRight()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotStop()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, LOW);
}
void setup ()
{
pinMode(leftForwardPin, OUTPUT);
pinMode(leftReversePin, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightReversePin, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
robotForward();
delay(1000);
robotStop();
delay(500);
robotLeft();
delay(500);
robotRight();
delay(1000);
robotLeft();
delay(500);
robotStop();
delay(500);
robotReverse();
delay(1000);
robotStop();
delay(1000);
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
if (ldrValue < 60)
{
tone(piezo, 65, 500);
}
else if (ldrValue < 100)
{
tone(piezo, 82, 500);
}
else if (ldrValue < 160)
{
tone(piezo, 98, 500);
}
else if (ldrValue < 220)
{
tone(piezo, 131, 500);
}
else if (ldrValue < 280)
{
tone(piezo, 165, 500);
}
else if (ldrValue < 340)
{
tone(piezo, 196, 500);
}
else if (ldrValue < 400)
{
tone(piezo, 262, 500);
}
else if (ldrValue < 460)
{
tone(piezo, 330, 500);
}
else if (ldrValue < 520)
{
tone(piezo, 392, 500);
}
else
{
tone(piezo, 523, 500);
}
}
Rydym ni nawr yn mynd i sefydlu a rhaglennu'r synhwyrydd uwchsain.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhannau o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
int ultrasonicTrigger = 7;
int ultrasonicEcho = 8;
int leftForwardPin = 10;
int leftReversePin = 11;
int rightForwardPin = 9;
int rightReversePin = 6;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void setup ()
{
pinMode(ultrasonicTrigger, OUTPUT);
pinMode(ultrasonicEcho, INPUT);
pinMode(leftForwardPin, OUTPUT);
pinMode(leftReversePin, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightReversePin, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
Pwysig: Mae gan y synhwyrydd uwchsain broses osod gymhleth nad oes angen i chi boeni am ei dysgu ar hyn o bryd. Yn lle hynny, gofynnwn i chi gopïo'r swyddogaeth gyfrifo isod yn ofalus i'ch rhaglen yn union ar ôl eich swyddogaethau modur ond cyn y void setup();
.
int readUltrasonic()
{
digitalWrite(ultrasonicTrigger,LOW); // Clear the signal
delayMicroseconds(2);
digitalWrite(ultrasonicTrigger, HIGH); // Send out new signal
delayMicroseconds(10);
digitalWrite(ultrasonicTrigger,LOW); // Stop sending signal
unsigned long duration = pulseIn(ultrasonicEcho, HIGH);
int distance = duration /2 /29;
Serial.print(distance);
Serial.print("cm");
return distance;
}
Mae'r swyddogaeth hon yn rhoi'r pellter i wrthrych mae'n ei synhwyro mewn centimetrau. Gallwn nawr ei alw yn ein rhaglen i helpu gyda gweddill yr ymarfer hwn.
Sylwer os gwelwch yn dda: Os ydych chi'n defnyddio enwau newidyn gwahanol i'r rhai a ddarperir yng ngham 1, ni fydd hyn yn gweithio.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
myServo.write(0);
delay(1000);
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
readUltrasonic()
. Yna, ar ôl iddo symud i 90°, gosodwch y newidyn 'front' i alw'r un swyddogaeth. Ailadroddwch eto am 180° gyda newidyn 'right'. Nid oes angen darllen y pedwerydd symudiad gan ein bod eisoes wedi cymryd hwnnw.
Awgrym: Cofiwch, pwrpas y seibiau yw rhoi amser i'r servos orffen eu symudiadau felly dylid cymryd y darlleniadau ar ôl y saib ond cyn y symudiad nesaf.
myServo.write(0);
delay(1000);
left = readUltrasonic();
myServo.write(90);
delay(1000);
myServo.write(180);
delay(1000);
myServo.write(90);
delay(1000);
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
myServo.write(0);
delay(1000);
left = readUltrasonic();
myServo.write(90);
delay(1000);
front = readUltrasonic();
myServo.write(180);
delay(1000);
right = readUltrasonic();
myServo.write(90);
delay(1000);
Awgrym: Mae swyddogaeth readUltrasonic()
yn rhoi pellter mewn centimedrau.
front < 100
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
void loop()
, crëwch set o gyfarwyddiadau a fydd yn argraffu i'r monitor cyfresol p'un ai'r ochr dde ynteu'r chwith sydd fwyaf diogel i deithio iddi.
Awgrym: Bydd hyn yn gofyn am os-ddatganiad, arall-os datganiad, ac arall-datganiad. Defnyddir y datganiad arall i dangos pan fo'r ddau fesuriad yr un peth.
Serial.println("gair");
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd pob lefel.
myServo.write(0);
delay(1000);
left = readUltrasonic();
myServo.write(90);
delay(1000);
front = readUltrasonic();
myServo.write(180);
delay(1000);
right = readUltrasonic();
myServo.write(90);
delay(1000);
if (right > left)
{
Serial.println("right");
}
else if (left > right)
{
Serial.println("left");
}
else
{
Serial.println("no problem");
}
//C++ code
//
#include <Servo.h>
Servo myServo;
int left = 0;
int front = 0;
int right = 0;
int ultrasonicTrigger = 7;
int ultrasonicEcho = 8;
int leftForwardPin = 10;
int leftReversePin = 11;
int rightForwardPin = 9;
int rightReversePin = 6;
int piezo = A3;
int servoPin = 12;
int ldr = A0;
int blueLED = 13;
int ldrValue = 0;
void robotForward()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotReverse()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotLeft()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, HIGH);
digitalWrite(rightForwardPin, HIGH);
digitalWrite(rightReversePin, LOW);
}
void robotRight()
{
digitalWrite(leftForwardPin, HIGH);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, HIGH);
}
void robotStop()
{
digitalWrite(leftForwardPin, LOW);
digitalWrite(leftReversePin, LOW);
digitalWrite(rightForwardPin, LOW);
digitalWrite(rightReversePin, LOW);
}
int readUltrasonic()
{
digitalWrite(ultrasonicTrigger,LOW); // Clear the signal
delayMicroseconds(2);
digitalWrite(ultrasonicTrigger, HIGH); // Send out new signal
delayMicroseconds(10);
digitalWrite(ultrasonicTrigger,LOW); // Stop sending signal
unsigned long duration = pulseIn(ultrasonicEcho, HIGH);
int distance = duration /2 /29;
Serial.print(distance);
Serial.print("cm");
return distance;
}
void setup ()
{
pinMode(ultrasonicTrigger, OUTPUT);
pinMode(ultrasonicEcho, INPUT);
pinMode(leftForwardPin, OUTPUT);
pinMode(leftReversePin, OUTPUT);
pinMode(rightForwardPin, OUTPUT);
pinMode(rightReversePin, OUTPUT);
pinMode(blueLED, OUTPUT);
pinMode(ldr, INPUT);
Serial.begin(9600);
myServo.attach(servoPin);
pinMode(piezo, OUTPUT);
}
void loop ()
{
ldrValue = analogRead(ldr);
Serial.println(ldrValue);
if (ldrValue < 160)
{
digitalWrite(blueLED, HIGH);
}
else
{
digitalWrite(blueLED, LOW);
}
if (front < 100)
{
robotStop();
}
else
{
robotForward();
delay(1000);
robotStop();
delay(500);
robotLeft();
delay(500);
robotRight();
delay(1000);
robotLeft();
delay(500);
robotStop();
delay(500);
robotReverse();
delay(1000);
robotStop();
delay(1000);
}
myServo.write(0);
delay(1000);
left = readUltrasonic();
myServo.write(90);
delay(1000);
front = readUltrasonic();
myServo.write(180);
delay(1000);
right = readUltrasonic();
myServo.write(90);
delay(1000);
if (right > left)
{
Serial.println("right");
}
else if (left > right)
{
Serial.println("left");
}
else
{
Serial.println("no problem");
}
if (ldrValue < 60)
{
tone(piezo, 65, 500);
}
else if (ldrValue < 100)
{
tone(piezo, 82, 500);
}
else if (ldrValue < 160)
{
tone(piezo, 98, 500);
}
else if (ldrValue < 220)
{
tone(piezo, 131, 500);
}
else if (ldrValue < 280)
{
tone(piezo, 165, 500);
}
else if (ldrValue < 340)
{
tone(piezo, 196, 500);
}
else if (ldrValue < 400)
{
tone(piezo, 262, 500);
}
else if (ldrValue < 460)
{
tone(piezo, 330, 500);
}
else if (ldrValue < 520)
{
tone(piezo, 392, 500);
}
else
{
tone(piezo, 523, 500);
}
}
I gael her ychwanegol rhowch gynnig ar y canlynol mewn copi o'ch rhaglen.
Dilëwch y symudiadau presennol o'ch void loop()
() ac ysgrifennwch raglen newydd sydd yn golygu bod y robot yn defnyddio ei servos a'i ddarlleniadau uwchsonig cyn penderfynu pa ffordd i symud. Cofiwch, mae ein symudiadau chwith a dde yn cynnwys troi yn y fan a'r lle, mae'n rhaid i chi wedyn yrru ymlaen er mwyn mynd y ffordd honno.
Y sesiwn hon, byddwn yn defnyddio cylched Tinkercad wahanol i adolygu popeth a drafodwyd ar y pwnc hwn.
Bydd angen i chi gopïo ein cylched Bwrdd Synhwyrydd i'w defnyddio ar gyfer yr ymarferion hyn.
Mae sawl synwyrydd ac LED wedi'u gosod ar y bwrdd synhwyrydd hwn a bydd modd inni gopïo cyfres o wahanol ddyfeisiau yn y cartref.
Dylai pob dysgwr ddechrau ar lefel efydd a gweithio eu ffordd i fyny cyn belled ag y bo modd.
Cliciwch ar bennawd pob her i'w ehangu.
Yn yr adran hon, byddwn yn creu rhaglen sy'n defnyddio'r LDR / gwrthydd golau ddibynol i reoli disgleirdeb y bwlb LED coch.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
void setup ()
{
}
void loop ()
{
}
pinMode();
ar gyfer y ddwy gydran yma.
pinMode();
yn gofyn eich bod yn dweud gwerth y pin wrtho (o fewn y cromfachau) ac a yw'n fewnbwn ynteu'n allbwn.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
}
void loop ()
{
}
void loop()
ysgrifennwch raglen i storio gwerth yr LDR mewn newidyn.
Awgrym: Bydd angen i chi greu newidyn cyfanrifol newydd ar gyfer hyn.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Awgrym: Peidiwch ag anghofio cynnwys y cyfarwyddiadau gosod angenrheidiol i ddefnyddio'r monitor cyfresol.
void setup()
bydd angen i chi ychwanegu'r cyfarwyddyd Serial.begin(9600);
fel bod y rhaglen yn gwybod i ddefnyddio'r monitor cyfresol.void loop()
bydd angen i chi ysgrifennu gwerth y newidyn i'r monitor cyfresol.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Amrediad yr LDR yn efelychydd Tinkercad yw 6 i 679.
Mapio: Fel gyda'r codio bloc blaenorol yn Makecode a Tinkercad, mae'n bosib mapio amrediad o werthoedd o fewnbynnau i allbynnau yn lle cael os-ddatganiadau mor hir.
Ar gyfer hyn mae angen i ni greu gwerth i gynnal y mapio:
int mappedVariable = map(inputValue, inputMin, inputMax, outputMin, outputMax);
Er enghraifft, os hoffem fapio amrediad potensiomedr (mewnbwn analog) i LED (allbwn analog), i wneud yr LED yn fwy disglair wrth i werth y potentiometer gynyddu, mae angen y wybodaeth ganlynol arnom:
Byddai'r rhaglen yn edrych rhywbeth fel hyn:
map(inputValue, inputMin, inputMax, outputMin, outputMax)
; Rydym ni'n gwybod mai'r inputValue yw ein darlleniad o gam 4, yr inputMin yw 6 fel y darganfuwyd yng ngham 5, ac o'r un cam rydym hefyd yn gwybod mai 679 yw'r inputMax. Y bwlb LED yw'r allbwn, sydd ag amrediad o 0 - 255 bob amser.void loop()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
}
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 0, 255);
}
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
}
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 0, 255);
analogWrite(redLEDPin, ldrMapValue);
}
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
}
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
}
Parhewch i ddefnyddio'r rhaglen a ddatblygwyd yn y lefel efydd.
Yn y set hon o ymarferion, byddwn yn creu efelychiad o system wresogi cartref. Ar gyfer hyn, bydd angen i ni ddefnyddio'r synhwyrydd tymheredd i gasglu darlleniadau, y potensiomedr i ddewis ein lefel wresogi, a'r bylbiau LED glas a gwyrdd i ddangos pan fo'n rhy oer, ar y tymheredd cywir, ac yn rhy boeth.
Awgrym: Mae pedair elfen newydd yn cael eu hychwanegu; y synhwyrydd tymheredd, y potensiomedr, yr LED glas, a'r LED gwyrdd.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
void setup()
angenrheidiol ar gyfer y cydrannau hyn.
pinMode()
ar gyfer pob cydran.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
pinMode(tempPin, INPUT);
pinMode(potPin, INPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
}
Awgrym: Bydd angen newidyn newydd arnoch i gadw'r gwerth hwn.
Serial.println()
yn eich void loop()
i argraffu gwerth eich newidyn newydd.void loop()
yn rhedeg.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
}
Amrediad y synhwyrydd tymheredd yn yr efelychydd hwn yw 20 - 358.
Awgrym: Bydd angen newidyn newydd arnoch er mwyn cadw gwerth y tymheredd wedi'i drosi.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhannau o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
}
Awgrym: Peidiwch ag anghofio diffodd yr LED pan fydd y tymheredd yn gostwng yn ôl.
digitalWrite()
, gyda'r cyfarwyddiadau HIGH a LOW.delay()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
}
Awgrym: Mae hyn yn golygu defnyddio'r un dull ag a ddefnyddiwyd i drosi darlleniadau'r tymheredd.
Serial.print("")
a fydd yn argraffu beth bynnag sydd wedi'i deipio rhwng y dyfynodau o fewn y cromfachau.void loop()
i roi cyfle i chi ddarllen y monitor cyfresol cyn i'r rhaglen ailadrodd.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhannau o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
int potReading = 0;
int potDegreesC = 0;
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
delay(1000);
}
Awgrym: Dychmygwch fod hyn yn rhoi'r gwres ymlaen ar yr un pryd.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
if (tempDegreesC < potDegreesC)
{
digitalWrite(blueLEDPin, HIGH);
}
else
{
digitalWrite(blueLEDPin, LOW);
}
}
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
int potReading = 0;
int potDegreesC = 0;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
pinMode(tempPin, INPUT);
pinMode(potPin, INPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
}
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
if (tempDegreesC < potDegreesC)
{
digitalWrite(blueLEDPin, HIGH);
}
else
{
digitalWrite(blueLEDPin, LOW);
}
}
Gan barhau â'n rhaglen, byddwn nawr yn rhaglennu system diogelwch cartref gyda rhai o'r cydrannau eraill.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
int potReading = 0;
int potDegreesC = 0;
int pirPin = 4;
int bulbPin = 12;
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
pinMode(tempPin, INPUT);
pinMode(potPin, INPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(bulbPin, OUTPUT);
}
Felly, wrth greu newidyn i storio gwerth mewnbwn digidol, rydym yn defnyddio bool
yn hytrach nag int
.
void loop()
gosodwch y newidyn newydd hwn i ddarllen mewnbwn digidol y PIR.
digitalRead()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
int potReading = 0;
int potDegreesC = 0;
int pirPin = 4;
int bulbPin = 12;
bool pirReading = 0;
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
if (tempDegreesC < potDegreesC)
{
digitalWrite(blueLEDPin, HIGH);
}
else
{
digitalWrite(blueLEDPin, LOW);
}
pirReading = digitalRead(pirPin);
}
Amodau Boole: Mae amodau os-ddatganiad (neu arall os ddatganiad), yn rhai Boole - maent naill ai'n wir neu'n anwir. Os yn wir, mae'r rhaglen yn rhedeg ei chynnwys. Os nad yw'n wir (gau) mae'n neidio i'r adran nesaf.
Mae hyn yn golygu, pan fyddwn ni'n creu os-ddatganiad i wirio a yw newidyn Boole yn wir, gallwn ddefnyddio if (booleanVariable)
am fod yr amod eisoes yn gwirio i weld a yw'n wir.
Er enghraifft: Beth am ddweud fod gennym ni newidyn Boole o'r enw 'active' sy'n dweud wrth y rhaglen am raglennu i oleuo bwlb LED wedi'i gysylltu i bin 3 pan fydd 'active' yn wir. Dyma'r rhaglen ganlyniadol:
bool active = 0;
void setup()
{
pinMode(3, OUTPUT);
}
void loop()
{
active = FALSE;
if (active)
{
digitalWrite(3, HIGH);
}
else
{
digitalWrite(3, LOW);
}
}
Mae'r rhaglen hon yn gwirio i weld a yw gwerth Boole 'active' yn wir, ac nid yw'n wir, felly ni fydd y bwlb yn goleuo.
Os oeddech chi am newid y rhaglen i wneud y gwrthwyneb, gan oleuo'r LED pan fydd 'active' yn anwir, mae gennych ddau opsiwn. Gallech addasu'r cyfarwyddiadau yn y rhaglen flaenorol, fel hyn:
Fel arall, gallech fod wedi newid y cyflwr i 'false' gan ddefnyddio ebychnod (!) cyn enw'r newidyn, fel hyn:
Os ydych chi'n ysgrifennu if(boolVariable = TRUE)
or if(boolVariable = FALSE)
, bydd yn dal i weithio. Fodd bynnag, mae'n dangos nad yw'r rhaglennydd yn deall yn llwyr sut mae os-ddatganiadau'n gweithio.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dangosir y rhan o'r rhaglen a newidiwyd isod. Bydd y rhaglen lawn yn cael ei hychwanegu ar ddiwedd y lefel.
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
if (tempDegreesC < potDegreesC)
{
digitalWrite(blueLEDPin, HIGH);
}
else
{
digitalWrite(blueLEDPin, LOW);
}
pirReading = digitalRead(pirPin);
if (pirReading)
{
digitalWrite(bulbPin, HIGH);
delay(5000);
digitalWrite(bulbPin, LOW);
}
}
Erbyn hyn mae gennych olau diogelwch sy'n gweithio pan fydd rhywbeth yn symud gerllaw.
Awgrym: Mae angen mwy nag un newidyn ar rai o'r cydrannau hyn.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dyma enghraifft o'r cod newydd y mae angen ei ychwanegu. Cofiwch, gallai eich enw defnyddiwr amrywio. Mae'r rhaglen gyfan ar gael ar ddiwedd y lefel hon.
void setup()
ar gyfer y cydrannau newydd hyn.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dyma enghraifft o'r cod newydd y mae angen ei ychwanegu. Cofiwch, gallai eich enw defnyddiwr amrywio. Mae'r rhaglen gyfan ar gael ar ddiwedd y lefel hon.
pinMode(forcePin, INPUT);
pinMode(rgbRedLEDPin, OUTPUT);
pinMode(rgbGreenLEDPin, OUTPUT);
pinMode(rgbBlueLEDPin, OUTPUT);
pinMode(tiltPin, INPUT);
pinMode(ultraTrigPin, OUTPUT);
pinMode(ultraEchoPin, INPUT);
int readUltrasonic()
{
digitalWrite(ultrasonicTrigger,LOW); // Clear the signal
delayMicroseconds(2);
digitalWrite(ultrasonicTrigger, HIGH); // Send out new signal
delayMicroseconds(10);
digitalWrite(ultrasonicTrigger,LOW); // Stop sending signal
unsigned long duration = pulseIn(ultrasonicEcho, HIGH);
int distance = duration /2 /29;
Serial.print(distance);
Serial.print("cm");
return distance;
}
Bydd angen i chi newid y newidynnau o ultrasonicTrigger
ac ultrasonicEcho
yn y cod hwn i gyd-fynd ag enwau'r newidynnau a grëwyd gennych ar gyfer pinnau sbardun ac eco'r synhwyrydd uwchsain.
Awgrym: Gan fod hon yn swyddogaeth, rhaid ei chynnwys yn eich cod ar ôl y newidynnau, ond cyn yr adran void setup()
.
Rydym wedi ailysgrifennu'r cod a ddarparwyd i gyd-fynd ag enwau'r newidynnau yn ein rhaglen ateb.
int readUltrasonic()
{
digitalWrite(ultraTrigPin,LOW); // Clear the signal
delayMicroseconds(2);
digitalWrite(ultraTrigPin, HIGH); // Send out new signal
delayMicroseconds(10);
digitalWrite(ultraTrigPin,LOW); // Stop sending signal
unsigned long duration = pulseIn(ultraEchoPin, HIGH);
int distance = duration /2 /29;
Serial.print(distance);
Serial.print("cm");
return distance;
}
Rydym wedi ailysgrifennu'r cod a ddarparwyd i gyd-fynd ag enwau'r newidynnau yn ein rhaglen ateb.
void alarmSystem()
{
}
void loop()
, defnyddiwch y monitor cyfresol i gyfrifo'r amrediad ar gyfer y synhwyrydd grym. Cofiwch, mae llawer o werthoedd eisoes yn cael eu hargraffu, felly dylech gynnwys testun. Efallai y bydd angen i chi hefyd ychwanegu oediad er mwyn arafu allbrintiau'r monitor cyfresol.void loop()
.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dyma enghraifft o osod y newidynnau angenrheidiol i'r diben hwn:
Dyma'r cod sydd ei angen er mwyn dod o hyd i amrediad y synhwyrydd grym. Mae angen dileu hwn ar ôl iddo gael ei ddefnyddio.
forceReading = analogRead(forcePin);
Serial.println("Force Reading: ");
Serial.println(forceReading);
delay(1000);
alarmSystem(); //to test our new function's program.
Dyma'r cod ar gyfer ein swyddogaeth system larwm:
forceReading = analogRead(forcePin);
forceMapRed = map (forceReading, 0, 466, 0, 255);
analogWrite(rgbRedLEDPin, forceMapRed);
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dyma enghraifft o osod y newidynnau angenrheidiol i'r diben hwn:
int ultraMapBlue = 0;
Dyma'r cod sydd ei angen er mwyn dod o hyd i amrediad y synhwyrydd grym. Mae angen dileu hwn ar ôl iddo gael ei ddefnyddio.
Serial.println("Ultrasonic Distance:");
Serial.println(readUltrasonic());
delay(1000);
alarmSystem(); //to test our new function's program.
Dyma'r cod ar gyfer ein swyddogaeth system larwm:
ultraMapBlue = map (readUltrasonic(), 2, 331, 255, 0);
analogWrite(rgbBlueLEDPin, ultraMapBlue);
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Bydd angen i chi ychwanegu newidyn newydd ar gyfer darlleniad y synhwyrydd gogwydd.
bool tiltReading = 0;
Y rhaglen y bydd angen i chi ei hychwanegu at eich swyddogaeth system larwm. Gall enwau'r newidynnau fod yn wahanol i'ch rhai chi.
Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
Dylai'r swyddogaeth system larwm edrych fel hyn bellach:
void alarmSystem()
{
forceReading = analogRead(forcePin);
forceMapRed = map (forceReading, 0, 466, 0, 255);
analogWrite(rgbRedLEDPin, forceMapRed);
delay(250);
analogWrite(rgbRedLEDPin, 0);
ultraMapBlue = map (readUltrasonic(), 2, 331, 255, 0);
analogWrite(rgbBlueLEDPin, ultraMapBlue);
delay(250);
analogWrite(rgbBlueLEDPin, 0);
tiltReading = digitalRead(tiltPin);
if (tiltReading)
{
digitalWrite(rgbGreenLEDPin, HIGH);
}
else
{
digitalWrite(rgbGreenLEDPin, LOW);
}
delay(250);
digitalWrite(rgbGreenLEDPin, LOW);
}
void loop()
yn ystod y profion, nid ydym wedi penderfynu eto beth ddylid ei galw. Crëwch newidyn math Boole newydd o'r enw 'activate '. Byddwn yn defnyddio hwn i ddweud wrth y rhaglen bod angen i'r system larwm redeg os yw 'activate' wedi'i osod i TRUE.
void loop()
er mwyn profi.Os ydych chi'n dal yn sownd, defnyddiwch y botwm ateb isod.
//C++ code
//
int ldrPin = A5;
int redLEDPin = 3;
int ldrReading = 0;
int ldrMapValue = 0;
int tempPin = A4;
int potPin = A3;
int greenLEDPin = 5;
int blueLEDPin = 6;
int tempReading = 0;
int tempDegreesC = 0;
int potReading = 0;
int potDegreesC = 0;
int pirPin = 4;
int bulbPin = 12;
bool pirReading = 0;
int forcePin = A1;
int rgbRedLEDPin = 9;
int rgbGreenLEDPin = 10;
int rgbBlueLEDPin = 11;
int tiltPin = 2;
int ultraTrigPin = 7;
int ultraEchoPin = 8;
int forceReading = 0;
int forceMapRed = 0;
int ultraMapBlue = 0;
bool tiltReading = 0;
bool activate = 0;
int readUltrasonic()
{
digitalWrite(ultraTrigPin,LOW); // Clear the signal
delayMicroseconds(2);
digitalWrite(ultraTrigPin, HIGH); // Send out new signal
delayMicroseconds(10);
digitalWrite(ultraTrigPin,LOW); // Stop sending signal
unsigned long duration = pulseIn(ultraEchoPin, HIGH);
int distance = duration /2 /29;
Serial.print(distance);
Serial.print("cm");
return distance;
}
void alarmSystem()
{
forceReading = analogRead(forcePin);
forceMapRed = map (forceReading, 0, 466, 0, 255);
analogWrite(rgbRedLEDPin, forceMapRed);
delay(250);
analogWrite(rgbRedLEDPin, 0);
ultraMapBlue = map (readUltrasonic(), 2, 331, 255, 0);
analogWrite(rgbBlueLEDPin, ultraMapBlue);
delay(250);
analogWrite(rgbBlueLEDPin, 0);
tiltReading = digitalRead(tiltPin);
if (tiltReading)
{
digitalWrite(rgbGreenLEDPin, HIGH);
}
else
{
digitalWrite(rgbGreenLEDPin, LOW);
}
delay(250);
digitalWrite(rgbGreenLEDPin, LOW);
}
void setup ()
{
pinMode(ldrPin, INPUT);
pinMode(redLEDPin, OUTPUT);
Serial.begin(9600);
pinMode(tempPin, INPUT);
pinMode(potPin, INPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
pinMode(pirPin, INPUT);
pinMode(bulbPin, OUTPUT);
pinMode(forcePin, INPUT);
pinMode(rgbRedLEDPin, OUTPUT);
pinMode(rgbGreenLEDPin, OUTPUT);
pinMode(rgbBlueLEDPin, OUTPUT);
pinMode(tiltPin, INPUT);
pinMode(ultraTrigPin, OUTPUT);
pinMode(ultraEchoPin, INPUT);
}
void loop ()
{
ldrReading = analogRead(ldrPin);
Serial.println(ldrReading);
ldrMapValue = map(ldrReading, 6, 679, 255, 0);
analogWrite(redLEDPin, ldrMapValue);
tempReading = analogRead(tempPin);
Serial.println(tempReading);
tempDegreesC = map(tempReading, 20, 358, -40, 125);
if (tempDegreesC > 50)
{
digitalWrite(greenLEDPin, HIGH);
delay(250);
digitalWrite(greenLEDPin, LOW);
delay(250);
}
else if (tempDegreesC > 20)
{
digitalWrite(greenLEDPin, HIGH);
}
else
{
digitalWrite(greenLEDPin, LOW);
}
potReading = analogRead(potPin);
Serial.println("Potentiometer reading: ");
Serial.println(potReading);
potDegreesC = map(potReading, 0, 1023, 5, 35);
Serial.println("Potentiometer in degrees: ");
Serial.println(potDegreesC);
if (tempDegreesC < potDegreesC)
{
digitalWrite(blueLEDPin, HIGH);
}
else
{
digitalWrite(blueLEDPin, LOW);
}
pirReading = digitalRead(pirPin);
if (pirReading)
{
digitalWrite(bulbPin, HIGH);
delay(5000);
digitalWrite(bulbPin, LOW);
}
activate = 1;
if (activate)
{
alarmSystem();
}
}
Os hoffech chi barhau i weithio gyda'r gylched a'r rhaglen hon, dyma rai syniadau ychwanegol i chi.