#76 Re: Апаратні питання » Arduino и ESP8266. Облачные технологии и системы IoT. » 2016-01-12 23:35:13

Можно ли обойтись без роутера? Можно, если железяка сама притворится роутером точкой доступа: http://www.esp8266.com/viewtopic.php?f=6&t=299&start=0

#77 Re: Апаратні питання » Arduino + External Reference (LM4040) » 2016-01-12 17:29:49

Хм, но тогда если убрать источник опорного напряжения, то АЦП в МК и датчик будут отдавать и получать значения относительно референса, равного напряжению питания. И ничего пересчитывать не придётся.

#78 Re: Апаратні питання » Arduino + External Reference (LM4040) » 2016-01-12 17:26:40

Выходит, что Референс - потолок, выше него АЦП не померяет.

Задача: используя внешний AREF = 4.086V узнать текущее напряжение питания датчика, чтобы потом, используя это знание, нормализовать оцифрованное значение аналогового выхода датчика, т.к. оно зависит от напряжения питания.

#79 Re: Апаратні питання » Arduino + External Reference (LM4040) » 2016-01-12 15:03:06

И что будет оцифровано, если опорное напряжение 4 В, а на входе АЦП -- аж 5 Вольт.

#80 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-11 23:27:52

Упс, забыл сохранить состояние в глобальной переменной, т.е. надо в конце тела функции setRelayState(..) дописать "  relayStatus = relayOn;"

#81 Re: Різне » Где купить позистор 2ком » 2016-01-11 22:33:55

На радиорынке (от остановки известного 27 троллейбуса пешком 5 минут), но смотрите, чтоб вышло не дороже, чем там же в магазине типа этого http://www.radiomag.com.ua/product/2%20 … 2C25W.html

#82 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-11 00:23:39

Та это не форум, это я упростил:

#include <EtherCard.h>

// разъем CS из модуля сети подключаем к 10-му пину на ардуино
#define CS 10
#define REQUEST_RATE 5000

// входы и выходы
#define BUTTON_PIN 2
#define RELAY_PIN 4
#define LED_PIN 6

// настройки сетевого интерфейса
#define MY_IP "192.168.0.55"
static byte myip[] = { 192,168,0,55 };
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte gwip[] = { 192,168,0,1 };
static byte dnsip[] = { 8,8,8,8 };
static byte hisport[] = { 80 };

byte Ethernet::buffer[700];

boolean relayStatus;
char* relayLabel;

// для кнопки
boolean lastButton = LOW;      // Переменная для сохранения предыдущего состояния кнопки
boolean currentButton = LOW;   // Переменная для сохранения текущего состояния кнопки


void setup () {
  // инициируем подключение к локальной сети
  delay(300); 
  if (ether.begin(sizeof Ethernet::buffer, mymac, CS) == 0)
    Serial.println(F("Failed to access Ethernet controller"));
  ether.staticSetup(myip);

  // настройка входов/выходов
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT);

  // включение реле
  setRelayState(true);
}

/*
 * функция сглаживания дребезга
 * принимает в качестве аргумента предыдущее состояние кнопки
 * и выдаёт фактическое.
 */
boolean debounce(boolean last) {
  boolean current = digitalRead(BUTTON_PIN);   // Считать состояние кнопки
  if (last != current) {                       // Если изменилось ...
    delay(5);                                  // ждём 5 мс
    current = digitalRead(BUTTON_PIN);         // Считываем состояние кнопки
    return current;                            // Возвращаем состояние кнопки
  }
}

void setRelayState(boolean relayOn) {
  digitalWrite(RELAY_PIN, relayOn);
  digitalWrite(LED_PIN, relayOn);
  if (relayOn) {
    relayLabel = "ON";
  } else {
    relayLabel = "OFF";
  }
  relayStatus = relayOn;
}

void loop () {
  // управление по локальной сети
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  if (pos) {
    if (strstr((char *)Ethernet::buffer + pos, "GET /?ON") != 0) {
      setRelayState(true);
    } else if(strstr((char *)Ethernet::buffer + pos, "GET /?OFF") != 0) {
      setRelayState(false);
    }
    // выдать веб-интерфейс
    BufferFiller bfill = ether.tcpOffset();
    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html>\n<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"
      MY_IP
      "/\"></head>\n<body>\n<center>Relay is $S</center>\n"
      "<a href=\"http://"
      MY_IP
      "/?OFF\" rel=\"nofollow\">Turn Off</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/?ON\" rel=\"nofollow\">Turn On</a><br></br>\n"
      "<a href=\"http://"
      MY_IP
      "/\" rel=\"nofollow\">Check Status</a><br>\n"
      "</body>\n</html>\n"
      ), relayLabel);
      ether.httpServerReply(bfill.position());
  }

  // реакция на нажатие кнопки для реле
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH) { // если нажатие
    setRelayState(!relayStatus);
  }
  lastButton = currentButton;
}

#83 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-10 23:15:33

А ещё лучше -- для упрощения [понимания] логики программы советую сделать специальную подпрограмму (функцию) с именем setRelayState(boolean relayOn), в которую поместить включение/выключение реле (и светодиода), а также изменение той самой relayLabel. Далее эту setRelayState(..) нужно вызывать и из "веб сервера", и из обработчика кнопки, и из начальной настройки. Отовсюду. Для кнопки будет "setRelayState(!relayStatus);", для веб - "setRelayState(true);" и "setRelayState(false);".

