Multifunction shield for Arduino Uno (HCARDU0085)

timgtech
Posts: 4
Joined: Sun Sep 07, 2014 11:49 pm
Location: Sarasota, FL, USA

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by timgtech » Sun Sep 14, 2014 6:11 pm

I did the same thing shorting the pins. I really like the SMD version of the Arduino Uno or the SpsrkFun RedBoard. Being the use s micro and mini usb connector you don't have that problem.
"Just call me AND OR NOR. But never NAND."

timgtech
Posts: 4
Joined: Sun Sep 07, 2014 11:49 pm
Location: Sarasota, FL, USA

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by timgtech » Sun Sep 14, 2014 6:11 pm

I did the same thing shorting the pins. I really like the SMD version of the Arduino Uno or the SpsrkFun RedBoard. Being they use a micro and mini usb connector you don't have that problem.
"Just call me AND OR NOR. But never NAND."

tonygo
Posts: 4
Joined: Mon Sep 15, 2014 2:29 pm
Location: Leicester, UK

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by tonygo » Tue Sep 16, 2014 10:56 am

I've ordered but not yet received my shield but looking at the circuit diagram there appears to be a mistake with the SFH506-38 IR receiver - U4. It shows connections of Data OUT to +5Volts, VDD to GND and GND to pin 2 on the Arduino. It think it should be +5Volts to VDD, OUT to pin2 and GND to GND.

Has anybody tried using this port?

Regards

Tony Goodhew

andrew
Site Admin
Posts: 1374
Joined: Sun Aug 05, 2012 4:15 pm

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by andrew » Wed Sep 17, 2014 8:40 am

Yeah it looks like the manufacture made a mistake with this connector. The symbol looks correct on the schematic but the connections are in the wrong order. The pinout on the actual shield with the seven segment LED at the top of the board and going from left to right is as follows:

1....OUT
2....GND
3....+5V

This is not the correct order for a SFH506. One fortunate thing about this mistake though is that the pinout looks correct for our 1838B IR reciver (HCSENS0014). I'll add a note to the first post of this thread.
Comments made by this poster do not necessarily reflect the views of Hobby Components Ltd.

tonygo
Posts: 4
Joined: Mon Sep 15, 2014 2:29 pm
Location: Leicester, UK

(HCARDU0085) Using IR Receiver & IR remote controller

Post by tonygo » Mon Sep 22, 2014 2:52 pm

I've been having fun over the weekend trying out the 1838B IR receiver (HCSENS0014) and the IR remote control (HCIRRC0001) and that they are very easy to get working. The receiver pins are quite wide and care is needed when pushing them into the milled interface socket. The cross face of the device faces the three buttons. You need to install the IRremote library from https://github.com/shirriff/Arduino-IRremote to get it to work. There are several example programs in this package to get you started.

I used all of the 21 buttons on the remote to send data to the 7-segment display or the single LEDs, in binary, and information to the Serial Monitor. The code shows how to decode button pressed.

Here is my code:

Code: Select all

