Odpowiedz 
 
Ocena wątku:
  • 1 Głosów - 3 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #47
RE: Arduino
Dzisiaj Łukasz wrzucił nową wersję biblioteki do APRS. Pojawiło się pare nowych metod użycia dzięki czemu zzabawa jest bardziej elastyczna:

Kod:
#include <Arduino.h>
#include <ArduinoQAPRS.h>

char * packet_buffer  = "                                                                    \n ";


void setup(){
    // inicjalizacja
    // pin 3 to sensePin [wejscie] - 1 oznacza brak mozliwosci nadawania
    // pin 2 to txPin [wyjscie] - stan wyski w momencie rozpoczecia nadawania
    QAPRS.init(3,2,"SQ5RWU", '0', "APZQAP", '0', "WIDE1-1");
}

void loop() {
        // nadanie paketu typu komentarz
        packet_buffer = ":TEST TEST TEST de SQ5RWU";
        // zmiana adresu źródłowego i ssida
        QAPRS.setFromAddress("SQ5R", '1');
        QAPRS.sendData(packet_buffer);
        // nadanie pakietu z pozycja i symbolem wahadlowca
        packet_buffer = "!5215.68N/02057.48ES#";
        // zmiana adresu źródłowego, ssida i ścieżki
        QAPRS.setFromAddress("SQ5RWU", '2');
        QAPRS.setRelays("WIDE2-2");
        QAPRS.sendData(packet_buffer);
        // nadanie danych pogodowych bez pozycji
        packet_buffer = "_07071805c025s009g008t030r000p000P000h00b10218";
        // zmiana ścieżki
        QAPRS.setRelays("WIDE1-1");
        QAPRS.sendData(packet_buffer);
        delay(5000);
}

Ja nieco poprawiłem swoją płytkę do testowania tej biblioteki i napisałem w arduino prosty program by się tym bawić.

Kod:
/*
    Copyright Rysiek Labus SQ9MDD
APRS Platform na bazie arduino i QAPRS.

APRS Platform is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

APRS Platform is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with ArduinoQAPRS; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


APRS Platform jest wolnym oprogramowaniem; możesz go rozprowadzać dalej
i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU,
wydanej przez Fundację Wolnego Oprogramowania - według wersji 2 tej
Licencji lub (według twojego wyboru) którejś z późniejszych wersji.

Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
ZASTOSOWAŃ. W celu uzyskania bliższych informacji sięgnij do
Powszechnej Licencji Publicznej GNU.

Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
Powszechnej Licencji Publicznej GNU (GNU General Public License);
jeśli nie - napisz do Free Software Foundation, Inc., 59 Temple
Place, Fifth Floor, Boston, MA  02110-1301  USA

Changelog

2013.07.16 Stabilna wersja 1.0 obsługa wysyłania bikonu, zapis konfiguracji
do eepromu.

*/
#include <EEPROM.h>
#include <Arduino.h>
#include "ArduinoQAPRS.h"

#define version 1.0;

//zmienne, nie dotykac
char from_addr[] = "NOLIC ";              //znak
char * relays = "                    ";   //20 znaków
char * comment_arr = "                                                             ";//bufor na ramkę 60 znaków 19 na koordynaty symboj i tablice.
char * packet_buffer  = "                                                                    \n ";
int volt_indic = 0;                       //czy pokazac napięcie?
int ssid = 0;                             //domyślne SSID
int beacon_interwal = 1;                  //domyślny czas wysyłania beaconu w minutach
int napiecie_zasilania_pin = A3;
String content = "";
unsigned long time_to_beacon = millis() + (beacon_interwal*60000); //domyślnie co minute i co minute blokujemy na dole

//zapis zmiennych do eepromu
void save_to_eeprom(){
  EEPROM.write(0,1);                     //zaznaczamy ze zapisana jest pamiec
  EEPROM.write(1,volt_indic);            //zaznaczamy wyswietlanie napiecia
  EEPROM.write(2,ssid);                  //zapisujemy ssid
  EEPROM.write(3,beacon_interwal);       //zapisujemy co ile wysylamy beacon  
  //zapis callsign do eeprom 6 znaków
  for(int a = 4; a <= 9; a++){
    EEPROM.write((a),from_addr[a-4]);
  }
  //zapis path 20 znaków
  for(int b = 10; b <= 29; b++){
    EEPROM.write((b),relays[b-10]);
  }
  //zapis komentarz 60 znaków
  for(int c = 30; c <= 90; c++){
    EEPROM.write((c),comment_arr[c-30]);
  }
}

