mám program pro Arduino Nano, kde se snažím nastavit některé piny na output. Konkrétně 4,5 a 8. Osmička se mi daří, ale 4 a 5 zůstávají stále vstupní a nevím proč.
Mám následující kód (v vSeznam je, které piny se nastavují v getBite na jakou hodnotu)
Kód: Vybrat vše
for (int i = 0; i < cPinCount; i++) {
if (vSeznam.getBite(i)) {
#ifdef EEPROM_Dump
Serial.print(F("Nastavuji PIN="));
Serial.print(i + 1);
Serial.print('=');
Serial.print(getPinMode(i + 1)); //Pozice v zápisu je od nuly, ale piny jsou od jedničky
Serial.print(':');
#endif
pinMode(i + 1, OUTPUT);
#ifdef EEPROM_Dump
Serial.println(getPinMode(i + 1));
#endif
if (getBite(i)) {
digitalWrite(i + 1, HIGH);
}
else {
digitalWrite(i + 1, LOW);
}
}
}
Kód: Vybrat vše
#define UNKNOWN_PIN 1024
uint8_t getPinMode(uint8_t pin)
{
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
// I don't see an option for mega to return this, but whatever...
if (NOT_A_PIN == port) return UNKNOWN_PIN;
// Is there a bit we can check?
if (0 == bit) return UNKNOWN_PIN;
// Is there only a single bit set?
if ((bit & bit) - 1) return UNKNOWN_PIN;
volatile uint8_t* reg, * out;
reg = portModeRegister(port);
out = portOutputRegister(port);
if (*reg & bit)
return OUTPUT;
else if (*out & bit)
return INPUT_PULLUP;
else
return INPUT;
}
malé i znamená, že pin je vstupní a je na něm 0Piny pred nastavenim:
0 i i i i i i i i
1 i i i i i i
Nastavuji PIN=4=0:0 //to znamená, že pin 4 se nastavil z Input na Input
Nastavuji PIN=5=0:0
Nastavuji PIN=8=0:1 //to znamená, že pin 8 se nastavil z Input na output (stav zjištěný před pinMode a po pinMode)
Piny nastaveny
0 i i i I I i i O
1 i i i i i i
velké I znamená, že pin je vstupní a je na něm 1
malé o by znamenale, že pin je výstupní a je na něm 0
velké O znamená, že pin je výstupní a je na něm 1
Z toho výpisu je vidět, že i 4 a 5 se nastavil, ale pouze jako vstupní a je na nich jednička. Osmička se nastavila jako výstupní a je tam jedna.
K arduinu nemám nic připojené a tohle je jediné místo, kde ten pinMode nastavuji.
Hledal jsem, jestli třeby tyto piny nejsouo pro něco systémově rezervované, ale nic jsem nenašel.
Nevíte, čím by to mohlo být nebo co dělám špatně?
Díky
Pb