Ciao a tutti ragazzi, ho un problema con il pin 13 di Arduino Mega.
In pratica ho programmato i pin dal 2 al 13 come ingressi per pilotare dei relè.
Funzionano tutti bene tranne il 13 che quando viene attivato, si accende il led TX di arduino e il pin non eccita il relè.
Qualcuno saprebbe aiutarmi che sto diventando matto?
Vi posto il codice.
Grazie a tutti.
int outputs[28] = {22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51};
int inputs[28] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, A0, A1, A2, A3, A4, A5, A6, A7};
int relayType[28] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int digitalVals[28] = {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};
int relayVals[28] = {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};
unsigned long relayTimes[28] = {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};
unsigned long TapparellaDelay[28] = {10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000};
void setup() {
Serial.begin(2400);
for(int i = 0; i < 28; i++)
{
pinMode(outputs[i], OUTPUT);
pinMode(inputs[i], INPUT);
digitalWrite(outputs[i], HIGH);
digitalWrite(inputs[i], HIGH);
}
}
void tapparellaTimeCheck()
{
for (int i=0; i<28; i++)
{
if(millis() - relayTimes[i] >= TapparellaDelay[i])
{
switch(relayType[i])
{
case 2:
{
digitalWrite(outputs[i], HIGH);
//muxShieldOutput.digitalWriteMS(1, i + 1, HIGH);
// IO1RelayVals[i] = 0;
//Serial.println(millis() - IO1RelayTimes[i]);
break;
}
case 3:
{
digitalWrite(outputs[i], HIGH);
//muxShieldOutput.digitalWriteMS(1, i - 1, HIGH);
// IO1RelayVals[i] = 0;
break;
}
}
}
}
}
void relayControl()
{
for (int i=0; i<28; i++)
{
digitalVals[i] = digitalRead(inputs[i]);
Serial.println(digitalVals[i]);
switch(relayType[i])
{
case 0:
{
if((digitalVals[i] != relayVals[i]))
{
relayVals[i] = digitalVals[i];
digitalWrite(outputs[i], digitalVals[i]);
}
break;
}
case 1:
{
if(digitalVals[i] == 1)
{
break;
}
if(relayVals[i] == 1)
{
if(digitalVals[i] == 0)
{
relayVals[i] = 0;
digitalWrite(outputs[i], !relayVals[i]);
}
}
else if(relayVals[i] == 0)
{
if(digitalVals[i] == 0)
{
relayVals[i] = 1;
digitalWrite(outputs[i], !relayVals[i]);
}
}
delay(200);
break;
}
case 2:
{
if(digitalVals[i] == 0)
{
if(relayVals[i + 1] == 0)
{
digitalWrite(outputs[i], LOW);
digitalWrite(outputs[i + 1], LOW);
relayVals[i + 1] = 1;
delay(500);
break;
}
if(relayVals[i] == 0)
{
digitalWrite(outputs[i], LOW);
digitalWrite(outputs[i + 1], LOW);
relayVals[i] = 1;
}else{
digitalWrite(outputs[i], HIGH);
digitalWrite(outputs[i + 1], LOW);
relayTimes[i] = millis();
relayVals[i] = !digitalVals[i];
}
delay(500);
break;
}
}
case 3:
{
if(digitalVals[i] == 0)
{
if(relayVals[i - 1] == 0)
{
digitalWrite(outputs[i], LOW);
digitalWrite(outputs[i - 1], LOW);
relayVals[i - 1] = 1;
delay(1000);
break;
}
if(relayVals[i] == 0)
{
digitalWrite(outputs[i], LOW);
digitalWrite(outputs[i - 1], LOW);
relayVals[i] = 1;
}else{
digitalWrite(outputs[i], HIGH);
digitalWrite(outputs[i - 1], LOW);
relayTimes[i] = millis();
relayVals[i] = !digitalVals[i];
}
delay(1000);
break;
}
}
}
}
}
void loop() {
tapparellaTimeCheck();
relayControl();
}