Я вместо деления значения аналогового сигнала на 4 использую map(val, 0, 1023, 0, 254) и все. Аналогично подготавливаю значения для передачи значений в Ардуину.
Я вместо деления значения аналогового сигнала на 4 использую map(val, 0, 1023, 0, 254) и все. Аналогично подготавливаю значения для передачи значений в Ардуину.
Последний раз редактировалось Mastar; 27.12.2011 в 16:57.
Мои проекты - Катер для рыбалки
А можно ещё и пример, до кучи ? )))
В передающем пакете все данные подготавливаете в диапазоне 0-254, а первым посылаете дескриптор равный 255.
В приемном устройстве отсчитываете количество данных + 1, проверяете наличие и соответствие дескриптора, а потом принимаете данные.
Если не понятно, дайте свой полный пример и я на нем покажу.
Последний раз редактировалось Mastar; 31.12.2011 в 17:41.
Мои проекты - Катер для рыбалки
Вот код:
Тут ещё одна непонятная для меня вещь возникла....PHP код:
#include <TVout.h>
#include <fontALL.h>
TVout TV;
byte serialInArray[8];
int watertemp = 0;
int turbo = 0;
int volts = 0;
int pboost = 0;
int result = 0;
//byte i = 0;
void setup()
{
TV.begin(PAL,90,40); // 1 ширина, 2 высота
TV.select_font(font6x8); // 1 ширина, 2 высота
Serial.begin(115200);
}
void loop()
{
if (Serial.available() > 7)
{
for (byte i=0; i < 8; i++)
{
serialInArray[i] = Serial.read();
}
}
watertemp = serialInArray[0]; //senstvaz
turbo = serialInArray[1]; //kpa
pboost = serialInArray[2]; //pboost
volts = serialInArray[3]; //volts
result = serialInArray[7];
result = (result << 24) | serialInArray[6];
result = (result << 16) | serialInArray[5];
result = (result << 8) | serialInArray[4];
//Serial.flush();
//serialInArray[i] = 0;
delay(50);
TV.clear_screen();
TV.set_cursor(0,6);
TV.print("TMP ");
TV.print(watertemp);
TV.set_cursor(40,6);
TV.println(volts);
TV.set_cursor(0,14);
TV.print("TURBO ");
TV.println(turbo);
TV.set_cursor(0,22);
TV.print(freeRam());
// TV.println(pboost);
TV.set_cursor(0,30);
TV.print("RPM ");
TV.println(result);
}
Массив обьявлен как:
byte serialInArray[8];
Вот он принимается:
if (Serial.available() > 7)
{
for (byte i=0; i < 8; i++)
{
serialInArray[i] = Serial.read();
}
Вот в этой строчке - for (byte i=0; i < 8; i++) , должно быть i < 8 или i < 9 ?
Работает в обоих случаях, а как правильно будет?
И ВСЕХ С НОВЫМ ГОДОМ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!))))))))) ))))))))))))))))))))))))))))
Последний раз редактировалось mebitek; 01.01.2012 в 00:31.
должно быть i < 8, потому что массив имеет размерность 8 значенийВот в этой строчке - for (byte i=0; i < 8; i++) , должно быть i < 8 или i < 9 ?
Работает в обоих случаях, а как правильно будет?
Спасибо Эдуард!
Эдуард , ты два раздельных байта имел в виду или как массив?Можно перед началом данных посылать дескриптор размером 2 байта например 170, 204 или что то в этом роде
Щас вот так сделал, но боюсь что это не совсем мне подходит.
Если они раздельные, то как должен выглядеть приём, подскажи пожалуйста?PHP код:
void loop()
{
if (Serial.available() > 8)
{
if(Serial.read() == 255)
{
for (byte i=0; i < 8; i++)
{
serialInArray[i] = Serial.read();
}
}
}
Правильно
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)