Morsealfabetet översättare (Light-> Text & Text-> ljus) (4 / 5 steg)
Steg 4: Kod: Arduino
den final koden hittar du här (se till att lägga till BinaryTree och noden klasser i MorseCode.ino fil)
koden är indelad i 3 steg:
1 - växla mellan läsa staten och skriva staten genom en tryckknapp
2 - (skrift staten) ta textinmatning från knappsatsen och konvertera till en sekvens av prickar och streck uttryckt som LED-ljus
3-(behandlingen state) övervaka LDR för ljus input, skilja mellan Dot, Dash och avstånd mellan bokstäver och ord, när jag har en kö av min dot och dash sekvens jag vill använda ett binärt träd för att ta reda på den skrivelse framställningen.
#include < Keypad.h >
#include "BinaryTree.h"
#include "Node.h"
#include
CONST byte rader = 4;
CONST byte kolumner = 4;
CONST int LedPin = 4;
int holdDelay = 500. Hur länge varje lastrum räcker
int dotDelay = 1000;
int n = 2; Hur många bokstäver vill vi varje nyckel representerar
int state = 0; används för att ange om håll uppstod och hur länge, statligt = 0 ingen is, statliga = 1 kort håll, staten = 2 långa håll
char nyckel = 0;
String text = "";
Sträng Array [26] = {".-", "-...", "-.-.", "-..",".",".. -.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
"-.", "---", ".--.", "--.-", ".-.", "...", "-", ".. -", "...-", ".--", "-.. -", "-.--", "--.."
};
Vi kommer definne nyckel karta som på tangentbordet: * meddelande varje bokstav är fördelade i 3 som våra n
char nycklar [rader] [kolumner] =
{
{'a', 'c', 'e', 'g'},
{'i', 'k', 'm', 'o'},
{'q', 's', 'u', 'w'},
{'y', ' ', '#', '#'}
};
byte rowPins [rader] = {12 11, 10, 9};
byte columnPins [kolumner] = {8, 7, 6, 5};
Tangentbordet knappsatsen = Keypad(makeKeymap(keys), rowPins, columnPins, rader, kolumner);
CONST int ButtonPIN = 3;
bool isReading = false;
QueueList ord;
bool sendData = false;
bool lightOn = false;
osignerade långa elapsedTime = 0;
osignerade långa elapsedTimeOff = 0;
osignerade långa previousTime = 0;
osignerade långa previousTimeOff = 0;
röding data.
BinaryTree * träd.
void setup() {
sätta din installation kod här, om du vill köra en gång:
Serial.BEGIN(9600);
pinMode (ButtonPIN, indata);
pinMode (LedPin, OUTPUT);
digitalWrite (ButtonPIN, hög);
träd = NULL;
träd = nya BinaryTree();
}
void loop() {
sätta din huvudsakliga kod här, för att köra flera gånger:
om (digitalRead(ButtonPIN) == låg) {
isReading =! isReading;
Serial.println("0");
Delay(500);
}
om (isReading) {
char temp = keypad.getKey();
om ((int)keypad.getState() == PRESSED) {
om (temp! = 0) {
nyckel = härda;
}
}
om ((int)keypad.getState() == HOLD) {
statliga ++;
State = begränsa (staten, 1, n - 1);
Delay(holdDelay);
}
om ((int)keypad.getState() == RELEASED) {
om (nyckel == "#") {
textToLight(text);
text = "";
Serial.println("#");
}
annars om (nyckel == "") {
text + = "";
Serial.println("");
}
annat {
+ nyckel = staten.
heltal index = nyckel - 97.
text + = Array [index];
Serial.println(Key);
}
State = 0;
}
}
annat {
int data = analogRead(A0);
om (data < 100 & &! lightOn) {//the ögonblick ljuset gick på
elapsedTimeOff = millis() - previousTimeOff;
previousTime = millis();
lightOn = sant;
om (elapsedTimeOff > (7 - 1) * dotDelay) {
Words.push('*');
}
annars om (elapsedTimeOff > 3 * dotDelay) {
Words.push(' ');
}
/ * annars om (elapsedTimeOff >(3-1) * dotDelay) {
}*/
}
om (Benny) {//while är tänd
om (data > 70) {//the ögonblick ljuset gick bort
lightOn = false;
previousTimeOff = millis();
elapsedTime = millis() - previousTime;
om (elapsedTime > (7 - 1) * dotDelay) {
readData();
}
annars om (elapsedTime > (3 - 1) * dotDelay) {
Words.push('-');
}
annat {
Words.push('.');
}
}
}
}
Delay(100);
}
void textToLight(String text) {
för (int jag = 0; jag < text.length(); i ++) {
om (text.charAt(i) == ".") {
digitalWrite (LedPin, hög);
Delay(dotDelay);
digitalWrite (LedPin, låg);
Delay(dotDelay * 3);
}
annat if (text.charAt(i) == '-') {
digitalWrite (LedPin, hög);
Delay(dotDelay * 3);
digitalWrite (LedPin, låg);
Delay(dotDelay * 3);
}
annat {
Delay(dotDelay * 3);
}
}
}
void readData() {
Nod * fokus = träd -> root;
medan (! words.isEmpty()) {
char bokstav = words.pop();
om (brev == ".") {
fokus = fokus -> höger;
}
annars om (brev == '-') {
fokus = fokus -> vänster;
}
annars om (brev == "") {
char bokstav = fokus -> get_Key();
Serial.println(Letter);
fokus = träd -> root;
}
annat {
char bokstav = fokus -> get_Key();
Serial.println(Letter);
fokus = träd -> root;
Serial.println("");
}
}
char bokstav = fokus -> get_Key();
Serial.println(Letter);
}
BinaryTree klass
#include "arduino.h"
#include "Node.h"
#include
klass BinaryTree {
offentlig:
BinaryTree();
void initialize();
char bokstäver [32] = {"", "e", 't ","i","a", 'n", är ', 's', "u", "r", "w", hade ","k","g"," o "h", "v", "f",
' ', 'l', ' ', 'p', 'j', 'b', 'x', 'c', 'y', 'z', 'q', ' ', ' '
};
QueueList ord;
Nod * rot.
};
BinaryTree::BinaryTree() {
rot = NULL;
rot = nya Node(letters[0]);
Initialize();
}
void BinaryTree::initialize() {
QueueList noder.
int counter = 0;
Nodes.push(root);
för (int jag = 0; jag < 15; i ++) {
Nod * fokus = nodes.pop();
fokus -> höger = ny nod (bokstäver [jag + 1 + counter]);
fokus -> vänster = ny nod (bokstäver [jag + 2 + counter]);
Nodes.push (fokus -> höger).
Nodes.push (fokus -> vänster).
räknaren ++;
}
}
Node klass
#ifndef Node_h
#define Node_h
#include "arduino.h"
klass-nod.
klass nod {
offentlig:
Nod (char _key);
Nod * rättighet.
Nod * vänster;
char get_Key();
privat:
char nyckel;
Nod barn;
};
Node::Node (char _key) {
nyckel = _key;}
char nod:: get_Key() {
returnera nyckel;
}
#endif