arduino nano COM port

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

KUTIFAR5
Stály člen
Stály člen
Príspevky: 117
Dátum registrácie: 03 Mar 2013, 21:19

arduino nano COM port

Príspevok od používateľa KUTIFAR5 » 27 Mar 2018, 19:07

nazdar potrebujem poradiť ohľadom programu na arduino
mám v arduine nahratý program ktorý nastaví určené pini ako zapnuté
a chcem niektorý pin vypnúť cez COM port v arduino programe ale neviem čo tam napísať aby sa pin vypol

program :


char value;
int up = 4;
int down = 9;
int led = 6;


void setup()
{
pinMode(up, OUTPUT);
pinMode(down, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(up, HIGH);
digitalWrite(down, HIGH);
digitalWrite(led, HIGH);
Serial.begin(9600);
}


void loop()
{
if( Serial.available() )
{;}

value = Serial.read();


if( value == '0' )
{
digitalWrite(up, LOW);
}

if( value == '1' )
{
digitalWrite(up, HIGH);
}

if( value == '2' )
{
digitalWrite(down, LOW);
}

if( value == '3' )
{
digitalWrite(down, HIGH);
}

if( value == '4' )
{
digitalWrite(led, LOW);
}

if( value == '5' )
{
digitalWrite(led, HIGH);
}

}




vopred ďakujem za pomoc



! Téma presunutá do správnej sekcie. presunul: 28.3.2018 mirosne !
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: arduino nano COM port

Príspevok od používateľa jirka.jirka. » 27 Mar 2018, 19:43

Nastav pin jako vstupní a zapni mu pullup, pokud je to možné.

Pokud je mi známo, všechny GPIO na AVR po inicializaci jsou standardně vysoké vstupní impedanci (to odpovídá registru DDRx = 0)

PS: Program vlož do CODE:

Kód: Vybrať všetko

Kód v tomto je čitelnější.
Dál toto se mi moc nelíbí.

Kód: Vybrať všetko

int up = 4;
int down = 9;
int led = 6;

void setup() 
{
pinMode(up, OUTPUT);
pinMode(down, OUTPUT);
pinMode(led, OUTPUT);
digitalWrite(up, HIGH);
digitalWrite(down, HIGH);
digitalWrite(led, HIGH);
Serial.begin(9600);
}
Když už, tak bych to upravil pomocí #define

Kód: Vybrať všetko

#define UP 4;
#define DOWN 9;
#define LED 6;


void setup() 
{
pinMode(UP, OUTPUT);
pinMode(DOWN, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(UP, HIGH);
digitalWrite(DOWN, HIGH);
digitalWrite(LED, HIGH);
Serial.begin(9600);
}
0

alidedko
Ultimate člen
Ultimate člen
Príspevky: 3963
Dátum registrácie: 04 Feb 2013, 22:04
Bydlisko: U alibabky v Poprade
Vek: 32

Re: arduino nano COM port

Príspevok od používateľa alidedko » 27 Mar 2018, 20:05

if( Serial.available() )
{;}

value = Serial.read();

Toto je OK? Nie som prave cez arduino, ale takyto zapis mi nie je po chuti :)
0
Motto: Nikto nie je tak velky, aby sa nevosiel do truhly.

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4318
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: arduino nano COM port

Príspevok od používateľa misocko » 27 Mar 2018, 20:19

odoslanim "1" z klavesnice zapnes pin 4, vypnes ho nulou atd vid. tabulka
problemy v programe neriesim, presne to co si dal asi nemas napalene v tom arduine
odkial mas program , co presne chces robit?
Prílohy
piny.PNG
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: arduino nano COM port

Príspevok od používateľa jirka.jirka. » 27 Mar 2018, 20:24

No, 3 sekundu google a ono ejhle:

Tak a tento program by mel delat to, ze kdyz odeslel 0 dioda zhasne. Odesles 1 a dioda se rozne.

Kód: Vybrať všetko

if (Serial.available() > 0) /*kontrola, zdalipak jsme neco prijalo*/
{
	value = Serial.read(); /*Co jsem odeslal z PC  zpracuju*/
	if( value == '0' )
	{
		digitalWrite(LED, LOW); /*zhasnu LED*/
		Serial.println("Prijal jsem nulu"); /*informativni vysup na uart*/
	}
	if( value == '1' )
	{
		digitalWrite(LED, HIGH); /*Roznu LED*/
		Serial.println("Prijal jsem jednicku"); /*informativni vysup na uart*/
	}
}
Snad jsem to nepopletl, ale s ARDUINO jsem nikdy nepracoval. :P

Zkus rozjet to co jsem ti poslal, pak se posuneme dál. :thumbup:

PS: Kód vkládej do bloků [ code]tvé řádky programu[ /code] a vynechej mezery.
0

ryty
Stály člen
Stály člen
Príspevky: 123
Dátum registrácie: 24 Mar 2008, 00:00
Bydlisko: Nitriansky
Vek: 34

Re: arduino nano COM port

Príspevok od používateľa ryty » 28 Mar 2018, 17:47

Prizivim sa v teme, ked mam na arduino nano lubovolny pin nastaveny ako vstupny, zvladne tento pin 12V?
0
nemam vyjadrovanie ako elektrotechnik, do elektrotechniky sa velmi nevyznam no chcem sa nieco nove naucit - som samouk

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: arduino nano COM port

Príspevok od používateľa peterple » 28 Mar 2018, 18:06

nie, su tam clamp diody pripojené na VCC a GND. T.j. ochrana proti vyššiemu napätiu ako je VCC a proti zápornému.

-- Spojený príspevok 28 Mar 2018, 17:13 --

Inak nevidím dôvod prečo by ten program na začiatku nemal fungovať ak keď je tam toto:

Kód: Vybrať všetko

if( Serial.available() )
{;}
Čo je úplná zbytočnosť ale syntakticky správna, pravdepodobne kompilátorom ignorovaná. Ako to má byť správne sa tu už objavilo, ale v kóde žiadny problém nieje.
Serial.read vráti -1 ak nie je čo prečítať. Takže sa nič zlého nestane.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: arduino nano COM port

Príspevok od používateľa jirka.jirka. » 28 Mar 2018, 20:39

Ano nic se nestane, kompilátor to přejde úplně v pohodě. syntakticky je to CAJK. Ale proč ty data nezpracovat pouze tehdy, když jsou k dispozici?

Ušetří se nějaký čas a procesor mezitím může louskat něco jiného.

Jinak nevím nevím, ale pokud tu proměnnou value nesmaže po vykonání toho kódu, tak se bude provádět do aleluja. Kdežto když se to provede v části

Kód: Vybrať všetko

if (Serial.available() > 0) /*kontrola, zdalipak jsme neco prijalo*/
{}
Tak se provede jen jednou a znova až po přijmutí dat.
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: arduino nano COM port

Príspevok od používateľa peterple » 28 Mar 2018, 21:30

Nič proti tomu že je to postavené celé na hlavu. Ale kedže autor otázky o programovaní nič nevie tak to nemá cenu riešiť. Ja som chcel tým povedať len to, že ten kód aj keď je napísaný zle tak zapínať a vypínať LEDky by mal. A ak to nerobí tak chyba bude niekde inde, ale nie v prezentovanom kóde. Môže to byť zle zapojené, môže mať zle nastavenú Fosc a potom má zlú baudovú rýchlosť.
Predpokladám že také niečo ako si poslať znak späť aby vedel či mu vôbec funguje sériová komunikácia ho nenapadlo.

Toto je opäť jeden z prístupov typu: Kúpil som si Cesnu, natankoval som ju, posunul som plynovú páku na max a ono to nechce letieť - poradte čo mám robiť. Inak bežne lietam Boeingom v prvej triede.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
ilo
Okoloidúci
Okoloidúci
Príspevky: 15
Dátum registrácie: 09 Feb 2017, 19:53
Vek: 39
Kontaktovať používateľa:

Re: arduino nano COM port

Príspevok od používateľa ilo » 12 Aug 2018, 20:56

Sice neskora odpoveď ale....
Môžeš použiť funkciu switch
Pozri aj ascii tabulka
Ak pošleš s terminálu a -v ascii a zodpovedá dec hodnota 95, takže ak chceš ledku zapnúť poslaním 1 s terminálu musíš za case dať dec hodnotu zodpovedajúcu 1 podľa ascii a to je 49

Kód: Vybrať všetko

void loop(){

 if(Serial.available() > 0 ){
    
    // Serial.println(serial_read,DEC);
    switch (Serial.read()) {
    case 97:
  funkcia1();
      Serial.println("a");
      break;
    case 98:
      funkcia2();
         Serial.println("b");
      break;
        case 99:
       funkcia3();
         Serial.println("c");
      break;
   default: 
      // if nothing else matches, do the default
      // default is optional
      
      Serial.println("Fail data");
   
 } } 


} 
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: arduino nano COM port

Príspevok od používateľa peterple » 12 Aug 2018, 21:59

Síce mrtvá téma, ale keď už, tak aspoň radiť s rozumom.
Akú výhodu má miesto znakovej konštanty použiť desiatkovú ASCII hodnotu? Nie je to neprehľadné? To mám naspamäť vedieť kódy písmen a číslic?
Nie je to takto prehladnejšie?

Kód: Vybrať všetko

    switch (Serial.read()) {
    case 'a':
  funkcia1();
      Serial.println("a");
      break;
    case 'b':
      funkcia2();
         Serial.println("b");
      break;
        case 'c':
       funkcia3();
         Serial.println("c");
      break;
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