Jokainen
kerta kun ohjelma ladataan työkalusta Arduinolle, on käytössä
sarjaliikenne. Bitit siis kulkevat ajallisesti peräkkäin.
Vastaanottavan pään täytyy siis tietää, missä muodossa dataa
syötetään ja millä nopeudella. Niin sanottuja protokollia eli
määreitä siitä, missä muodossa sanoma annetaan, on useita, mutta
ei tällä kerralla siitä tämän enempää. Tärkeintä on joka
tapauksessa, että siirtonopeus on sama molemmissa päissä. Muu on
normaalisti sovittu perusasetuksissa.
Arduinolta
saadaan myös tuloksia ohjelman pyöriessä. Tämä on ensiarvoisen
oleellista virheiden debukkauksessa eli korjaamisessa. Aina tahtoo
tulla yllätyksiä raakaversioiden toiminnassa, sillä aivan kaikkea
ei ole helppo miettiä ja ohjelmoida etukäteen. Vähän väliä
joutuu pohtimaan (ainakin minä joudun), mikä taas meni pieleen!
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqmqSdOpUdYvN5VlCslrBcu_nlZmFg3gaJ4U6qWrCj784UQW1yMalPTe0dkLvtIxA3qsx1wYOKhDJfs6m5sy9IhHHs2JfCM97e6YWktrA3dCAMCHWIxru78ifZHu5Ltr5bIdHeCsTGdhnX/s400/Lahetys_1.jpg)
Tässä
esimerkissä (ja kuvissa) lähetän numerot 0 .. 9, joten ne
tulostuvat 7-segmenttinäyttöön peräkkäin (viive välissä) ja
näyttöruutuun alekkain. Kirjoitus IC-piirille, sarjassa sisään /
rinnan ulos (74CHT595). Piirilevy on sama, mikä oli aiemmin käytössä
”nopassa” ja ”koodilukossa”.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOv5v8i_w7HkQUaDuzfV971f_Dr2psJbNXZXDiAWrM-dLzgAmy7f7ro0CGJZe534etuWg57PNC9Z3Cw7ySO6JdJDygW1fOp4hBnxMNa288rZFsemJJIFXSNyZvR5coa9r6paoa0IGtpk_Q/s1600/Lahetys_2.jpg)
OHJELMA 39
* Ohjelma 39
* 28.02.2017
* Näyttö ruudulle ja 7-segmenttiin
**************************************/
// MÄÄRITTELYT:
int Int_Numero = 0;
char Chr_Merkki = " ";
boolean Arr_Data[8] = {0,0,0,0,0,0,0,0};// Näyttö
// Sarjadatan syöttö 74HCT595
const int Con_DS_Data = 6; // Sarjadatan syöttö
const int Con_SHCP_Kello = 7; // Sarjadatan kellotus
const int Con_STCP_Siirto = 8; // Syöttö rinnanlähtöön
// ALIOHJELMAT
// 7-segmenttinäytön tyhjennys
void Fun_Tyhjenna(){
for(int i = 0; i < 8; i++){
digitalWrite(Con_DS_Data, 0);
digitalWrite(Con_SHCP_Kello, HIGH);
digitalWrite(Con_SHCP_Kello, LOW);
digitalWrite(Con_STCP_Siirto, HIGH);
digitalWrite(Con_STCP_Siirto, LOW);}
}// Tyhjennyksen loppu
// 7-segmenttinäytön lataus aliohjelma
// N7seg_Aliohjelma_v1 N7seg_ALI_v1.N1Maa17
void Fun_N7seg(int numero){
int Seq_7nayt = numero + 1;
// 7-segmenttinäytön numerot
boolean Arr_Data0[8] = {1,0,1,1,1,1,1,0}; // 0
boolean Arr_Data1[8] = {0,0,0,0,1,1,0,0}; // 1
boolean Arr_Data2[8] = {0,1,1,1,0,1,1,0}; // 2
boolean Arr_Data3[8] = {0,1,0,1,1,1,1,0}; // 3
boolean Arr_Data4[8] = {1,1,0,0,1,1,0,0}; // 4
boolean Arr_Data5[8] = {1,1,0,1,1,0,1,0}; // 5
boolean Arr_Data6[8] = {1,1,1,1,1,0,1,0}; // 6
boolean Arr_Data7[8] = {0,0,0,0,1,1,1,0}; // 7
boolean Arr_Data8[8] = {1,1,1,1,1,1,1,0}; // 8
boolean Arr_Data9[8] = {1,1,0,1,1,1,1,0}; // 9
switch (Seq_7nayt) {
case 1: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data0[i];}break;
case 2: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data1[i];}break;
case 3: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data2[i];}break;
case 4: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data3[i];}break;
case 5: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data4[i];}break;
case 6: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data5[i];}break;
case 7: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data6[i];}break;
case 8: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data7[i];}break;
case 9: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data8[i];}break;
case 10: for(int i = 0; i < 8; i++){
Arr_Data[i] = Arr_Data9[i];}break;
}// Bittijonojen lataus loppu
}// Näytön latauksen aliohjelman loppu
// Numeroiden syöttö 7-segmenttinäyttöön
void Fun_Naytto(int j){
Fun_Tyhjenna();
Fun_N7seg(j);
for(int i = 0; i < 8; i++){
digitalWrite(Con_DS_Data, Arr_Data[i]);
digitalWrite(Con_SHCP_Kello, HIGH);
digitalWrite(Con_SHCP_Kello, LOW);
}// Sarjakirjoitus loppu
// Sarjadatan siirto lähtöihin
digitalWrite(Con_STCP_Siirto, HIGH);
digitalWrite(Con_STCP_Siirto, LOW);
}// Näytön loppu
// ASETUKSET:
void setup(){
Serial.begin(9600);
pinMode(Con_DS_Data, OUTPUT);
pinMode(Con_SHCP_Kello, OUTPUT);
pinMode(Con_STCP_Siirto, OUTPUT);
}// Asetuksen loppu
// PÄÄLOOPPI
void loop(){
if(Serial.available()){
Chr_Merkki = Serial.read();
if(isDigit(Chr_Merkki)){
Int_Numero = Chr_Merkki - '0';
Fun_Naytto(Int_Numero); // Tulostus 7-segmenttiin
delay(500);
}// if numeron tunnistus loppu
// Tulostus työkalun ruudulle
Serial.print("Tuli numero :"); Serial.println(Int_Numero);
}// if sarjadatan tunnistuksen loppu
Fun_Tyhjenna(); //Jos ei dataa, näyttö pimeänä
delay(1);
} // Pääohjelma LOPPU
Ei kommentteja:
Lähetä kommentti