Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:
Start het Arduino programma en sluit de USB kabel aan.
Vanaf nu gaan we de code niet meer overtypen:
selecteer onderstaande code en kopieer deze naar de arduino software:
Code: Select all
#include <LiquidCrystal.h> //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in die we gebruiken voor het scherm
void setup() {
lcd.begin(16, 2); //vertel de arduino welk type scherm we gebruiken
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste regel
lcd.print("Arduino workshop"); //print text
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print("Marco PE1BR"); //print text
}
void loop() {
}
Verander mijn naam en call in je eigen naam en call en upload de software opnieuw.
Les4-2:
We gebruiken hetzelfde ontwerp om een aantal opties uit te leggen.
Code: Select all
#include <LiquidCrystal.h> //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //stel de pinnen in die we gebruiken voor het scherm
void lcdprint(String line1, String line2) {
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste regel
lcd.print(" "); //maak de regel leeg
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste regel
lcd.print(line1); //print text
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print(" "); //maak de regel leeg
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print(line2); //print text
}
void setup() {
Serial.setTimeout(10);
Serial.begin(9600);
lcd.begin(16, 2); //vertel de arduino welk type scherm we gebruiken
lcdprint("Arduino workshop", "Marco PE1BR"); //print text
delay(5000); //wacht 5 seconden
lcdprint("hergebruik van", "dezelfde functie");//print text
delay(5000); //wacht 5 seconden
lcdprint("type text:", ""); //print text
}
void loop() {
if (Serial.available() > 0) { //kijk of er serial data binnen komt
String incoming_serial; //maak een container waar we de serial data in opslaan
incoming_serial=Serial.readString(); //stop de serial data in de container
lcdprint("type text:", incoming_serial); //print de text uit de container
}
}
Voordelen:
- je hoeft de code maar 1 keer in te typen.
- code beter leesbaar.
- code makkelijker aan te passen (alles op 1 plek in plaats van door het hele programma).
- gebruikt minder flash geheugen van de arduino dus er is meer ruimte voor andere code).
Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
voeg 2 drukknoppen toe aan het schema:
Start het Arduino programma en sluit de USB kabel aan.
Code: Select all
#include <LiquidCrystal.h> //laad de bibliotheek voor het lcd scherm
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //aansluit pinnen voor het lcd scherm
int button1 = A4; //aansluitpin eerste button
int button2 = A5; //aansluitpin 2de button
int button = 0; //waarde van de button (dit kan 0, 1 of 2 zijn)
int buttoncounter = 0; //counter voor de buttons
int menuoption = 0; //waarde voor het menu
long frequencyvalue = 144000; //waarde van de frequentie
int powervalue = 10; //waarde van het vermogen
int micgainvalue = 10; //waarde van de micgain
int ctcssvalue = 0; //teller voor de ctcss waardes
float ctcssvaluearray[] = {71.9, 77.0, 82.5, 88.5}; //ctcss waardes
int shiftvalue = 0; //teller voor de repeater shift
float shiftvaluearray[] = {0, 600, 1600, 7600, -600, -1600,7600}; //repeatershift waarde
void readbuttons() { //functie om de buttons uit te lezen
if (digitalRead (button1) == LOW) { //als button 1 laag is voer de volgende commando's uit
buttoncounter ++; //tel 1 bij de buttoncounter op
if (buttoncounter == 2) button = 1;//als de buttoncounter 2 is zet de waarde button op 1
else button = 0; //anders zet de waarde button op 0
}
if (digitalRead (button2) == LOW) { //als button 2 laag is voer de volgende commando's uit
buttoncounter ++; //tel 1 bij de buttoncounter op
if (buttoncounter == 2) button = 2;//als de buttoncounter 2 is zet de waarde button op 2
else button = 0; //anders zet de waarde button op 0
}
if (digitalRead (button1) == HIGH && digitalRead (button2) == HIGH) buttoncounter = 0; //als beide buttons hoog zijn zet de waarde van de buttoncounter op 0
}
void clearlcd() {
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste regel
lcd.print(" "); //maak de regel leeg
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print(" "); //maak de regel leeg
}
void lcdprint(String line1, float line2, String line3) {
lcd.setCursor(0, 0); //set de cursor op de eerste letter van de eerste regel
lcd.print(line1); //print text 1
lcd.setCursor(0, 1); //set de cursor op de eerste letter van de 2de regel
lcd.print(line2); //print text 2
lcd.print(line3); //print text 3
}
void menu() {
if (button == 1) { //als de waarde button 1 is voer de volgende commando's uit
menuoption ++; //tel 1 bij de menuoption op
clearlcd(); //maak het lcd scherm, leeg
}
if (menuoption == 0) frequency(); //als de waarde menuoption 0 is run functie frequency
if (menuoption == 1) ctcsstone(); //als de waarde menuoption 1 is run functie ctcsstone
if (menuoption == 2) power(); //als de waarde menuoption 2 is run functie power
if (menuoption == 3) micgain(); //als de waarde menuoption 3 is run functie micgain
if (menuoption == 4) repeatershift();//als de waarde menuoption 4 is run functie repeatershift
if (menuoption == 5) menuoption = 0; //als de waarde menuoption 5 zet de waarde menuoption terug naar 0
}
void frequency() { //functie frequency
lcdprint("Frequency", frequencyvalue, " KHz"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
if (button == 2) frequencyvalue = frequencyvalue + 25; //als button 2 ingedrukt word tel 25 bij de frequency op
if (frequencyvalue == 146000) frequencyvalue = 144000; //als de waarde to hoog wordt ga terug naar de beginwaarde
}
void ctcsstone() { //functie ctcsstone
lcdprint("CTCSS tone", ctcssvaluearray[ctcssvalue], " Hz"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
if (button == 2) ctcssvalue ++; //als button 2 ingedrukt word tel 1 bij de ctcssvalue op
if (ctcssvalue == 4) ctcssvalue = 0; //als de waarde to hoog wordt ga terug naar de beginwaarde
}
void power() { //functie power
lcdprint("Power", powervalue, " Watt"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
if (button == 2) powervalue ++; //als button 2 ingedrukt word tel 1 bij de powervalue op
if (powervalue == 11) { //als de waarde to hoog is voer de volgende commando's uit
powervalue = 1; //ga terug naar de begin waarde
clearlcd(); //wis het lcd scherm
}
}
void micgain() { //functie micgain
lcdprint("Mic gain", micgainvalue, " dB"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
if (button == 2) micgainvalue = micgainvalue + 1; //als button 2 ingedrukt word tel 1 bij de migainvalue op
if (micgainvalue == 11) { //als de waarde to hoog is voer de volgende commando's uit
micgainvalue = 0; //ga terug naar de begin waarde
clearlcd(); //wis het lcd scherm
}
}
void repeatershift() { //functie micgain
lcdprint("repeater shift", shiftvaluearray[shiftvalue], " KHz"); //lcd print 3 posities op het scherm (naam, waarde, eenheid)
if (button == 2) shiftvalue ++; //als button 2 ingedrukt word tel 1 bij de migainvalue op
if (shiftvalue == 6) { //als de waarde to hoog is voer de volgende commando's uit
shiftvalue = 0; //ga terug naar de begin waarde
clearlcd(); //wis het lcd scherm
}
}
void setup() { //deze functie wordt 1 keer uitgevoerd bij het opstarten
lcd.begin(16, 2); //vertel de arduino welk type scherm we gebruiken
pinMode (button1, INPUT); //set de buttonpin als ingang
digitalWrite (button1, HIGH); //set de buttonpin hoog zodat we deze laag kunnen trekken naar GND
pinMode (button2, INPUT); //set de buttonpin als ingang
digitalWrite (button2, HIGH); //set de buttonpin hoog zodat we deze laag kunnen trekken naar GND
}
void loop() { //deze functie wordt continu doorlopen na het opstarten
readbuttons(); //start de functie readbuttons
menu(); //start de functie menu
}
Ik zal deze tijdens de workshop 1 voor 1 doorlopen en uitleggen.