/* ====== IR_Remote_Basics_V3 =====  by Tony Goodhew - 22 September 2014
FunDuino/Arduino UNO R3 - All available from HobbyComponents.com
Arduino compatible Multi Function experimenter shield (HCARDU0085)
IR Remote control - NEC codes - Hobby Components (HCIRRC0001)
IR receiver on pin 2 - 1838B, (HCSENS0014) - X front faces the buttons in U4 - tight fit!

!!!!!!!!!!!! DO NOT USE SFH506-38 as socket does not match its pins !!!!!!!!!!!!!!!!!

This program illustrates input via an InfraRed Receiver from IR Remote control 
and output via the 7-segment display and individual LEDs.

Some code based on HOBBY COMPONENTS documentation.

You may copy, alter and reuse this code in any way you like, but please leave
reference to HobbyComponents.com and the author, Tony Goodhew, in your comments if you redistribute this code.
This software may not be used for the purpose of promoting or selling products
that directly compete with Hobby Components Ltd's own range of products.
  
THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS AND THE AUTHOR, Tony Goodhew, MAKE NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS, OR Tony Goodhew, SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/

#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote

int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;

// Define shift register pins used for seven segment display
#define LATCH 4
#define CLK 7
#define DATA 8

long wait = 1000;  // Display time in millis
int Number = 8888; // Initial 7 segment LED check value - 
byte x = 0; // LED code

// LED block byte codes for symbols 0 to 9
//                       { 0    1    2    3    4    5    6    7    8    9 }
const byte DigitCode[] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 152};
// Byte pointers to select blocks 0 to 3 - 0 is Most Significant Block
const byte Block[] = {241, 242, 244, 248};
//LED Pins
const byte LEDs[] = {13, 12, 11, 10};  // Pin # of the single LEDs

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  // Set pin modes for shift register control
  pinMode(LATCH,OUTPUT);
  pinMode(CLK,OUTPUT);
  pinMode(DATA,OUTPUT); 
  show();   // 7-seg LED test "8888"
  blank();  // Clear 7-seg LEDs
  // Set up single LEDs
  for (int i = 0; i <= 3; i++) {pinMode(LEDs[i], OUTPUT);}
  x=0;
  LEDset(); // Clear LEDs on Pins 10-13
}

void loop() // ===================== Main Loop ==============================
{
  if (irrecv.decode(&results)) 
  {
    if((results.value) == 0xFF6897){Number = 0; show(); Serial.println(" - 0 -");}
    if((results.value) == 0xFF30CF){Number = 1; show(); Serial.println(" - 1 -");}
    if((results.value) == 0xFF18E7){Number = 2; show(); Serial.println(" - 2 -");}
    if((results.value) == 0xFF7A85){Number = 3; show(); Serial.println(" - 3 -");}
    if((results.value) == 0xFF10EF){Number = 4; show(); Serial.println(" - 4 -");}
    if((results.value) == 0xFF38C7){Number = 5; show(); Serial.println(" - 5 -");}
    if((results.value) == 0xFF5AA5){Number = 6; show(); Serial.println(" - 6 -");}
    if((results.value) == 0xFF42BD){Number = 7; show(); Serial.println(" - 7 -");}
    if((results.value) == 0xFF4AB5){Number = 8; show(); Serial.println(" - 8 -");}
    if((results.value) == 0xFF52AD){Number = 9; show(); Serial.println(" - 9 -");}
    if((results.value) == 0xFF9867){Number = 100; show(); Serial.println(" - 100+ - ");}    
    if((results.value) == 0xFFB04F){Number = 200; show(); Serial.println(" - 200+ - ");}
    if((results.value) == 0xFFA25D){x=1; LEDupdate(); Serial.println(" - Ch Down - ");}
    if((results.value) == 0xFF629D){x=2; LEDupdate(); Serial.println(" - CH -");}    
    if((results.value) == 0xFFE21D){x=3; LEDupdate(); Serial.println(" - Ch Up - ");}
    if((results.value) == 0xFF22DD){x=4; LEDupdate(); Serial.println(" - |<< - FBwards - ");}    
    if((results.value) == 0xFF02FD){x=5; LEDupdate(); Serial.println(" - >>| - FFwards - ");}
    if((results.value) == 0xFFC23D){x=6; LEDupdate(); Serial.println(" - >|| - Play/Pause - ");}
    if((results.value) == 0xFFE01F){x=7; LEDupdate(); Serial.println(" - VOL- - ");}    
    if((results.value) == 0xFFA857){x=8; LEDupdate(); Serial.println(" - VOL+ - ");}
    if((results.value) == 0xFF906F){x=9; LEDupdate(); Serial.println(" - EQ -");}
    irrecv.resume(); // Receive the next value
  }
}

// Write a decimal number between 0 and 9999 to the 7-Segment display without leading zeros
void WriteNumber()
{
  if (Number > 999) {Send(0, Number / 1000);}         // MSB - Blank leading zero
  if (Number > 99) {Send(1, (Number / 100) % 10);} 
  if (Number > 9) {Send(2, (Number / 10) % 10);}   
  Send(3, Number % 10);                               // LSB - remains lit unless cleared with blank()
}


void Send(byte BlockIndex, byte Value)
// Send a symbol between 0 and 9 to one of the 4 LED blocks of the display
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, DigitCode[Value]);
  shiftOut(DATA, CLK, MSBFIRST, Block[BlockIndex] );
  digitalWrite(LATCH, HIGH);    
}

void blank()
// Clears LS block of 7-segment display
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, 255);  // 255 = all segments OFF
  shiftOut(DATA, CLK, MSBFIRST, 3 );
  digitalWrite(LATCH, HIGH);
}
void show()
// Number to 7-segment display
{
 long timenow = millis();
 while (millis() < timenow + wait){WriteNumber();} // Display Number - very fast loop
 blank();
}

void LEDset()
// Display to single LEDs
{
  digitalWrite(LEDs[0], !(x & 1)); // 0 = ON, 1 = OFF
  digitalWrite(LEDs[1], !(x & 2));
  digitalWrite(LEDs[2], !(x & 4));
  digitalWrite(LEDs[3], !(x & 8));
}

void LEDupdate()
// Display x in binary on single LEDs
{
  special();
  LEDset();
  delay(wait);
  x=0; // All 4 LEDs OFF
  LEDset();
  blank();
}

void special()
// Write "L" to 7-segment display LSB to indicate data is in single LEDs in binary
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, 199); // 199 = "L"
  shiftOut(DATA, CLK, MSBFIRST, Block[3]);
  digitalWrite(LATCH, HIGH);
}
I hope you can get it to work.

Regards

Tony Goodhew
Last edited by tonygo on Mon Sep 22, 2014 6:50 pm, edited 1 time in total.

tonygo
Posts: 4
Joined: Mon Sep 15, 2014 2:29 pm
Location: Leicester, UK

Multifunction shield for Arduino Uno - Reading temperature #

Post by tonygo » Mon Sep 22, 2014 6:45 pm

I’ve been messing about with the Multifunction shield and exploring the 4x7 segment display and the temperature sensing via the expansion ports. To get a quicker, easy input I added a 10K trim pot to the A5 connectors of the headers – very simple with 5 volts and GND next door. I always like to work things out from first principles, so calculated my own codes for the numeric symbols and a few alphabetic ones. As this is common anode device all you need to do is add up the unlit segment values to get the code. The top segment = 1 and working clockwise round the edge 2 & 4 are on the right side, 8 at the bottom, with 16 and 32 on the left. This leaves 64 in the centre and 128 for the decimal point. It is really an 8 segment display! If you want a blank block you add all of these up and get 255.

I’ve since been exploring reading temperatures. Using a DS18B20 (HCSENS0001) and an LM35DZ (HCSENS0011). The former is very accurate (12 bit) but needs 750 milliseconds to get a reading using input A4 in digital mode. You can get the reading as N Kendrick (linker3000) does in his excellent example on page 3 of this forum or you can use libraries to help. The main problem is keeping the 7-segment display glowing. N Kendrick’s solution has a very steady display but has quite a gap between readings, greater than 8 seconds. I wanted readings to update faster than this. This program displays while the reading is being taken with steady illumination but blanks while the calculation takes place.

Code: Select all

/* DS18B20to7Segment  -- HobbyComponents Multifunction Shield HCARD0085 -- 
Tony Goodhew 20 Sept 2014
Temperature Sensor DS18B20 in U5 - right hand 3 machined sockets - Flat face towards buttons
J1 in place to provide pull-up voltage and power the sensor.

It displays the temperature, <= 99.99 with a fixed decimal point and 2 dec.places

You may copy, alter and reuse this code in any way you like, but please leave
reference to HobbyComponents.com and the author, Tony Goodhew,  in your comments if you redistribute this code.
This software may not be used for the purpose of promoting or selling products
that directly compete with Hobby Components Ltd's own range of products.
  
THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS AND THE AUTHOR, Tony Goodhew, MAKE NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS, NOR Tony Goodhew, SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/

// Import libraries
#include <OneWire.h>           // http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library

#define ONE_WIRE_BUS 18 // Connect to Pin A4
// Define shift register pins used for seven segment display

#define LATCH 4
#define CLK 7
#define DATA 8

// Global variables
float tempFP;
int Number = 8888;  // Initial LED check

// Delay between readings in millis - 750 is minimum delay for DS18B20 read cycle
long wait = 750; 

// LED block byte codes for symbols - Just sum unlit segment values: Top = 1, centre = 64, DP = 128
const byte SegCode[] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 152, 255}; //0 - 9 + Blank
const byte DPSegCode[] = {64, 121, 36, 48, 25, 18, 2, 120, 0, 24}; // With decimal point
// Byte pointers to select blocks 1 to 4 - 1 is Most Significant Block
const byte Block[] = {241, 242, 244, 248};

// Set up a oneWire instance to communicate with any OneWire device
OneWire ourWire(ONE_WIRE_BUS);

//Tell Dallas Temperature Library to use oneWire Library */
DallasTemperature sensors(&ourWire);

