какая строка будет от 128 для 32... да любая )) какую 32 попросит такую 128 и выдаст... в любой кодировке))
Чтоб лучше понять как всё работает для начала ты должен уметь переводить все буковки и циферки в байты - HEX
Делается это очень просто:
1. Пишем например в блокноте текстовую строку "ABC 123 КОРАБЛИК"
2. Затем открываем таблицу ASCII и смотрим какой буковки какой соответствует байт HEX
буковка "A" - это байт 41
буковка "B" - это байт 42
буковка "С" - это байт 43
пробел - это байт 20
циферка "1" - это байт 31
циферка "2" - это байт 32
циферка "3" - это байт 33
пробел - это байт 20
буковка "К" - это байт CA
буковка "О" - это байт CE
буковка "Р" - это байт D0
буковка "А" - это байт C0
буковка "Б" - это байт C1
буковка "Л" - это байт CB
буковка "И" - это байт C8
буковка "К" - это байт CA
Вот так просто мы перевели текстовую строку "ABC 123 КОРАБЛИК" в троку байтов 41 42 43 20 31 32 33 20 CA CE D0 C0 C1 CB C8 CA
Многие программы показывают сразу и текстовую строку и строку байт...
Например вот программа просмотра файлов Lister
А вот программа анализатор Ethernet автоматом переводит текстовую строку "12345" в троку байтов 31 32 33 34 35
Как видим ничего сложного нет))
Добавлено after 4 minutes 16 seconds:
Наш пульт тоже умеет переводить текстовую строку в байты HEX и выводить байты HEX на экран с помощью таблицы ASCII ))
И т.д.
Наш пульт вообще умеет всё))
Добавлено after 32 minutes 7 seconds:
Теперь, когда мы знаем как перевести "циферки" и "буковки" в байты HEX надо научить это делать ESP32...
В прошлый раз мы научили браузер)) Когда подключали браузер к мега128 по Ethernet...
Нам надо было передать меги128 32 байта HEX. Но браузер не умеет передавать байты HEX. Поэтому мы преобразовали байты HEX в "циферки". Получили три циферки на каждый байт HEX
байт 00 > три циферки "000"
байт 00 > три циферки "000"
байт 00 > три циферки "000"
...
байт 2A > три циферки "042"
байт 45 > три циферки "069"
Так и передавали ))
Каждый байт мы сначала преобразовывали в "циферки" - "000" а потом передавали каждую "циферку" отдельно... "0"... "0"... "0"...
Получилось что мы передавали в три раза больше байт чем нужно. ))
Например один байт 45 мы передавали с помощью трёх байт 30 36 39
Пипец... ))
Добавлено after 58 minutes 49 seconds:
ATmega128 делала обратный процесс:
1 - принимала каждую "циферку" отдельно... "0"... "0"... "0"...
2 - складывала три "циферки" вместе "000"
3 - преобразовывала три "циферки" "000" в байт 00
Или так:
1 - браузер переводил байт 45 в три циферки "069"
2 - браузер передавал каждую "циферку" отдельно... "0"... "6"... "9"...
3 - ATmega128 принимала каждую "циферку" отдельно... "0"... "6"... "9"...
2 - ATmega128 складывала три "циферки" вместе "069"
3 - ATmega128 преобразовывала три "циферки" "069" в байт 45
Думаю достаточно понятно ))
Браузер работает в JavaScript.
Вот код JavaScript для браузера:
Передача:
<script>
//////////////////////////////////////// счёт
var x = 0;
//////////////////////////////////////// bufer_TX[32]
var bufer_TX = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
//////////////////////////////////////// String "001"
var mas_TX = [];
//////////////////////////////////////// байт 01 > String "001"
function abc(x){
if (x > 99) {x = String(x);} // String() Преобразование число в строку
else {
if (x > 9){x = '0' + String(x);} // String() Преобразование число в строку
else {x = '0' + '0' + String(x);}; // String() Преобразование число в строку
};
return x;
}
//////////////////////////////////////// байт 01 > String "001"
for(x=0; x<32; x++) {
mas_TX[x] = abc(bufer_TX[x]);
}
//////////////////////////////////////// String '001,001...' > String '001001...'
for(x=1; x<32; x++) {
mas_TX[0] += mas_TX[x]; // String '001001001001001001001001001001'
}
document.location.assign('http://192.168.0.3/?' + mas_TX[0]); // > Передача String '001001001001001001001001001001'
}
////////////////////////////////////////
</script>
Приём:
<script>
//////////////////////////////////////// счёт
var x1 = 0;
//////////////////////// bufer_RX[32]
var bufer_RX = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
/////////////////////// ASCII '000' > bufer[0]
x1 = 0;
for(x=0; x<32; x++) {
bufer_RX[x] = (Data[x1] & 0x0F)*100 + (Data[x1+1] & 0x0F)*10 + (Data[x1+2] & 0x0F);
if (bufer_RX[x] > 255) {bufer_RX[x] = 255} // 0...255
x1 = x1 + 3;
}
//////////////////////
</script>
ATmega128 делала тоже самом что и браузер)) Только на Си...
Передача:
unsigned char bufer_W5500[128]={...
////////////////////////////////////////// 01 > ASCII > "000"
void st_1000_W5500(char bi)
{
z=0x30; while (bi>99) {z++; bi=bi-100;}; tx2=z; SPI2();
z=0x30; while (bi>9) {z++; bi=bi-10;}; tx2=z; SPI2();
z=0x30; while (bi) {z++; bi=bi-1;}; tx2=z; SPI2();
len += 3;
}
////////////////////////////////// bufer_W5500[128] 01 > ASCII > "000"
for(x=0; x<32; x++) {
st_1000_W5500(bufer_W5500[x]); // bufer_W5500[128] > ASCII > "000"
};
Приём:
/////////////////////////////////// сборка: "000" ASCII > 01:
// ASCII bufer_W5500[128] > 01 bufer_W5500[32]
// bufer_W5500[102]
//GET /?000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042069
x1 = 6; // 0..
x2 = 7; // .0.
x3 = 8; // ..0
for(x=0; x<32; x++) { // systema[32]
bufer_int_W5500 = (int)(bufer_W5500[x1] & 0x0F)*100 + (int)(bufer_W5500[x2] & 0x0F)*10 + (int)(bufer_W5500[x3] & 0x0F); // буфер int
if (bufer_int_W5500 > 255) {goto error;}; // error 255 > error
bufer_W5500[x] = bufer_int_W5500; // bufer_int_W5500 > bufer_W5500[32]
x1 = x1 + 3;
x2 = x2 + 3;
x3 = x3 + 3;
};
///////////////////////////////////
Как-то так))
Добавлено after 34 minutes 22 seconds:
Вот такой фигней мы страдали...
Но всё это длилось не долго...
Потому что на смену браузерам пришли виртуальные машины...
и захватили МИР !
Java от Oracle
Python (это переделанная java)
Android от Google
.NET Framework от Microsoft
...
Все виртуальные машины передают и принимают только байты HEX.
Все виртуальные машины общаются между собой только байтами HEX.
Поэтому им никакие преобразователи кодов не нужны...
Все виртуальные машины общаются напрямую с ATmega128 с помощью байтов HEX без всяких преобразователей кодов...
Но тут другая возникла проблема... А как например в Java преобразовать в байты HEX числа с плавающей запятой ?
Например IP адрес - это число с плавающей запятой...
И тут опять начинаются танцы с бубном ))
Добавлено after 9 hours 38 minutes 43 seconds:
Лучше всё переводить в байты и передавать байтами. Так меги128 будет проще разобраться))
Например в Java всё делается через массив байт.
Машина Java выдаёт IP адрес в виде текстовой строки "/192.168.0.101"
А нам надо получить строку "192.168.0.101"
Можно сделать так:
// вход: строка IP - "/192.168.0.101"
IP = "/192.168.0.101"; // записываем строку
IP_String = ""; // сбрасываем строку
byte[] b_IP = IP.getBytes(); // переводим текстовую стоку в массив байт
int len_IP = b_IP.length; // записываем длину массива байт
for (x=1; x<len_IP; x++) { // преобразуем массив байт в текстовую строку
IP_String += (char)b_IP[x]; // HEX > String
};
// выход: строка IP_String - "192.168.0.101"
Или к примеру надо передать меги128 IP адрес компа.
Машина Java выдаёт IP адрес в виде текстовой строки "/192.168.0.101"
В байтах это будет так 2F 31 39 32 2E 31 36 38 2E 30 2E 31 30 31
Итого надо передать 14 байт.
А нафига нам передавать 14 байт, если сам IP адрес это всего 4 байта ? ))
Значит преобразуем строку 14 байт в 4 байта...
Это тоже можно сделать преобразовав строку в массив байт...
// вход: строка IP - "/192.168.0.101"
IP = "/192.168.0.101"; // записываем строку
byte[] b_IP = IP.getBytes(); // переводим текстовую стоку в массив байт
int len_IP = b_IP.length; // записываем длину массива байт
...
...
...
// выход: 4 байта - C0 A8 00 65
Итого:
Вместо 14 байт текстовой строки мы передали всего 4 байта. )) Прекрасная экономия ресурсов ))
И т.д. и т.п.
Добавлено after 42 minutes 17 seconds:
Короче смысл ты понял))
надо перевести всё на 8 мгц...
Добавлено after 1 hour 13 minutes 33 seconds:
переводим пульт... переключаем фьюзы на RC-8MHz или кварц-8MHz ... по желанию)) для пульта не важно...
// ATmega128:
// RC -8 МHz; фьюзы: Low E4; Higt 99 (CKOPT -off); Extended FE (Watchdog -on; M103C -off).
// кварц -8 МHz; фьюзы: Low EF; Higt 89 (CKOPT -on); Extended FE (Watchdog -on; M103C -off).
и прошиваем пульт...
сидим и радуемся))
Добавлено after 1 hour 59 seconds:
переводим модель... переключаем фьюзы на RC-8MHz или кварц-8MHz ... по желанию)) для модель лучше кварц...
// ATmega128:
// RC -8 МHz; фьюзы: Low E4; Higt 99 (CKOPT -off); Extended FE (Watchdog -on; M103C -off).
// кварц -8 МHz; фьюзы: Low EF; Higt 89 (CKOPT -on); Extended FE (Watchdog -on; M103C -off).
и прошиваем модель...
сидим и радуемся))