//odczytanie zmiennych z eepromu i  wczytanie do zmiennch lokalnych albo ustawienie domyślne
void read_from_eeprom_or_make_default(){
  int skonfigurowany = EEPROM.read(0);
  if(skonfigurowany == 1){
    volt_indic = EEPROM.read(1);
    ssid = EEPROM.read(2);
    beacon_interwal = EEPROM.read(3);
    //odczyt callsign z eeprom
    for(int a = 4; a <= 9; a++){
      from_addr[a-4] = EEPROM.read(a);
    }
    //odczyt sciezki
    for(int b = 10; b <= 29; b++){
      relays[b-10] = EEPROM.read(b);    
    }    
    //odczyt kometarz koordynaty symbol i tabela z eeprom'u
    for(int c = 30; c <= 90; c++){
      comment_arr[c-30] = EEPROM.read(c);    
    }  
  }
  else{
    relays = "WIDE1 0";
    comment_arr = ">EMPTY EEPROM";
  }
}

void clear_eeprom_memory(){
  for(int a = 0; a < 512; a++){
    EEPROM.write(a,0xFF);
    delay(10);
  }
}

//reset jakby trzeba było sprawdzić konfigurację, no i po czyszczeniu eeproma sie przydaje
void softReset(){
  asm volatile ("  jmp 0");
}

//przygotowujemy dane i wysyłamy ramkę
void prepare_and_send_beacon_f(){
  int napiecie_zasilania = map(analogRead(napiecie_zasilania_pin),0,1023,0,15​9);
  int v_prefix = napiecie_zasilania/10;
  int v_sufix = napiecie_zasilania%10;
  if(volt_indic==1){
    sprintf(packet_buffer,"%s %02u.%01uV",comment_arr,v_prefix,v_sufix);
  }
  if(volt_indic==0){
    sprintf(packet_buffer,"%s",comment_arr);
  }
  QAPRS.send(from_addr, ssid, "APZMDD", '0', relays, packet_buffer);
}

//mala pomoc jesli ktoś nie ma aplikacji
void print_help(){
  Serial.println("APRS Platform based on Arduino and QAPRS library.\ncommands:");
  Serial.println("mca=     callsign");
  Serial.println("mti=     beacon timing (m)");
  Serial.println("mpa=     path");
  Serial.println("mra=     beacon text including symbol, table and coordinates");
  Serial.println("mpv=     voltage in beacon");
  Serial.println("send     sending beacon");
  Serial.println("cls      clearing eeprom memory");
  Serial.println("mem      writing current config to memory");
  Serial.println("reset    reload device");
  Serial.println("help,?   printing this manual");
}

//obowiązkowo setupik na starcie
void setup(){
  pinMode(napiecie_zasilania_pin,INPUT);
  QAPRS.init(0,0);
  Serial.begin(9600);
  read_from_eeprom_or_make_default();
}

