Hi
I’am from China ?I‘am sorry for my poor english.
I have a problem about UDP send with ethercard.
My problem is about:
I use Arduino uno3+ ENC28J60 + DHT11 + two 7segment LED to display temperature and humidity and send data to host PC by UDP , all the hardware and sub-module test normal, the ENC28J60 CS connect to D10, the measured power supply voltage for ENC28J60 is 3.3V, The IDE with the 1.03 version, EtherCard withis the latest version. all functions in normal when I running wireshake to capture data on host PC,I got correctly display of temperature and humidity and the received UDP data is OK, but when I stop capture data with wireshake,the host computer can not receive UDP data, what possible with the problem?
Thanks!
the code as below?
//CS?D10?SI?D11?SO?D12?SCK?D13
#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = {192,168,2,23};
static byte gwip[] = {192,168,23,254};
byte Ethernet::buffer[100];
static byte destip[]= {192,168,2,10};
static int myport=1002,destport=1001;
// bits representing segments A through G (and decimal point) for numerals 0-9
const int numeral[10] = {
//ABCDEFG /dp
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110, // 9
};
// pins for decimal point and each segment
// dp,G,F,E,D,C,B,A
const int segmentPins[] = { 9,8,7,6,5,4,3,2};
const int nbrDigits= 2; // the number of digits in the LED display
//dig 1 2
const int digitPins[nbrDigits] = { A4,A5};
int dppin=A3; //set the decimal point link to PIN A3
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN A0 //DHT11 PIN 3 ?UNO A0
char string1[2];//humidity
char string2[2];//temperature
void setup()
{
Serial.begin(19200);
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
if (!ether.staticSetup(myip))
Serial.println("Failed to set IP address");
// ether.setGwIp(gwip);
for(int i=0; i < 8; i++)
pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
for(int i=0; i < nbrDigits; i++)
pinMode(digitPins[i], OUTPUT);
}
void loop()
{
int chk = DHT11.read(DHT11PIN);
Serial.print("Read sensor: ");
switch (chk)
{
case DHTLIB_OK:
Serial.println("OK");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println("Checksum error");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println("Time out error");
break;
default:
Serial.println("Unknown error");
break;
}
int humd=int(DHT11.humidity);
int temp=int(DHT11.temperature-2);
itoa(humd,string1,10);
itoa(temp,string2,10);
//ether.udpPrepare(myport,destip,destport);
//ether.udpTransmit(4);
ether.sendUdp ((char*) string1, 64, myport, destip, destport);
Serial.println("DATA send by UDP!");
Serial.println(humd);
Serial.println(temp);
// delay(2000);
//Display on 7segment
int counter1=200;
while(counter1)
{
counter1--;
// showNumber(DHT11.humidity);
showNumber(humd);
}
counter1=200;
while(counter1)
{
counter1--;
analogWrite(dppin,0);
// showNumber(DHT11.temperature-2);
showNumber(temp);
analogWrite(dppin,200);
}
}
void showNumber( int number)
{
if(number == 0)
showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit
else
{
// display the value corresponding to each digit
// leftmost digit is 0, rightmost is one less than the number of places
for( int digit = nbrDigits-1; digit >= 0; digit--)
{
if(number > 0)
{
showDigit( number % 10, digit) ;
number = number / 10;
}
}
}
}
// Displays given number on a 7-segment display at the given digit position
void showDigit( int segnumber, int digit)
{
digitalWrite( digitPins[digit], HIGH );
for(int segment = 1; segment <8; segment++)
{
boolean isBitSet = bitRead(numeral[segnumber], segment);
// isBitSet will be true if given bit is 1
//isBitSet = ! isBitSet; // remove this line if common cathode display
digitalWrite( segmentPins[segment], isBitSet);
}
delay(5);
digitalWrite( digitPins[digit], LOW );
}