• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
odwoływanie się do zmiennych i stałych po ich nazwach w pętli
#1
Hej

Próbuję jakoś w pętli for czytać wejścia z Arduino Mega - jest ich 15 i nie chcę ich czytać odwołując się po nazwach osobno - tym bardziej,  że mam sporo działać do przeprowadzenia na zmiennej val_switch.   Dużo przyzwyczajeń z js i PHP.   Jak to czytać w C? 

Kod:
for (int i = 0 ; i < 3 ; i++) {
     
       
      val_switch =  digitalRead("CONTROLLINO_A"+i);



}
 
Odpowiedź
#2
Ale co taka pętla ci da? jak tylko ostatnie wywołanie będzie prawdą a przed się skasują . Wiec po skoczeniu pętli for val_switch zawsze zwróci tylko ostatni odczyt...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
(28-02-2021, 21:23)Jarewa0606 napisał(a): Ale co taka pętla ci da? jak tylko ostatnie wywołanie będzie prawdą a przed się skasują . Wiec po skoczeniu pętli for  val_switch zawsze zwróci tylko ostatni odczyt...

Mam zamiar sprawdzić wszyatkie wejścia - będzie ich 16 i jeśli któreś będzie mieć stan wysoki to wtedy załączę wyjście przekaźnika R0 , R2 itd.  nie wkleiłem reszty kodu aby nie zaciemniał.   Przecież nie będę robił 16 bloków if.
 
Odpowiedź
#4
Coś takiego: "CONTROLLINO_A"+i, nie zadziała. Nie zsumujesz tablicy znaków z intem.
Nie lepiej iterować same liczby? Przecież piny w Arduino to zwykłe cyferki.
W Mega piny cyfrowe są od 0 do 53, analogowe od 54 do 69.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
A jeśli piny nie są po kolei to można je przemapować robiąc tablicę - uint8_t IOtab[]={5,3,7,12,A0,itd};, potem w pętli odczytujesz po kolei digitalRead(IOtab[i]);
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
Kod:
for (int i = 0 ; i < 16 ; i++) {
    if(digitalRead($i) == HIGHT){
        // ZAŁĄCZ PRZEKAŹNIK
    }
}
 
Odpowiedź
#7
(02-03-2021, 16:18)kaczakat napisał(a): A jeśli piny nie są po kolei to można je przemapować robiąc tablicę  - uint8_t IOtab[]={5,3,7,12,A0,itd};, potem w pętli odczytujesz po kolei digitalRead(IOtab[i]);

Docelowa aplikacja będzie na sterowniku PLC. Piny są tam zdefiniowane inaczej niż w Arduino mega. To jest Controlino Mega. Nie odwołuje się bezpośrednio do numeru pin tylko do stałej, która zdefiniowana jest w klasie Controlino.  Czy w miejsce elementów tablicy da się wstawić odwołanie do nazwy stałej?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości