Подскажите пожалуйста как правильно использовать функцию word(): ? Нашел статью но ничего не получается. Чтобы заново «собрать» большое число, разобранное на байты, есть функция word(): int val = word(hi, low), где "hi" и "low" – это значения старшего и младшего байтов числа "val" Код (C++): word(): int interval = word(hi, low), void setup() { // put your setup code here, to run once: } void loop() { if (menuPos == 0 && KEY == 2) { if (menuPos == 0) // { -- interval; if ( interval < 100) interval = 100; byte hi = highByte(interval); // старший байт byte low = lowByte(interval); // младший байт EEPROM.write(1, hi); // записываем в ячейку 1 старший байт EEPROM.write(2, low); // записываем в ячейку 2 младший байт } } if (menuPos == 0 && KEY == 5) { if (menuPos == 0) { ++ interval; if ( interval > 2000) interval = 2000; byte hi = highByte(interval); // старший байт byte low = lowByte(interval); // младший байт EEPROM.write(1, hi); // записываем в ячейку 1 старший байт EEPROM.write(2, low); // записываем в ячейку 2 младший байт } } }
ТС тоже ничего не понял. Ну добавлю вам еще больше непоняток Код (C++): int data=100;// число int состоит из 2 байт byte *p=(byte *)&data; //p[0] это 1 байт //p[1] это 2 байт // сохраняешь, или записываешь и вот вам data полностью
Руководство Ардуины считает программировать Ардуину должны "дауны". Вот он и оберегает своих подопечных от "знаний языка СИ". Такое себе ЕГЭ. И разумеется подопечные их не разочаровывают. А теперь по делу. В Си есть такая вещь как указатели. А указатели зависят от типа числа. Есть указатели на байт, есть указатели на int ну и так далее. У вас число int . Это 2 байта. Если же принудутельно создать указатель на ваше число и сделать его вместо интового байтовым . Указатели хранят в себе адрес. А вот что бы узнать значения их разыменнуют. Или же вешают рядом скобки [] Если в скобках [0]это первый байт [1] это второй. Ну вы надеюсь уже массивы учили. http://cpp.com.ru/kr_cbook/ch5kr.html#p51 http://ermak.cs.nstu.ru/cprog/html/092.htm
Код (C++): int dataOut=100;// число int состоит из 2 байт byte *p=(byte*)&dataOut; //p[0] это 1 байт //p[1] это 2 байт int dataIn; byte *r=(byte*)&dataIn; r[0]=p[0]; r[1]=p[1]; // теперь в dataIn число 100
Извиняюсь конечно но я ничего не понял для меня это просто ругательства Поподробнее с примером можно?
жесть.... нагуглил Код (C++): union { unsigned int integer; unsigned char byte[4]; } foo; int main() { foo.integer = 123456789; printf("%u %u %u %u\n", foo.byte[3], foo.byte[2], foo.byte[1], foo.byte[0]); } но этот код не портируемый. тут скорее всего решение для 32 бит машины. Так лучше: Код (C++): union { uint16_t integer; uint8_t byte[2]; } foo;
https://www.arduino.cc/en/Reference/EEPROM Смотрите описание функций, там есть примеры использования.