void setup()
{ 
  // Set pin modes
  pinMode(LATCH,OUTPUT);
  pinMode(CLK,OUTPUT);
  pinMode(DATA,OUTPUT); 
  // Start up the DallasTemperature library
  sensors.begin();
}

void loop()
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  long timenow = millis();
  while (millis() < timenow + wait){show();} // Display temperature loop
  Number = 0; // Blank ALL LEDs
  show();     // Display now blank
  tempFP = sensors.getTempCByIndex(0)*100.0; // Get temperature
  Number = int(tempFP);
}

// Routine to update 7-segment display - suppresses leading zeros
void show()
{
  if (Number > 999) {Send(0, Number / 1000);}           // MS Block - left
  if (Number > 99) {SendDP(1, (Number / 100) % 10);}    // with DP
  if (Number > 9 ) {Send(2, (Number / 10) % 10);}
  if (Number >0) {Send(3, Number % 10);}                // LS Block - right
  else Send(3,10);  // Blank in LS Block if Number = zero
}

// Send a symbol to one of the 4 LED blocks of the display
void Send(byte BlockIndex, byte Value)
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, SegCode[Value]);
  shiftOut(DATA, CLK, MSBFIRST, Block[BlockIndex] );
  digitalWrite(LATCH, HIGH);    
}