//petla główna
void loop() {
  unsigned long time = millis();
  //słuchamy eresa
  while(Serial.available()) {
    char character = Serial.read();
    content.concat(character);
    delay (10);
  }
  if (content != "") {
    content.trim();//wywalamy CR i LF z wchodzących stringów
    time_to_beacon = time + (beacon_interwal*60000);
    //zmiana znaku
    if(content.substring(0,4) == "mca="){
      content.substring(4).toCharArray(from_addr,7)​;
      int by_position = content.indexOf('-')+1;    
      ssid = content.substring(by_position).toInt();
    }
    if(content.substring(0,4) == "mti="){
      beacon_interwal = content.substring(4).toInt();
      //Serial.print(a);
    }
    if(content.substring(0,4) == "mpa="){
      content = content.substring(4);      
      int dlugosc = content.length()+1;
      content.toCharArray(relays,dlugosc);      
    }
    if(content.substring(0,4) == "mpv="){
      if(content.substring(4) == "1"){
        volt_indic = 1;
      }
      if(content.substring(4) == "0"){
        volt_indic = 0;
      }
    }
    if(content.substring(0,4) == "mra="){
      content = content.substring(4);
      int dlugosc = content.length()+1;
      content.toCharArray(comment_arr,dlugosc);      
    }  
    if(content.substring(0,4) == "send"){
      prepare_and_send_beacon_f();
    }
    if(content.substring(0,3) == "cls"){
      clear_eeprom_memory();  
    }  
    if(content.substring(0,3) == "mem"){
      save_to_eeprom();  
    }
    if(content.substring(0,5) == "reset"){
      softReset();  
    }
    if(content.substring(0,4) == "help"){
      print_help();
    }
    if(content.substring(0,1) == "?"){
      print_help();
    }    
    content = "";
  }  
  //jesli ramka co minute to nie wysylamy nic takie zabezpieczenie jesli konfig nie wgrany
  if (time >= time_to_beacon && beacon_interwal!= 1){
    prepare_and_send_beacon_f();
    time_to_beacon = time + (beacon_interwal*60000);
  }
}

Kod jest do uporządkowania, piszę w arduino dopiero trzeci tydzień.
Do tego napisałem aplikację na pc w lazarusie do konfiguracji płytki...
Ogólnie trzeba jeszcze sporo nad tym popracować, Smile jak ktoś ma ochotę to zapraszam do zabawy.


Załączone pliki
.rar  aprs-platform.rar (Rozmiar: 1.59 MB / Pobrań: 443)
.lay  aprs-platform-1.0-main-board.LAY (Rozmiar: 110.31 KB / Pobrań: 473)

