Deoarece sunt multe proiecte, mai simple sau mai complexe, cu placile de dezvoltare Arduino, un neinitiat poate sa se sperie... am cautat un tutorial pentru incepatori, dar nu am gasit, asa ca voi face eu unul.
Sa zicem ca nu ati luat o placa Arduino Uno, ci una Arduino Nano... modul de functionare este similar.
Daca alimentati dintr-o mufa USB de la PC sau laptop, pe placa este un led aprins, care indica alimentarea placii, iar unul va clipi odate pe secunda. Dupa cum se constata, ledul ce se aprinde cu intermitenta este cel conectat la pinul digital numit D13, printr-o rezistenta la masa.
Dupa ce vom capata un pic de experienta, vom realiza montaje pe breadboard
Urmatorul pas important este descarcarea programului ce ne ajuta la scrierea si incarcarea programelor in placa de dezvoltare Arduino.
Bun, dupa instalarea programului, avand placa conectata, trebuie sa fim siguri ca s-a instalat driver-ul interfetei USB, care, in cazul acestei placi este un CH340:
Daca am rezolvat acest pas, vom alege placa Arduin Nano
cu portul activ
alegem versiunea cu "old bootloader"
observand in coltul din dreapta jos informatiile
Daca ati reusit sa urmati acesti pasi cu rezultate similare (clar va fi alt port), putem trece la modificarea programului BLINK, care se gaseste la exemplele venite cu programul Arduino IDE:
In prima faza, nu vor urmari structura programelor (sketch-urilor) Arduino, ci vom modifica o valoare dintr-o linie, si anume delay(1000); care inseamna o pauza de 1 secunda (1000ms)
acasta linie este pusa dupa aprinderea ledului, care este, in programul original delay(1000), iar noi o vom modifica in delay(100), adica o intrarziere de 0,1secunde
Deoarece am scos doar un zero, nu ar trebui sa fie probleme, dar vom verifica oricum, prin compilarea programului
care ar trebui sa se termine cu mesajul
Urmeaza incarcarea programului in placa Arduino Nano
care se incheie cu mesajul
Dupa ce ati trecut prin acesti pasi cu succes, puteti incerca si alte variante de programe, cu efecte de stingere/aprindere ale ledului de la D13, acestea se gasesc pe canalul meu de Github, la adresa https://github.com/tehniq3/blink
Pentru cei care sunt obisnuiti sa reproduca experimentele din filmulete, am facut si eu unul:
Pana acum am folosit pentru a partea de ceasuri module sau integrate propriu-zise DS1307, dar am observat ca precizia lor nu este asa ridicata, asa ca am achizitionat, acum ceva timp, si un modul cu DS3231, care este mult mai precis, avand si o compensare cu temperatura.
Pentru a vedeam cum lucreaza am folosit un sketch gasit la http://www.goodliffe.org.uk/arduino/rtc_ds3231.php, care prezinta data, ora si temperatura pe ecranul de monitorizare seriala, de asemenea, reglajul se face tot prin intermediul ecranului de monitorizare seriala, scriind un text de genul T1124154091014.
Schema de conectare este foarte simpla, conectandu-se alimentarea (5V si GND) si firele de comunicatie pe protocol i2c (SDA si SCL). Montajul cu o placa Arduino Mega si un modul de ceas cu DS3231 arata asa:
Pe ecranul de monotorizare seriala apare:
iar pentru a schimba ora/data:
Formatul de programare a orei si date este urmatorul de genul T0058113130515, care are urmatoarea semnificatie:
- 00: secundele (din 2 cifre: 00..59)
- 58: minutele (din 2 cifre: 00..59)
- 11: ora (din 2 cifre: 00..23)
- 3: numarul zilei din saptamana, in cazul meu, miercuri a 3-a zi din saptamana (o singura cifra: 1..7)
- 13: ziua: 1..31
- 05: luna: 1..12
- 15: ultimele 2 cifre din an: 00..99
Sketch-ul modificat de mine sa arata ziua in romana si dupa valoarea temperaturii grad Celsius este:
// original sketch from http://www.goodliffe.org.uk/arduino/rtc_ds3231.php
#include <Wire.h>
#define DS3231_I2C_ADDRESS 104
// SCL - pin A5// SDA - pin A4// To set the clock, run the sketch and use the serial monitor.// Enter T1124154091014; the code will read this and set the clock. See the code for full details.//byte seconds, minutes, hours, day, date, month, year;
char weekDay[4];
byte tMSB, tLSB;
float temp3231;
voidsetup()
{
Wire.begin();
Serial.begin(9600);
}
voidloop()
{
watchConsole();
get3231Date();
Serial.print(weekDay); Serial.print(", "); Serial.print(date, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" - ");
Serial.print(hours, DEC); Serial.print(":");
if (minutes < 10){
Serial.print("0");
Serial.print(minutes, DEC);
}
else{
Serial.print(minutes, DEC);
}
Serial.print(":");
if (seconds < 10){
Serial.print("0");
Serial.print(seconds, DEC);
}
else{
Serial.print(seconds, DEC);
}
Serial.println(" ");
Serial.print(" Temp: "); Serial.print(get3231Temp());
Serial.println("^C ");
Serial.println(" _______________________");
Serial.println(" ");
delay(10000); //10 sec
}
// Convert normal decimal numbers to binary coded decimalbyte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
void watchConsole()
{
if (Serial.available()) { // Look for char in serial queue and process if foundif (Serial.read() == 84) { //If command = "T" Set Date
set3231Date();
get3231Date();
Serial.println(" ");
}
}
}
void set3231Date()
{
//T(sec)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(year)//T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)//Example: 02-Feb-09 @ 19:57:11 for the 3rd day of the week -> T1157193020209// T1124154091014
seconds = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48)); // Use of (byte) type casting and ascii math to achieve result.
minutes = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
hours = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
day = (byte) (Serial.read() - 48);
date = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
month = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
year = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0x00);
Wire.write(decToBcd(seconds));
Wire.write(decToBcd(minutes));
Wire.write(decToBcd(hours));
Wire.write(decToBcd(day));
Wire.write(decToBcd(date));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}
void get3231Date()
{
// send request to receive data starting at register 0Wire.beginTransmission(DS3231_I2C_ADDRESS); // 104 is DS3231 device addressWire.write(0x00); // start at register 0Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytesif(Wire.available()) {
seconds = Wire.read(); // get seconds
minutes = Wire.read(); // get minutes
hours = Wire.read(); // get hoursday = Wire.read();
date = Wire.read();
month = Wire.read(); //temp monthyear = Wire.read();
seconds = (((seconds & B11110000)>>4)*10 + (seconds & B00001111)); // convert BCD to decimal
minutes = (((minutes & B11110000)>>4)*10 + (minutes & B00001111)); // convert BCD to decimal
hours = (((hours & B00110000)>>4)*10 + (hours & B00001111)); // convert BCD to decimal (assume 24 hour mode)day = (day & B00000111); // 1-7date = (((date & B00110000)>>4)*10 + (date & B00001111)); // 1-31month = (((month & B00010000)>>4)*10 + (month & B00001111)); //msb7 is century overflowyear = (((year & B11110000)>>4)*10 + (year & B00001111));
}
else {
//oh noes, no data!
}
switch (day) {
case 1:
strcpy(weekDay, "Luni");
break;
case 2:
strcpy(weekDay, "Marti");
break;
case 3:
strcpy(weekDay, "Miercuri");
break;
case 4:
strcpy(weekDay, "Joi");
break;
case 5:
strcpy(weekDay, "Vineri");
break;
case 6:
strcpy(weekDay, "Sambata");
break;
case 7:
strcpy(weekDay, "Duminica");
break;
}
}
float get3231Temp()
{
//temp registers (11h-12h) get updated automatically every 64sWire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0x11);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 2);
if(Wire.available()) {
tMSB = Wire.read(); //2's complement int portion
tLSB = Wire.read(); //fraction portion
temp3231 = (tMSB & B01111111); //do 2's math on Tmsb
temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8
}
else {
//oh noes, no data!
}
return temp3231;
}
/* 6-13-2011 Spark Fun Electronics 2011 Nathan Seidle This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license). 4 digit 7 segment display:http://www.sparkfun.com/products/9483 Datasheet: http://www.sparkfun.com/datasheets/Components/LED/7-Segment/YSD-439AR6B-35.pdf This is an example of how to drive a 7 segment LED display from an ATmega without the use of current limiting resistors. This technique is very common but requires some knowledge of electronics - you do run the risk of dumping too much current through the segments and burning out parts of the display. If you use the stock code you should be ok, but be careful editing the brightness values. This code should work with all colors (red, blue, yellow, green) but the brightness will vary from one color to the next because the forward voltage drop of each color is different. This code was written and calibrated for the red color. This code will work with most Arduinos but you may want to re-route some of the pins. 7 segments 4 digits 1 colon = 12 pins required for full control */// modified connexion by niq_ro from http://nicuflorica.blogspot.com// for my Luckylight KW4-563ASA// dataseet: http://www.tme.eu/ro/Document/dfc2efde2e22005fd28615e298ea2655/KW4-563XSA.pdfint digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side)int digit2 = 10; //PWM Display pin 9 (digit2 is common A2)int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3)int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side)//Pin mapping from Arduino to the ATmega DIP28 if you need it//http://www.arduino.cc/en/Hacking/PinMappingint segA = 2; //Display pin 11int segB = 3; //Display pin 7int segC = 4; //Display pin 4int segD = 5; //Display pin 2int segE = 12; //Display pin 1int segF = 7; //Display pin 10int segG = 8; //Display pin 5int segDP = 13; // Display pin 3
#include "DHT.h"
#define DHTPIN A2 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#include <Wire.h>
#include "RTClib.h"RTC_DS1307 RTC;
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib// original sketck from http://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/// add part with SQW=1Hz from http://tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/voidsetup() {
Wire.begin();
RTC.begin();
// RTC.adjust(DateTime(__DATE__, __TIME__));// if you need set clock... just remove // from line above this// part code for flashing LEDWire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address// Wire.write(0x00); // turns the SQW pin offWire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz// Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHzWire.endTransmission();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
dht.begin();
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
// pinMode(13, OUTPUT);Serial.begin(9600);
Serial.println("test for niq_ro");
}
voidloop() {
digitalWrite(segDP, HIGH);
DateTimenow = RTC.now();
int timp = now.hour()*100+now.minute();
// int timp = (now.minute(), DEC);// displayNumber(12); // this is number to diplay// int timp = 1234;Serial.print(now.hour(), DEC);
Serial.print(":");
Serial.print(now.minute(), DEC);
Serial.print(" -> ");
Serial.print(timp);
Serial.println(" !");
int h = dht.readHumidity();
int t = dht.readTemperature();
for(int i = 1000 ; i >0 ; i--) {
displayNumber(t); // this is number to diplay
}
for(int i = 1000 ; i >0 ; i--) {
displayNumber1(h); // this is number to diplay
}
for(int i = 1000 ; i >0 ; i--) {
if (timp > 1000) displayNumber01(timp);
else displayNumber02(timp);
}
}
//Given a number, we display 10:22//After running through the 4 numbers, the display is left turned off//Display brightness//Each digit is on for a certain amount of microseconds//Then it is off until we have reached a total of 20ms for the function call//Let's assume each digit is on for 1000us//Each digit is on for 1ms, there are 4 digits, so the display is off for 16ms.//That's a ratio of 1ms to 16ms or 6.25% on time (PWM).//Let's define a variable called brightness that varies from://5000 blindingly bright (15.7mA current draw per digit)//2000 shockingly bright (11.4mA current draw per digit)//1000 pretty bright (5.9mA)//500 normal (3mA)//200 dim but readable (1.4mA)//50 dim but readable (0.56mA)//5 dim but readable (0.31mA)//1 dim but readable in dark (0.28mA)void displayNumber(int toDisplay) {
#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH
#define DIGIT_OFF LOWfor(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of timeswitch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(11); // display degree symboldelayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(12); // display C letterdelayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
//Turn off all digitsdigitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
}
void displayNumber1(int toDisplay) {
#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH
#define DIGIT_OFF LOWfor(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of timeswitch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
lightNumber(10); // display degree symboldelayMicroseconds(DISPLAY_BRIGHTNESS);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
lightNumber(13); // display C letterdelayMicroseconds(DISPLAY_BRIGHTNESS);
break;
}
//Turn off all segments
lightNumber(10);
//Turn off all digitsdigitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
}
void displayNumber01(int toDisplay) {
#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH
#define DIGIT_OFF LOWfor(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of timeswitch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
digitalWrite(segDP, HIGH);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, LOW);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, HIGH);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
digitalWrite(segDP, HIGH);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments
lightNumber(10);
//Turn off all digitsdigitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
}
void displayNumber02(int toDisplay) {
#define DISPLAY_BRIGHTNESS 500
#define DIGIT_ON HIGH
#define DIGIT_OFF LOWfor(int digit = 4 ; digit > 0 ; digit--) {
//Turn on a digit for a short amount of timeswitch(digit) {
case 1:
lightNumber(10);
digitalWrite(segDP, HIGH);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
digitalWrite(segDP, LOW);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
digitalWrite(segDP, HIGH);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
digitalWrite(segDP, HIGH);
break;
}
lightNumber(toDisplay % 10);
toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS);
//Turn off all segments
lightNumber(10);
//Turn off all digitsdigitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}
}
//Given a number, turns on those segments//If number == 10, then turn off numbervoid lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGHswitch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;
case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// all segment are ONcase 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
// degree symbol made by niq_rocase 11:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
// C letter made by niq_rocase 12:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
// H letter made by niq_rocase 13:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
}
}
Pe piata exista un modul cu 2 relee care se alimenteaza la 5V, pentru a fi folosit cu Arduino. Pentru a verifica rapid functionarea unui asemenea modul, avand la dispozitie decat o placa Arduino si niste fire Dupont, am facut un mic montaj:
iar ca sketch, am folosit ca baza pe cel numit "Blink" din exemplele programului Arduino IDE. Am facut un filmulet, numit test placa cu 2 relee in care apare un Arduino Mega, care este conectat la fel (D8 si D9).
Schema de conectare este
iar sketch-ul folosit este:
/* "Blink" is original sketch changed sketch by niq_ro for test 2 relay boardhttp://nicuflorica.blogspot.ro/http://www.tehnic.go.rohttp://www.niqro.3x.rohttp://arduinotehniq.blogspot.com/ */// inputs for relays:int pin1 = 7; // D7 for relay 1int pin2 = 8; // D8 for relay 2// the setup routine runs once when you press reset:voidsetup() {
// initialize the digital pin as an output.pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
digitalWrite(pin1, LOW); // turn the relay 1 off by making the voltage LOW digitalWrite(pin2, LOW); // turn the relay 2 off by making the voltage LOW
}
// the loop routine runs over and over again forever:voidloop() {
digitalWrite(pin1, HIGH); // turn the relay 1 on (HIGH is the voltage level)delay(1000); // wait for a seconddigitalWrite(pin1, LOW); // turn the relay 1 off by making the voltage LOWdelay(1000); // wait for a seconddigitalWrite(pin2, HIGH); // turn the relay 2 on (HIGH is the voltage level)delay(1000); // wait for a seconddigitalWrite(pin2, LOW); // turn the relay 2 off by making the voltage LOWdelay(1000); // wait for a second
}