// Send a symbol to one of the 4 LED blocks of the display with Dec. Pt. 
void SendDP(byte BlockIndex, byte Value)
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, DPSegCode[Value]);
  shiftOut(DATA, CLK, MSBFIRST, Block[BlockIndex] );
  digitalWrite(LATCH, HIGH);    
}
Tony Goodhew

tonygo
Posts: 4
Joined: Mon Sep 15, 2014 2:29 pm
Location: Leicester, UK

Multifunction shield - Reading Temperatures # 2

Post by tonygo » Mon Sep 22, 2014 6:48 pm

A second solution is to use a different temperature sensor, LM35DZ (HCSENS0011). This plugs into the same socket but must face the opposite way and have jumper, J1, OPEN.
(If you get this wrong the chip will get very hot very quickly!) This a very quick acting sensor with analogue output connected to A4 in analogue mode.

• Calibrated directly in ˚Celsius (Centigrade)
• Linear + 10.0 mV/˚C scale factor
• 0.5˚C accuracy guaranteeable (at +25˚C)
• Range when powered by 5Volts and GND is +2˚C to 150˚C
The analogue pin A4 spreads 5Volts over 1024 equal divisions (10 bit); so each single step is 5/1024 Volts, ie 0.0048828 Volts or 0.0048828 * 100 ËšC = 0.48828 ËšC; just under half a degree.

This means that we should only rely on the reading to the nearest whole ËšC.

The previous DS18B20 is a 12 bit device; hence the extra accuracy.

Here is the code. The display is continuous, it updates quickly if you warm up the sensor with hot fingers but it is only accurate to the nearest 1ËšC.

Code: Select all

/* LM35to7Segment  -- HobbyComponents Multifunction Shield HCARD0085 -- 
Tony Goodhew 20 Sept 2014
Temperature Sensor LM35DZ in U5 - right hand 3 machined sockets 

==========> Flat face towards 7 Segment Display <==========   VERY IMPORTANT !!! or it gets VERY HOT!!!

==========> J1 SHOULD NOT BE IN PLACE - TURN SIDEWAYS <==========

This is a faster but less accurate sensor than a DS18B20 and is displayed to the nearest 1ºC

You may copy, alter and reuse this code in any way you like, but please leave
reference to HobbyComponents.com and the author in your comments if you redistribute this code.
This software may not be used for the purpose of promoting or selling products
that directly compete with Hobby Components Ltd's own range of products.
  
THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS AND THE AUTHOR, Tony Goodhew, MAKE NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR LACK OF NEGLIGENCE.
HOBBY COMPONENTS, OR Tony Goodhew, SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR ANY DAMAGES,
INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY
REASON WHATSOEVER.
*/

// Import libraries
#include <OneWire.h>           // http://www.pjrc.com/teensy/td_libs_OneWire.html
#include <DallasTemperature.h> // https://github.com/milesburton/Arduino-Temperature-Control-Library

#define ONE_WIRE_BUS 18 // Connect to Pin A4

// Define shift register pins used for seven segment display

#define LATCH 4
#define CLK 7
#define DATA 8

// Global variables
int Number = 8888;  // Initial LED check
int tempPin = 4;    // Pin A4 Analogue 
int data;           // Data value from TMP35 (0 - 1023) 
float convert;      // Conversion factor from analog data to temperature in ºC