...przede wszystkim nie zakłócać...
17-07-2013 1:31
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Arduino - SQ9MDD - 30-06-2013, 14:28
RE: Arduino - SP6IFN - 30-06-2013, 18:12
RE: Arduino - SP9MRN - 30-06-2013, 18:36
RE: Arduino - SQ9MDD - 30-06-2013, 20:09
RE: Arduino - SP9MRN - 30-06-2013, 21:48
RE: Arduino - SP6IFN - 30-06-2013, 22:52
RE: Arduino - SP9MRN - 30-06-2013, 23:21
RE: Arduino - SP6IFN - 01-07-2013, 10:31
RE: Arduino - SQ6OXK - 06-09-2013, 12:25
RE: Arduino - SP3WXO - 01-07-2013, 10:33
RE: Arduino - SP9MRN - 01-07-2013, 10:46
RE: Arduino - SP6IFN - 01-07-2013, 12:52
RE: Arduino - SP5FCS - 01-07-2013, 14:10
RE: Arduino - SQ9MDD - 01-07-2013, 19:30
RE: Arduino - SP3WXO - 01-07-2013, 22:27
RE: Arduino - SQ9MDD - 01-07-2013, 23:42
RE: Arduino - SP5FCS - 01-07-2013, 23:47
RE: Arduino - SQ9MDD - 02-07-2013, 0:16
RE: Arduino - SQ9NJE - 01-07-2013, 22:45
RE: Arduino - SQ4AVS - 02-07-2013, 6:22
RE: Arduino - SP9MRN - 02-07-2013, 11:28
RE: Arduino - SQ9MDD - 02-07-2013, 12:44
RE: Arduino - SP6IFN - 02-07-2013, 14:35
RE: Arduino - SP9MRN - 02-07-2013, 15:09
RE: Arduino - SP6IFN - 02-07-2013, 17:05
RE: Arduino - SP5ETB - 02-07-2013, 17:46
RE: Arduino - SQ9KRJ - 03-07-2013, 19:45
RE: Arduino - SP3WXO - 03-07-2013, 20:33
RE: Arduino - SP5ETB - 04-07-2013, 10:53
RE: Arduino - SQ9MDD - 03-07-2013, 21:16
RE: Arduino - SP3WXO - 04-07-2013, 18:12
RE: Arduino - SQ9MDD - 09-07-2013, 20:48
RE: Arduino - SP9MRN - 09-07-2013, 21:07
RE: Arduino - SQ9MDD - 10-07-2013, 9:21
RE: Arduino - SP6IFN - 10-07-2013, 10:32
RE: Arduino - SQ9MDD - 10-07-2013, 16:50
RE: Arduino - SP6IFN - 10-07-2013, 20:48
RE: Arduino - SQ9MDD - 10-07-2013, 21:08
RE: Arduino - SP6IFN - 10-07-2013, 21:55
RE: Arduino - SQ9MDD - 11-07-2013, 8:36
RE: Arduino - SQ4AVS - 14-07-2013, 20:15
RE: Arduino - SP6IFN - 14-07-2013, 20:28
RE: Arduino - SQ4AVS - 14-07-2013, 20:34
RE: Arduino - SP6IFN - 15-07-2013, 14:47
RE: Arduino - SP5ETB - 16-07-2013, 14:05
RE: Arduino - SP9MRN - 15-07-2013, 15:33
RE: Arduino - AMATOR - 15-07-2013, 16:26
RE: Arduino - SQ9MDD - 17-07-2013 1:31
RE: Arduino - SQ4AVS - 29-07-2013, 19:22
RE: Arduino - SQ9MDD - 29-07-2013, 19:31
RE: Arduino - SQ4AVS - 29-07-2013, 20:09
RE: Arduino - SQ9MDD - 29-07-2013, 20:35
RE: Arduino - SQ4AVS - 16-08-2013, 7:19
RE: Arduino - SP6IFN - 17-08-2013, 12:38
RE: Arduino - SP9MRN - 17-08-2013, 12:58
RE: Arduino - SP6IFN - 17-08-2013, 14:11
RE: Arduino - SP3WXO - 17-08-2013, 16:25
RE: Arduino - SQ4AVS - 19-08-2013, 8:52
RE: Arduino - SP6IFN - 05-09-2013, 21:42
RE: Arduino - SP3SWJ - 29-11-2014, 11:43
RE: Arduino - SP9MRN - 06-09-2013, 0:12
RE: Arduino - SP6IFN - 06-09-2013, 11:12
RE: Arduino - SP9MRN - 06-09-2013, 11:57
RE: Arduino - SP9MRN - 06-09-2013, 12:51
RE: Arduino - SP6IFN - 06-09-2013, 14:14
RE: Arduino - SQ5KVS - 06-09-2013, 16:23
RE: Arduino - SQ6OXK - 06-09-2013, 22:22
RE: Arduino - SP6IFN - 06-09-2013, 23:33
RE: Arduino - SP6AUO - 28-09-2013, 15:07
RE: Arduino - SP9MRN - 28-09-2013, 15:46
RE: Arduino - SP6AUO - 28-09-2013, 16:09
RE: Arduino - SP9MRN - 28-09-2013, 17:22
RE: Arduino - SP6AUO - 28-09-2013, 18:05
RE: Arduino - SP9MRN - 30-09-2013, 10:51
RE: Arduino - SP6AUO - 30-09-2013, 13:16
RE: Arduino - SP9MRN - 30-09-2013, 14:58
RE: Arduino - SP6AUO - 30-09-2013, 16:39
RE: Arduino - SP9MRN - 30-09-2013, 17:32
RE: Arduino - SP6AUO - 30-09-2013, 20:29
RE: Arduino - SP9MRN - 30-09-2013, 21:21
RE: Arduino - SP6AUO - 02-10-2013, 7:24
RE: Arduino - SP9MRN - 02-10-2013, 14:02
RE: Arduino - SP6AUO - 02-10-2013, 17:03
RE: Arduino - SP6IFN - 02-10-2013, 18:46
RE: Arduino - SP6AUO - 03-10-2013, 19:33
RE: Arduino - SP6IFN - 03-10-2013, 20:52
RE: Arduino - SP6AUO - 04-10-2013, 8:13
RE: Arduino - SP9RQA - 04-10-2013, 10:14
RE: Arduino - SP6AUO - 05-10-2013, 8:14
RE: Arduino - SP6IFN - 05-10-2013, 10:31
RE: Arduino - SQ4AVS - 05-10-2013, 10:47
RE: Arduino - SP6AUO - 08-10-2013, 15:34
RE: Arduino - SP6IFN - 08-10-2013, 20:19
RE: Arduino - SP9MRN - 09-10-2013, 0:39
RE: Arduino - SP6AUO - 09-10-2013, 6:19
RE: Arduino - SP6IFN - 09-10-2013, 11:32
RE: Arduino - SQ5KVS - 09-10-2013, 12:56
RE: Arduino - SP6IFN - 09-10-2013, 13:15
RE: Arduino - SQ5KVS - 09-10-2013, 13:43
RE: Arduino - SP6IFN - 09-10-2013, 14:32
RE: Arduino - SQ5KVS - 09-10-2013, 15:54
RE: Arduino - SP6IFN - 09-10-2013, 16:36
RE: Arduino - SQ5KVS - 09-10-2013, 16:43
RE: Arduino - SP6AUO - 19-10-2013, 16:24
RE: Arduino - SQ1GYQ - 19-10-2013, 18:08
RE: Arduino - SP6AUO - 19-10-2013, 19:22
RE: Arduino - SP6IFN - 20-10-2013, 17:46
RE: Arduino - SP6AUO - 20-10-2013, 22:31
RE: Arduino - SP6IFN - 20-10-2013, 23:00
RE: Arduino - SP6AUO - 21-10-2013, 0:14
RE: Arduino - SP6IFN - 21-10-2013, 10:30
RE: Arduino - SP6AUO - 21-10-2013, 11:51
RE: Arduino - SQ9MDD - 26-12-2013, 12:30
RE: Arduino - SP6VWX - 01-07-2014, 23:14
RE: Arduino - SQ9MDD - 05-07-2014, 11:08
RE: Arduino - SP9MRN - 06-07-2014, 10:55
RE: Arduino - SP6IFN - 13-07-2014, 16:43
RE: Arduino - SP9LE - 15-07-2014, 9:14
RE: Arduino - SP9MRN - 15-07-2014, 11:43
RE: Arduino - SQ9MDD - 20-07-2014, 22:17
RE: Arduino - SP3SWJ - 01-11-2014, 3:36
RE: Arduino - SP4XYD - 27-07-2014, 23:21
RE: Arduino - SP2IPT - 28-07-2014, 7:19
RE: Arduino - SP4XYD - 05-08-2014, 21:11
RE: Arduino - SQ8LUV - 17-10-2014, 4:58
RE: Arduino - SQ8MHI - 17-10-2014, 9:37
RE: Arduino - SQ8LUV - 17-10-2014, 12:06
RE: Arduino - SQ1GYQ - 29-11-2014, 12:07
RE: Arduino - SP3SWJ - 29-11-2014, 12:15
RE: Arduino - SQ1GYQ - 29-11-2014, 13:08
RE: Arduino - SP3SWJ - 02-12-2014, 2:26
RE: Arduino - SP6IFN - 29-11-2014, 13:59
RE: Arduino - SQ1GYQ - 02-12-2014, 18:53
RE: Arduino - SP3SWJ - 03-12-2014, 2:39
RE: Arduino - SQ5KVS - 03-12-2014, 12:12
RE: Arduino - SP2IPT - 06-12-2014, 21:12
RE: Arduino - SP9RQA - 14-08-2015, 13:21
RE: Arduino - SP9RQA - 09-11-2015, 16:35
RE: Arduino - SP0NGE - 25-11-2015, 14:36
RE: Arduino - SP9FKP - 25-11-2015, 15:35
RE: Arduino - SP0NGE - 25-11-2015, 15:53
RE: Arduino - SP9RQA - 25-11-2015, 19:31
RE: Arduino - SP9RQA - 04-02-2016, 9:55
RE: Arduino - SP3FEC - 30-08-2016, 18:26
RE: Arduino - SP0NGE - 30-08-2016, 18:38
RE: Arduino - SP3FEC - 30-08-2016, 19:51
RE: Arduino - SP0NGE - 30-08-2016, 19:59
RE: Arduino - SP9MRN - 31-08-2016, 1:24
RE: Arduino - SP3FEC - 30-08-2016, 22:48
RE: Arduino - SP0NGE - 30-08-2016, 23:47
RE: Arduino - SP0NGE - 31-08-2016, 9:02
RE: Arduino - SP6IFN - 31-08-2016, 10:13
RE: Arduino - SP3FEC - 31-08-2016, 10:32

Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości