Ви не увійшли.
Сторінки 1
Мой опыт работы с W5100 говорит о том, что зависания для нее обычное дело. Используйте Watchdog и сбрасывайте его если есть соединение.
Я извиняюсь, можно подробнее? Про Watchdog я читал. Как аппаратно перезагрузить шилд? Я так понимаю ножку ресет на шилде, нужно выбрасывать?
Здравствуйте, уважаемые форумчане!
Столкнулся с такой проблемой:
Имеется Arduino Uno, Ethernet Shield W5100 и датчик освещенности(измерения люксов), и 8 релейный модуль.
В общем задача такова: Arduino шлёт моему серверу сигнал на получение ответа, включать ли ей то или иное реле. Далее ардуина принимает ответ, если 1, зажигает реле, если 0 ничего не делает, параллельно она отправляет на мой сайт значения с датчика освещенности. Всё вроде бы работает, НО. Шилд со временем подвисает и не пингуется. Помогает ему лишь перезагрузка всей системы. В общем мне нужно узнать, в чем может быть проблема, в самом шилде или же в программе, сразу скажу ардуина и шилд не оригинальные, код программы ниже. Буду благодарен за ответы по делу. Спасибо.
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <BH1750.h>
#define PIN5 5
BH1750 lightMeter;
byte MAC[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 55);
EthernetServer arduino(81);
EthernetClient client;
boolean InboundRequest = 0;
char resource[] = "example.com";
void setup() {
pinMode(PIN5, OUTPUT);
Serial.begin(9600);
lightMeter.begin();
Ethernet.begin(MAC, IP);
arduino.begin();
}
void loop() {
EthernetClient client = arduino.available();
if(client) {
boolean EmptyLine = true;
while(client.connected()) {
if(client.available()) {
char data = client.read();
if(data == '\n' && EmptyLine) {
client.println("HTTP/1.1 200 OK");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://arduino.cc/en/favicon.png</a>\">");
client.println("</head>");
client.println("<body>");
client.println("</body>");
client.println("</html>");
break;
}
if(InboundRequest && data == ' ') {
InboundRequest = 0;
}
if(data == '?') {
InboundRequest = 1;
}
if(InboundRequest == 1) {
int value = data - '0';
digitalWrite(PIN5, value);
Response();
}
if(data == '\n') {
EmptyLine = true;
} else if(data != '\r') {
EmptyLine = false;
}
}
}
delay(1);
client.stop();
}
}
void Response() {
if(client.connect(resource, 80)) {
String answer = "GET /update.php?status=";
answer+=digitalRead(PIN5);
answer+="&lux=";
answer+=lightMeter.readLightLevel();
client.println(answer);
client.println("Host: example.com");
client.println("Connection: close");
Serial.println(answer);
} else {
Serial.println("Connection failed.");
}
client.stop();
}
Я дико извеняюсь, но не могли бы вы мне подробнее обьяснить? Желательно программно. Отправить и обработать я и без Arduino могу.
Здравствуйте. У меня имеется частотный преобразователь серии VLT 2800 компании Danfoss. Работает он по протоколу ModBus RTU через интерфейс RS485.
Мне нужно считать данные с нужного мне регистра, записать их в переменную и вывести в порт Arduino.
Вот моя схема подключения:
Вот скетч:
#include <ModbusRtu.h>
// data array for modbus network sharing
uint16_t au16data[16];
uint8_t u8state;
/**
* Modbus object declaration
* u8id : node id = 0 for master, = 1..247 for slave
* u8serno : serial port (use 0 for Serial)
* u8txenpin : 0 for RS-232 and USB-FTDI
* or any pin number > 1 for RS-485
*/
Modbus master(0,0,10); // this is master and RS-232 or USB-FTDI
/**
* This is an structe which contains a query to an slave device
*/
modbus_t telegram;
unsigned long u32wait;
void setup() {
master.begin( 9600 ); // baud-rate at 19200
master.setTimeOut( 2000 ); // if there is no answer in 2000 ms, roll over
u32wait = millis() + 1000;
u8state = 0;
}
void loop() {
switch( u8state ) {
case 0:
if (millis() > u32wait) u8state++; // wait state
break;
case 1:
telegram.u8id = 1; // slave address
telegram.u8fct = 3; // function code (this one is registers read)
telegram.u16RegAdd = 29; // start address in slave
telegram.u16CoilsNo = 2; // number of elements (coils or registers) to read
telegram.au16reg = au16data; // pointer to a memory array in the Arduino
master.query( telegram ); // send query (only once)
Serial.println();
Serial.print(au16data[16]);
Serial.println();
u8state++;
break;
case 2:
master.poll(); // check incoming messages
if (master.getState() == COM_IDLE) {
u8state = 0;
u32wait = millis() + 1000;
}
break;
}
}
Когда я считываю 29 регистр, в порту мне пишет вот это:
Хотя в регистре, значение равно: 1500.
Вот что пишет в Termite:
Так же у меня имеется USB to RS485 Converter, вот пример его работы, через программу QModBUS:
Запрос ModBus: 01 03 00 1d 00 02
Ответ ModBus: 01 03 04 00 00 05 dc f8 fa
Подскажите пожалуйста, что я делаю не так? Уже вторую неделю голову ломаю.
prog_cha не мог найти эту страку чтобы изменит
Скачайте редактор Notepad++ и нажмите комбинацию клавиш CTR+H, введите название "prog_char" и нажмите "Искать далее".
Здравствуйте. Есть скетч отправки данных на сервер с платы ENC28J60.
Собственно скетч работает и отправляет данные, которые я ему задаю.
Вот сам скетч:
#include <EtherCard.h>
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[700];
static uint32_t timer;
const char website[] PROGMEM = "example.com";
static void my_callback (byte status, word off, word len) {
Serial.println("----------------------");
Ethernet::buffer[off+300] = 0;
Serial.print((const char*) Ethernet::buffer + off);
Serial.println();
Serial.println("----------------------");
}
void setup () {
Serial.begin(9600);
Serial.println("[Arduino Client]");
if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
Serial.println( "Failed to access Ethernet controller.");
if (!ether.dhcpSetup())
Serial.println("Failed DHCP.");
ether.printIp("IP: ", ether.myip);
ether.printIp("GATEWAY: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
if (!ether.dnsLookup(website))
Serial.println("Failed DNS.");
ether.printIp("SERVER: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 60000;
ether.browseUrl(PSTR("/arduino.php?value=54321"), "bar", website, my_callback);
}
}
Как видите, в функции
ether.browseUrl(PSTR("/arduino.php?value=54321"), "bar", website, my_callback);
После /arduino.php?value= идут мои значения.
Но у меня есть самодельный термистор, сделанный из обычной термопары и есть к нему функция, с помощью которой Arduino получает данные о температуре.
Вопрос: Как мне в отправке данных, записать значения переменной, после вот этого кода: /arduino.php?value=$var
Скетч термистора:
#include <math.h> //Библиотека для выполнения математических операций.
float Thermometer(float RawADC) {
float Temperature; // Переменная для экономии места.
Temperature = 1.25*(480 - RawADC); //Формула вычисления реальной температуры.
return Temperature;
}
void setup() {
Serial.begin(9600); //Открываем порт на скорости 9600 бит/c.
}
void loop() {
float Temperature;
Temperature = Thermometer(analogRead(5));
Serial.print("Temperature: ");
Serial.println(Temperature,0);
Serial.println(analogRead(5));
delay(1000);
}
Использую библиотеку EtherCard.
Буду благодарен за наглядный пример в моём коде. Так как я в ардуинке, пока полный ноль (:
Сторінки 1