Skocz do zawartości

Szeregowy monitor Atmega8l


mpkmateusz

Pomocna odpowiedź

Witam. Mam mały problem. Otóż podłączyłem piny tx, rx i gnd atmegi8l do pinów atmegi328p (bezpośrednio wpięte w płytkę arduino). Atmega 328p jest podpięta do laptopa, gdzie uruchomiony jest monitor szeregowy. W atmedze 328p nie ma żadnego programu, poprostu chciałem tylko wykorzystać połączenie atmega8l z komputerem. Wszystko jest wporządku, tzn. dane są przesyłane; serial.begin ustawione w laptopie i programie na 9600. A problem jest jak chcę wysłać np. 3 to w odpowiedzi zwrotnej dostaję np. 51. O co chodzi??

Taki kod mniej więcej mam:


int y = 0;

void setup(){

Serial.begin(9600);}

void loop(){

if (Serial.available() > 0){

          y = Serial.read();
          Serial.println(y);}
}

Link do komentarza
Share on other sites

Dzięki.

Ale mam kolejny problem. Mam połączone przez usart płytkę arduino z atmegą 8l. Jak włącze monitor szeregowy to wpisując np. 4 włącza się silnik ( tak ma być), a jak wpiszę w atmedze328p kod "Serial.println(4);" to wypisuje w monitorze szeregowym, ale nic się nie dzieje w atmedze 8l. zmieniałem kombinacje TX->RX i odwrotnie, ale nic to nie zmienia.

W momencie gdy wysyłałem informacje monitora szeregowego to łączyłem RX od atmegi 8l z RX na płytce arduino (pierwsze wejście) i wszystko działało. ????

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

czyli jak mam coś takiego na atmedze 8l


byte dane = 0;
byte czas = 0;

void setup(){

Serial.begin(9600);
}
void loop(){

if (Serial.available() > 0){
   dane = Serial.read();
   }

 if (dane> 0 & dane <10){
    czas = dane;
    }
 while(dane == 11){
    start();
    if(Serial.available() > 0){
       break;}
    }
 while(dane == 12){
    stop();
   if(Serial.available() > 0){
       break;}
    }
 }

to jak powinien wyglądać kod dla atmegi 328??

Robiłem coś takiego:


void setup(){

Serial.begin(9600);
}

void loop(){

Serial.println(5);
delay(1000);
Serial.println(11);
delay(5000);
}

Atmega328 wysyła informacje bo widze na monitorze szergowym, ale kompletnie nie reaguje atmega8l.

[ Dodano: 22-02-2016, 12:06 ]

Dobra, udało się 🙂


char ascii[80];
int lf = 10;
int dane = 0;

void setup(){

Serial.begin(9600);
}
void loop(){

if (Serial.available() > 0){
            Serial.readBytesUntil(lf, ascii, 80);
            dane = ((int)ascii[0]-48)*10;
            dane += ((int)ascii[1]-48);
            }

 if (dane>0 & dane<10){
    czas = dane;
    }


 if(dane==11){
   obr_stop();
   }


 while (dane==12){
    obrlewo();
    delay(czas);

   if(Serial.available() > 0){
    break;}}
 while (dane==13){
    obrprawo();
    delay(czas);

     if(Serial.available() > 0){
    break;}}

Teraz działa jak należy. Jednak mógłby mi ktoś łopatologicznie wyjaśnić jak działa funkcja Serial.readBytesUntil? Coś nie bardzo wiem dlaczego 3 argumenty są w niej.

[ Dodano: 22-02-2016, 12:50 ]

W jaki sposób można przerobić ten kod, żeby działał dla liczb od 0 do 10000?

Link do komentarza
Share on other sites

mpkmateusz, funkcja Serial.readBytesUntil przyjmuje 3 argumenty, ponieważ musisz jej podać trzy rzeczy:

- znak, do którego ma odczytywać dane wejściowe,
- bufor, do którego odczytywane dane będą zapisywane (inaczej byśmy je tracili),
- maksymalną ilość odczytanych znaków, aby w przypadku błędu nie odczytywać ich w nieskończoność.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.