// LED block byte codes for symbols - Just sum unlit segment values: Top = 1, centre = 64, DP = 128
const byte SegCode[] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 152, 255}; //0 - 9 + Blank
// Byte pointers to select blocks 1 to 4 - 1 is Most Significant Block
const byte Block[] = {241, 242, 244, 248};

void setup()
{ 
  // Set pin modes
  pinMode(LATCH,OUTPUT);
  pinMode(CLK,OUTPUT);
  pinMode(DATA,OUTPUT); 
  convert = 5.0 * 100.0 / 1024.0; // ºC per analog data step @ 10 milli volts / ºC
}

void loop()
{
  data = analogRead(tempPin);
  if (data == 0) {Number = 0;} // To prevent rounding errors in FP arithmetic
  else Number = int(float(data) * convert + 0.5); // Temperature rounded to nearest Integer
  
  for (int i = 0; i < 100; i++)
  // Display temperature 100 times
  {
    show(); 
  }
}

void show()
// Routine to update 7-segment display - suppresses leading zeros
{
  if (Number > 999) {Send(0, Number / 1000);}           // MS Block - left
  if (Number > 99)  {Send(1, (Number / 100) % 10);}     // without DP
  if (Number > 9 )  {Send(2, (Number / 10) % 10);}
  if (Number >= 0)  {Send(3, Number % 10);}             // LS Block - right
}

void Send(byte BlockIndex, byte Value)
// Send a symbol to one of the 4 LED blocks of the display
{
  digitalWrite(LATCH, LOW); 
  shiftOut(DATA, CLK, MSBFIRST, SegCode[Value]);
  shiftOut(DATA, CLK, MSBFIRST, Block[BlockIndex] );
  digitalWrite(LATCH, HIGH);    
}
If you leave this set up running you may find that as the temperature in the room slowly changes the “units” digit starts to flicker. This is not really a fault. It indicates that the voltage is right on a step up or down inside the Analogue to Digital converter.

I checked the temperature displayed against a certified mercury thermometer that I’ve had since back when colour photography needed a dark room, film, chemicals and accurate water temperatures. The readings were the same – reassuring!

This all goes to prove that programming these devices is all about compromise. You can go for simplicity, speed, accuracy or a steady display but you cannot have it all at once.

I see from the circuit diagram that digital pins 0 and 1, together with GRD and 5Volts are available on the connector to the left of the 7-segment display. I think I’ll be trying a radio link to another Arduino in the near future.

Tony Goodhew

Hackatron
Posts: 1
Joined: Sat Jun 20, 2015 3:36 pm

Other working examples for multi-function shield

Post by Hackatron » Mon Aug 03, 2015 7:38 am

Some of you might be interested in the working code examples I've only just developed for this shield, which I think would be great for those getting started with Arduino. They include:
  • Digital alarm clock
    Heart monitor
    Countdown timer
    Sonar ranger
    Incline indicator
    Speedometer
This short video trailer shows these examples in action (each project also has its own separate video):

[youtube]http://www.youtube.com/watch?v=BIhI29Pi5zI[/youtube]

There are a few other projects in the pipeline which will go up on my website when complete.

Cheers
Kashif

DevinaBove
Posts: 1
Joined: Tue Oct 13, 2015 11:46 am

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by DevinaBove » Tue Oct 13, 2015 5:22 pm

I am also facing the problem of malfunction shield and exploring the 7 segment display. Also i am facing problem while sensing temprature through expansion ports.
I also added the 10K Variable resistor to the A5 connectors of the headers. Make changes according to this he top segment = 1 and working clockwise round the edge 2 & 4 are on the right side, 8 at the bottom, with 16 and 32 on the left. This leaves 64 in the centre and 128 for the decimal point. It is really an 8 segment display! If you want a blank block you add all of these up and get 255.

[LINK REMOVED BY ADMIN] Please see section 5.2 of the forum terms and conditions.

viya123
Posts: 1
Joined: Thu Oct 19, 2017 2:21 am

Re: Multifunction shield for Arduino Uno (HCARDU0085)

Post by viya123 » Thu Oct 19, 2017 2:40 am

I’ve since been exploring reading temperatures. Using a DS18B20 (HCSENS0001) and an LM35DZ (HCSENS0011). The former is very accurate (12 bit) but needs 750 milliseconds to get a reading using input A4 in digital mode.




[LINK REMOVED BY ADMIN] Please see section 5.2 of the forum terms and conditions.
PCB assembly china (PCBA, hdi pcb, 4 layers pcb)

Post Reply

Return to “Arduino Shields”