Který se pohne, ten je něčím ovládaný, který se nepohne, ten buď nějaká knihovna považuje za INPUT, ale nemá ho nikam zapojený, nebo je volný.
(V druhém kole bych je naopak dal jako OUTPUT a sledoval zevnítř, zda to něco nezmění.)
Na to je asi potřebuješ převést na "opravdové adresy" podle Atmelu/Microchipu, pomůže třeba tenhle obrázek z https://forum.arduino.cc/t/atmega328-st ... ard/936878

kde si například přečteš, že Digital pin 13 (system LED) se správně nazývá PB5 a je to tedy 5. bit na portu B (číslováno 0..7) (a na DIP chipu (podlouhlém) je to 19. nožička, zatímco na TQFP a MLF chipech (čtvercových) je to 17.nožička)
v C/C++ přečteš jeho mod pomocí registru DDRB napřiklad (píšu z hlavy, můžou tam být překlepy)
Kód: Vybrat vše
if ((DDRB & _BV(5)) == 1) {
Serial.print("PB5 is INPUT");
} else { // DDRB & 0b 0010 0000 == 0
if ((PINB & _BV(5)) == 0) {
Serial.print("PB5 is INPUT");
} else {
Serial.print("PB5 is INPUT_PULLUP");
};
};
if ( (PINB & _BV(5)) == 0 ) {
System.println(" and is LOW");
} else {
System.println(" and is HIGH");
}
https://ww1.microchip.com/downloads/en/ ... asheet.pdf
kde se na stránce 59 dočteš, že
Pro port B:Configuring the Pin
Each port pin consists of three register bits: DDxn, PORTxn, and PINxn. As shown in ”Register Description” on
page 100, the DDxn bits are accessed at the DDRx I/O address, the PORTxn bits at the PORTx I/O address,
and the PINxn bits at the PINx I/O address.
The DDxn bit in the DDRx Register selects the direction of this pin. If DDxn is written logic one, Pxn is
configured as an output pin. If DDxn is written logic zero, Pxn is configured as an input pin.
If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is activated. To
switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to be configured as an output
pin. The port pins are tri-stated when reset condition becomes active, even if no clocks are running.
If PORTxn is written logic one when the pin is configured as an output pin, the port pin is driven high (one). If
PORTxn is written logic zero when the pin is configured as an output pin, the port pin is driven low (zero).
Zapsáním nuly do bitu v DDRB se daný pin nastaví na INPUT, zapsáním 1 do příslušného bitu v PINB se mu nastaví PULLUP, zapsáním 0 shodí (taky se shodí, pokud se nastaví výstup)
Zapsáním 1 do bitu v DDRB se daný pin nastaví na OUTPUT, následně zapsání 0, nebo 1 do PINB se nastaví na LOW, nebo HIGHT, zapsáním 1 do PINB se hodnota překlopí.
Pokud máš nastavený jen INPUT a hodnota plave (je nepřipojený), tak čtením dostaneš "náhodně" 0 nebo 1, přičemž to znamená jen, že není zaručeno co a kdy. Klidně to může být celou dobu jedno, nebo druhé, nebo se to nějak měnit.
Čili číst, jestli tam něco skutečně je, nebo není se dá jen zvenku jiným měřákem (který to taky může ovlivnit, pokud není vhodný). Rozhodně vhodný měřák jsem si postavil a vzkoušel, je tady: https://robodoupe.cz/2018/drobnicky-003 ... -sledovac/, zejména neruší I2C sběrnici, ale vhodných jiných je spousta.
Pokud chce šlověk odchytit i krátké pulzy, tak na výstup tohohle ještě zapojí jednou nohou R-S klopný obvod (a druhou nohou ho nuluje)
A teda asi bych začal tím, že odpojím napájení motorů (a senzory a tak, co půjde), nahrál do toho UNA nějaký testovací prográmek (já používám https://github.com/githubgilhad/memxFORTH-core jako interaktivní shell ve FORTHu) a postupně si tahal za nožičky (dával tam nuly a jedničky) a měřil, kam to doleze, co je s čím přesně propojené (ale to možná máš na tom svojem obrázku, podle toho, jakým způsobem jsi ho "sesmolil")
(Sakra, ono je půl šesté ráno, nikoli večer a já proč začínám mít pocit, že se v tom trochu ztrácím. No nic, půjdu spát a jestli ti tohle přijde jako zajímavý směr, tak napiš, co mám rozepsat podrobněji, nebo kam pokračovat dál. Já se teď na nějakou dobu pomořil do toho svojeho MHF-002 = což je převážně asembler na atmega2560 =Arduino Mega a teď mi to při překladu píše
Kód: Vybrat vše
FLASH used: 60848 / 262144 bytes
| size | hexa | build/FORTH_c_003.elf
--------+--------+--------+--------------------------
FLASH: | 60848 | 0xEDB0 | data: 628 + text: 60220
RAM: | 19892 | 0x4DB4 | data: 628 + bss: 19264
7122 bytes .FORTH_data
3499 bytes .bss
628 bytes .data
15765 bytes .highram
a všechno je tam vysvětlené podrobně a do detailů, ale je to dlouhé 293 stránek a anglicky
----
Vzhledem k tomu, že UNO (atmega328p) má jen jeden I2C port (PC4 - SDA, PC5 - SCL) tak mi přijde divné, že na tom svém obrázku ho máš 4x, z toho jednou černý, podruhé modrý a 2x prázdný - podle mě by asi měly být všechny SDA vnitřně propojené, stejně jako všechny SDL. Stejně tak další vícenásobné vývody, jako D12 D13 9a možná další).
WIN je nejspíš VIN (V jako Voltage, IN jako vstup)