ind или string в const char*

Fallex
Offline
Зарегистрирован: 28.05.2013

Создаю проект на плате ардуино уно и на интернет модуле enc28j60. Работаю с библиотекой EtherCard.

Cуществует така строка static void browseUrl (prog_char *urlbuf, const char *urlbuf_varpart, prog_char *hoststr, void(*cb)(uint8_t, uint16_t, uint16_t))    

 

Реально она выглядит так ether.browseUrl(PSTR("/savetemp.php?temp="), "тут вставить" ,website, my_callback);
я получаю данные с датчика, числовое, двухзначное число. Мне надо его с int или string к примеру перевести в const char * что бы передать параметры серверу. Как это можно сделать?

 

maksim
Offline
Зарегистрирован: 12.02.2012
  int input = 1234;
  char buff[6];
  itoa(input, buff, 10);
  Serial.println(buff);

 

Fallex
Offline
Зарегистрирован: 28.05.2013

не знаю, попробыал ваш вариант (и множество до этого, так как прочитал много топиков) и все равно вместо моего int в конечном buff результате я получаю число 7. Если мой датчик показывает от 60 до 70 (ударов в минуту(пульсометр)) то показывает число 7, если от 70 до 80, то число 77, а если еще больше, то 777.

maksim
Offline
Зарегистрирован: 12.02.2012

Значит проблема в вашем коде.

void setup() 
{
  int input = 1234;
  char buff[6];
  itoa(input, buff, 10);
  Serial.println(input);
  Serial.println(buff);
}

void loop(){}

 

Fallex
Offline
Зарегистрирован: 28.05.2013

как оказалось действительно ошибка в коде, но как толкьо я ее исправил, появилась такая проблема, получаю данные в buff и вызываю функцию ether.packetLoop(ether.packetReceive());

после чего как мне кажется скетч зависает, так больше нечего не выводит (нет ни успешной отправки, нечего).

вот сам код приложения

#include <EtherCard.h>
#include <PinChangeInt.h>
#include <eHealth.h>

static byte mymac[] = { 0x54,0xd4,0x6f,0x1a,0x49,0x50 };
byte Ethernet::buffer[700];
static uint32_t timer;
int cont = 0;
char website[] PROGMEM = "мой сайт";
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("...");
}
void setup () {
  Serial.begin(115200);  
  Serial.println("\n[webClient]");
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println( "Failed to access Ethernet controller");
  if (!ether.dhcpSetup())
    Serial.println("DHCP failed");
  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);  
  ether.printIp("DNS: ", ether.dnsip);  
  if (!ether.dnsLookup(website))
    Serial.println("DNS failed");
  ether.printIp("SRV: ", ether.hisip);
   delay(500);
   eHealth.initPulsioximeter(); 
  PCintPort::attachInterrupt(6, readPulsioximeter, RISING);
    Serial.println("all ok. Sensor drivers ok!");
}
void loop () {
    int data = eHealth.getBPM();
if (data!=0){
  
	char buff[6];
	itoa(data, buff, 10);
Serial.println(buff);
Serial.print("\n");  
  Serial.println("============================="); 
  ether.packetLoop(ether.packetReceive());
  Serial.println("try to send..");
  if (millis() > timer) {
    timer = millis() + 5000;
    Serial.println();
    Serial.print("<<< REQ ");
    ether.browseUrl(PSTR("/savetemp.php?temp="), buff ,website, my_callback);
 delay(1000);
  }}
}


void readPulsioximeter(){  

  cont ++;

  if (cont == 50) { //Get only of one 50 measures to reduce the latency
    eHealth.readPulsioximeter();  
    cont = 0;
  }
}

 

Fallex
Offline
Зарегистрирован: 28.05.2013

таким образом, если я помещаю вызов параметров датчика (eHealth.initPulsioximeter();

31   PCintPort::attachInterrupt(6, readPulsioximeter, RISING);

)

в конце setup, то я получаю точные данные но не могу их отправить, так как зависает при функцие которую я указал выше (если эту функцию убрать, отправка не будет осуществлена), а если я эти две строчки поставлю вначале setup() то отправка идет хорошо, но данные которые получаю в loop уже не верные

 

Fallex
Offline
Зарегистрирован: 28.05.2013

проблему понял, у меня датчик(через плату разширения) берет показатели с тех же цифровых выходов что и ethernet модуль.

Fallex
Offline
Зарегистрирован: 28.05.2013

Реально ли сменить в библиотеке стандартные pin, к примеру вместо 8,11,12,13 поставить 2,3,4,5?

maksim
Offline
Зарегистрирован: 12.02.2012

Зависит от того как используются эти выводы.

Fallex
Offline
Зарегистрирован: 28.05.2013

схема подключения

SCK - Pin 13
SO - Pin 12
SI - Pin 11
CS - Pin 08

cs с Pin 08 на pin 02 смогу сменить, так как в библиотеке были упоминания об этом, а 3 остальных даже не знаю, существует ли команда по типу #define SPI_CSK 3 такого, что бы сменить при запуске pin ?

maksim
Offline
Зарегистрирован: 12.02.2012

Нет не существует, SPI хардово привязан к конкретным ногам и поменять их нельзя, можно организовать еще один программный SPI и на него повесить датчик или разграничивать пользование хардовым.