Tuossa Rich UNO R3 on odottanut varsin pitkään saadakseen sisäänsä sähköä ja ohjelmalauseita. Se on hyvä alusta kokeiluihin ja ohjelman kehitykseen, koska siinä on valmiina useita liityntöjä, kuten kosketuspainikkeita, analogiapuolella potentiometri, summeri sekä neljän numeron näyttö. Tässä mainitsin vain muutamia.
Näiden toimintaan löytyy paljon kirjasto-ohjelmia, mutta halusin lähteä liikkeelle ja kokeilemaan hyvin alhaiselta perustasolta. Hyvin pian kokeilut sortuivatkin osaamattomuuteen ja tiedon puutteeseen. Pääsin kuitenkin alkuun ja sain jotain yksinkertaista aikaan.
Alla oleva ohjelma piipittää morseaakkosia. Signaali käynnistyy painamalla hipaisupainiketta ja summeri sähköttää tekstin kuuluvasti. Sähkötysnopeus on säädettävissä arviolta välillä 20 .. 100 merkkiä minuutissa. Se ei kuitenkaan ole tarkka, sillä lyhin merkki on yksi (1) ”piste” (E-kirjain) ja pisin merkki viisi (5) ”viivaa” (numero 0). Muut ovat siltä väliltä.
Tarkoitukseni oli tulostaa nopeus tuossa näytössä, mutta siihen tämän hetkinen tietoni ja osaamiseni ei riittänyt. Kaiketi jossain vaiheessa pitänee ladata kirjasto-ohjelmia, jotta pääsen aiheessa eteenpäin.
Tässä ohjelmassa ”sanoma” on CQ CQ DE OH2A ...K. Siinä on aluksi kaksi (2) yleistä kutsua (CQ), sen jälkeen tässä (DE) sekä kutsu OH2A ja lopuksi kuuntelen (K). Tuo kutsu on Suomen radioamatööriliiton kutsu, joten ohjelma kutsuu uusia jäseniä liittymään radioamatööriharrasteen pariin. Tervetuloa minunkin puolestani!
Liukukytkimillä voi aktivoida eri toimintoja sekä tulopuolelle että ohjauspuolelle. Tässä ohjelmassa on valittu hipaisukytkimellä (TCH1, D3) sähkötyksen käynnistys. Summerin ohjaus (BUZZER, D9) sekä potentiometrin analogiatulo (KNOB, A0).
Liukukytkimen luenta on ohjelmallisesti yksinkertainen, koska tässä ei tarvitse ottaa huomioon mitään kosketinvärähtelyitä tai muita häiriötekijöitä. Kun ohjelma huomaa, että kosketinta on painettu, se asettaa ykköseksi (1) bitin (Diu_TCH1), joka käynnistää sähkötyksen. Seuraavaksi ohjelma siirtyy odottamaan painikkeen vapautumista. Käynnistysbitti (Diu_TCH1) nollataan jokaisella ohjelmakierroksella ohjelman lopussa. Täten seuraava sähkötysjakso alkaa vasta uudesta painamisesta.
Alla oleva ohjelma on varsin yksinkertainen ja suoraviivainen. Painike on kaksiaskelinen sekvenssi. Summerin aliohjelmalle ladataan se, onko kyse pisteestä (1) vai viivasta (2). Viivan kesto on kaksi kertaa piste. Kokonainen merkki syntyy peräkkäisistä kutsuista. Merkkien väli on myös riippuvainen pisteen kestosta.
Tässä ohjelmassa käytössä ovat seuraavat valinnat:
10 liukukytkimet: vasen 3 = painike 1, oikea 3 = summeri, oikea 6 = potikka
9 hipaisupainike TCH1
4 summeri
12 potentiometri
/*****************************************************
* Ohjelman nimi: OH2A
* 28.05.2023
* Rich UNO kehitystä
* Piippaa amatöörikutsun painiketta painettaessa.
****************************************************/
#include <Arduino.h>
// MÄÄRITTELYT:
// Liityntöjen määrittelyt
// Digitaalinen tulo
const int Con_TCH1 = 3; // Kosketuspainike 1
const int Con_Ana_1 = 0; // Potentiometrin tulo
// Digitaalinen lähtö
const int Con_LEDiA = 5; // Merkkivalo
const int Con_Pilli = 9; // tämä on BUZZeri
// Muutujamäärittelyt
int Int_KierLasku = 0; // Jaksotetaan ohjelmakierroksilla
const int Con_Jakso = 140; // Perusjakso piste ja tauko
int Int_Jakso = 0; // Tähän lasketaan nopeus
boolean Bol_TCH1 = false;
boolean Kep_TCH1 = false; // Kosketuspainikkeen tilatieto
boolean Diu_TCH1 = false;
boolean Kep_Pilli = false; // Summerin tila
int Int_Nopeus = 0; // sähkötyksen nopeussäätö
// Sekvenssit
int Seq_TCH1 = 1; // Kosketuspainikkeen käsittely
int SeqPilli = 1; // Vingutuksen sekvenssi
// ALIOHJELMAT:
// Äänimerkin aktivointi
void Fun_Pilli(int kertaa, int kesto){
int k = kertaa;
int pituus = Int_Jakso * kesto;
for(int i = 1; i <= k; i++){
digitalWrite(Con_Pilli, true);
delay(pituus);
digitalWrite(Con_Pilli, false);
delay(Int_Jakso);
}//foorin loppu
}// Pillin loppu
// ASETUKSET:
void setup(){
Serial.begin(9600);
pinMode(Con_TCH1, INPUT); // Kosketuspainike
pinMode(Con_Ana_1, INPUT); // Potentiometrin tulo
pinMode(Con_Pilli, OUTPUT);
}// Asetuksen loppu
// PÄÄLOOPPI
void loop(){ // Valvotaan painiketta ja muodostetaan ohjauskoodi
Int_Nopeus = analogRead(Con_Ana_1);
Int_Jakso = Con_Jakso - Int_Nopeus / 10; // Sähkötyksen nopeus potikalta
Bol_TCH1 = digitalRead(Con_TCH1);
switch (Seq_TCH1) { // Kosketuspainikkeen sekvenssi
case 1:
if(Bol_TCH1 == true){
Diu_TCH1 = true;
Seq_TCH1 = 2;
}
break;
case 2:
if(Bol_TCH1 == false){Seq_TCH1 = 1;}
break;
}// Sekvenssin loppu
// 1. montako merkkiä 2. kesto, 3. tauon pituus
if(Diu_TCH1 == true){
for(int i = 1;i <= 2; i++){
Fun_Pilli(1, 2); // C
Fun_Pilli(1, 1);
Fun_Pilli(1, 2);
Fun_Pilli(1, 1);
delay(3*Int_Jakso);
Fun_Pilli(2, 2); // Q
Fun_Pilli(1, 1);
Fun_Pilli(1, 2);
delay(3*Int_Jakso);
} // kaksi yleistä kutsua
Fun_Pilli(1, 2); // D
Fun_Pilli(1, 1);
Fun_Pilli(1, 1);
delay(3*Int_Jakso);
Fun_Pilli(1, 1); // E
delay(3*Int_Jakso); // tässä
Fun_Pilli(3, 2); // O
delay(3*Int_Jakso);
Fun_Pilli(4, 1); // H
delay(3*Int_Jakso);
Fun_Pilli(2, 1); // 2
Fun_Pilli(3, 2);
delay(3*Int_Jakso);
Fun_Pilli(1, 1); // A
Fun_Pilli(1, 2);
delay(7*Int_Jakso); // OH2A
Fun_Pilli(1, 2); // K
Fun_Pilli(1, 1);
Fun_Pilli(1, 2);
delay(3*Int_Jakso); // kuuntelen
}// kutsu loppu
Diu_TCH1 = false; // DifUpp nollataan joka kierroksella
delay(1);
} // Pääohjelma LOPPU
Ei kommentteja:
Lähetä kommentti