#84 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-10 22:59:52

Только relayLabel формировать не в привязке к каким-то дополнительным условиям, а по значению relayStatus.

#85 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-10 22:57:38

Да вроде бы в коде и так всё есть. Остаётся только добавить ссылку для проверки статуса, как-то так:

    bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
      "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
      "<html><head></head><body>"
      "<div style='font:bold 14px verdana;text-align:center'>Relay is $S</div>"
      "<a href=\"http://адрес/?OFF\" rel=\"nofollow\">Turn Off</a>"
      "<br></br>"
      "<a href=\"http://адрес/?ON\" rel=\"nofollow\">Turn On</a>"
      "<br></br>"
      "<a href=\"http://адрес/\" rel=\"nofollow\">Check Status</a>"
      "</div></div></body></html>"
      ), relayLabel);

#86 Re: Програмування Arduino » Управление реле через arduino, enc28j60 и кнопки » 2016-01-10 22:12:48

z0ri пише:

Надо чтобы информация о состоянии реле я знал через веб интерфейс модуля enc28j60 на arduino. Может кто знает как решить задачу?

В коде есть состояние реле (boolean relayStatus), вот его-то и надо выводить на веб-страничку как состояние реле. Разве не?

#89 Re: Програмування Arduino » Помогите оживить новенький Arduino Uno R3 » 2016-01-05 17:54:56

Marat пише:

Оба контроллера Ардуины (ATMega16U2 и ATMega328P) - живые. ... считать прошивки и фьюзы обеих микросхем? Поделитесь, пожалуйста! Судя по всему, не работает должным образом ATMega16U2

Не оно случайно? -->
"%programfiles(x86)%\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial\Arduino-usbserial-atmega16u2-Uno-Rev3.hex"

Нашёл, читая статью http://www.instructables.com/id/How-to- … 6U2-Firmw/

#90 Re: Програмування Arduino » Функция Sd.open("file_name",FILE_WRITE); » 2016-01-04 00:09:09

Можно сделать всё. Или почти всё. Но без возможности отладки написание кода становится мукой. Я так понимаю, что Ардуино принято дебажить через Serial monitor. Для начала можно узнать, что выдаёт time.gettime("d_m_Y").

#91 Re: Програмування Arduino » Функция Sd.open("file_name",FILE_WRITE); » 2016-01-03 22:04:21

Создаёт ли файл этот код? --

  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println("Hello, world!");
    dataFile.close();
  }

Что покажет монитор порта? --

  Serial.println(time.gettime("d_m_Y"));

#92 Програмування Arduino » Тестовый скетч для RFID модуля RDM6300 125кГц » 2016-01-03 14:21:50

Йожэг
відповідей: 14

Обнаружил, что у меня в домофоне подъезда стоит точно такая же система RFID, как и у продающегося тут модуля RFID RDM6300 125кГц. Взял поиграться, нагуглил примеры, а они или устаревшие, или странные и с ошибками, или сложные.
Надо ж добавить свои 5 копеек!

// Arduino test sketch for http://arduino-ua.com/prod259-125Khz_RFID_modyl_RDM6300
#include <SoftwareSerial.h>
#define STX 2
#define ETX 3

SoftwareSerial softSerial(10, 11); // recommended pins for RX on Mega: 10, 11, 12...
int rx_counter;
byte rx_data[14]; // 1+10+2+1

void setup() {
  rx_counter = 0; // init counter
  Serial.begin(9600);
  softSerial.begin(9600);
}

void loop() {
  if (softSerial.available() > 0) {
    rx_data[rx_counter] = softSerial.read();
    if (rx_counter == 0 && rx_data[0] != STX) {
      Serial.println("Out of sync!"); // do not increment rx_counter
    } else {
      rx_counter++;
    }
    if (rx_counter >= 14) {
      rx_counter = 0; // reset counter
      if (rx_data[0] == STX && rx_data[13] == ETX) { // packet starts with STX and ends with ETX
        byte calc_checksum = 0;
        for (int i = 0; i < 6; i++) { // data with checksum
          calc_checksum ^= ascii_char_to_num(rx_data[i*2+1]) * 16 + ascii_char_to_num(rx_data[i*2+2]);
        }
        if (calc_checksum == 0) {
          Serial.print("ID: ");
          for (int i = 1; i <= 10; i++) {
            Serial.write(rx_data[i]);
          }
          Serial.println();
        } else {
          Serial.println("Checksum ERROR!");
        }
      } else {
          Serial.println("Incorrect packet!");
      }
    } 
  }
}

// convert a single hex character to its byte value using ASCII table (see https://ru.wikipedia.org/wiki/ASCII)
byte ascii_char_to_num(byte a) {
  a -= '0'; // 0..9
  if (a > 9) a -= 7; // A..F
  return a;
} 

Arduino и RFID RDM6300

#93 Re: Апаратні питання » RFID считыватель и длина провода » 2016-01-03 14:01:35

Есть более железное во всех смыслах решение - применить RS-485 module for Arduino (MAX485), с ними можно хоть вокруг дома провод обмотать.

Підвал форуму