Zobrazovanie čísla relé výstupu na displeji

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

kuno23
Okoloidúci
Okoloidúci
Príspevky: 1
Dátum registrácie: 27 Okt 2017, 17:25

Zobrazovanie čísla relé výstupu na displeji

Príspevok od používateľa kuno23 » 27 Okt 2017, 22:48

Ahojte ,potreboval som od Vás pomoc. Mám dosku so 4relé, ktoré chcem použiť ako náhradu mechanického prepínača na audio switchy. Používam dotykové tlačidlo na prepínanie relé výstupu. Na nete som našiel nejaké kódy na prepínanie led pomocou tlačidla, ktoré som si upravil pre moje potreby:

Kód: Vybrať všetko

/*  
Demonstrates the use of an array to hold pin numbers.  
Each time the push button is pressed, next RELAY in the  
sequence will be turned on while the rest of RELAY´s are off.  
*/  
const int buttonPin = 2;   // the number of the pushbutton pin  
const int relayPin1 = 3;   // the number of the Relay1 pin  
const int relayPin2 = 4;   // the number of the Relay2 pin  
const int relayPin3 = 5;   // the number of the Relay3 pin  
const int relayPin4 = 6;   // the number of the Relay4 pin    
// variables will change:  
int buttonState = 0;     // variable for reading the pushbutton status  
int buttonPressCount = 0;  
int numberOfRELAY = 4;  
void setup() {  
  // initialize the Relay pin as an output:  
  pinMode(relayPin1, OUTPUT);  
  pinMode(relayPin2, OUTPUT);  
  pinMode(relayPin3, OUTPUT);  
  pinMode(relayPin4, OUTPUT);    
  // initialize the pushbutton pin as an input:  
  pinMode(buttonPin, INPUT); 
   //Turn OFF any power to the Relay channels
   digitalWrite(relayPin1,LOW);
   digitalWrite(relayPin2,HIGH);
   digitalWrite(relayPin3,HIGH);
   digitalWrite(relayPin4,HIGH);
}  
void loop() {  
  // read the state of the pushbutton value:  
  buttonState = digitalRead(buttonPin);  
  // check if the pushbutton is pressed.  
  // if it is, the buttonState is HIGH:  
  if (buttonState == HIGH) {  
   if (buttonPressCount % numberOfRELAY == 0) {  
    // turn Relay1 on:  
    digitalWrite(relayPin1, LOW);  
   } else {  
    digitalWrite(relayPin1, HIGH);  
   }  
   if (buttonPressCount % numberOfRELAY == 1) {  
    // turn Relay2 on:  
    digitalWrite(relayPin2, LOW);  
   } else {  
    digitalWrite(relayPin2, HIGH);  
   }  
   if (buttonPressCount % numberOfRELAY == 2) {  
    // turn Relay3 on:  
    digitalWrite(relayPin3, LOW);  
   } else {  
    digitalWrite(relayPin3, HIGH);  
   }  
   if (buttonPressCount % numberOfRELAY == 3) {  
    // turn Relay4 on:  
    digitalWrite(relayPin4, LOW);  
   } else {  
    digitalWrite(relayPin4, HIGH);  
   }   
   buttonPressCount++;  
   delay(400);  
  }  
}  
Z popisu je jasné, že po zapnutí, ako prvé zopne relé 1 a každé stlačenie tlačidla prepne na následujúce relé.Takže všetko funguje ako potrebujem.
Chcel by som ale ešte pomocou 8x8 MAX7219 matrix displeja zobrazovať číslo práve zopnutého relé. Čiže zopnuté relé 1 na displeji svieti 1, zopnuté relé 2 na displeji svieti 2, atď. Viete mi stým niekto nejako pomôcť,s úpravou kódu, nejaké pomocné indície , funkčné odkazy-príklady, budem Vám veľmi vďačný za každú pomoc. Som samouk,začiatočník, snáď Vás to nebude obťažovať. Vopred veľmi pekne ďakujem za každú pomoc.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: Zobrazovanie čísla relé výstupu na displeji

Príspevok od používateľa peterple » 28 Okt 2017, 10:50

Ten program naozaj funguje ako si napísal a k plnej spojnosti? Čo urobí ako držís tlačítko trvale? (to asi chceš)
Čo urobí ak stískaš tlačítko rýchlejšie ako je 400ms? (to asi nechceš)
Ale k otázke. Ten maticový displej je imageová podmienka? Ja by som si dal rovno na arduino jednu sedemsegmentovku. Pripojil 7 segmentov na nejaké volné porty (aj analógové) pri prepnutí tam zmenil príslušnú binárnu kombináciu a bolo by to. Podľa toho na koľko rôznych portov sa to pripojí, tak by to bolo jedna až štyri ANDy a ORy s portom.
Možno aj ten maticový by sa dal. Koľko máš volných portov vrátane analógových? Samozrejme potom je program pre teba inej náročnosti, lebo musíš urobiť multiplex a ten nemôžeš nechať 400ms zaseknutý vo funkcii delay().
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok