ind или string в const char*
- Войдите на сайт для отправки комментариев
Втр, 28/05/2013 - 22:10
Создаю проект на плате ардуино уно и на интернет модуле 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 * что бы передать параметры серверу. Как это можно сделать?
не знаю, попробыал ваш вариант (и множество до этого, так как прочитал много топиков) и все равно вместо моего int в конечном buff результате я получаю число 7. Если мой датчик показывает от 60 до 70 (ударов в минуту(пульсометр)) то показывает число 7, если от 70 до 80, то число 77, а если еще больше, то 777.
Значит проблема в вашем коде.
void setup() { int input = 1234; char buff[6]; itoa(input, buff, 10); Serial.println(input); Serial.println(buff); } void loop(){}как оказалось действительно ошибка в коде, но как толкьо я ее исправил, появилась такая проблема, получаю данные в 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; } }таким образом, если я помещаю вызов параметров датчика (
eHealth.initPulsioximeter();31PCintPort::attachInterrupt(6, readPulsioximeter, RISING);)
в конце setup, то я получаю точные данные но не могу их отправить, так как зависает при функцие которую я указал выше (если эту функцию убрать, отправка не будет осуществлена), а если я эти две строчки поставлю вначале setup() то отправка идет хорошо, но данные которые получаю в loop уже не верные
проблему понял, у меня датчик(через плату разширения) берет показатели с тех же цифровых выходов что и ethernet модуль.
Реально ли сменить в библиотеке стандартные pin, к примеру вместо 8,11,12,13 поставить 2,3,4,5?
Зависит от того как используются эти выводы.
схема подключения
SCK - Pin 13
SO - Pin 12
SI - Pin 11
CS - Pin 08
cs с Pin 08 на pin 02 смогу сменить, так как в библиотеке были упоминания об этом, а 3 остальных даже не знаю, существует ли команда по типу #define SPI_CSK 3 такого, что бы сменить при запуске pin ?
Нет не существует, SPI хардово привязан к конкретным ногам и поменять их нельзя, можно организовать еще один программный SPI и на него повесить датчик или разграничивать пользование хардовым.