Det har vært stille på disse sidene alt for lenge. Tiden har rett og slett ikke strukket til med alle prosjektene vi har på gang.7
Nå er det på høy tid med en oppgradering, både på utseende på sidene og ny versjon av Joomla CMS'en. Arbeidet er godt i gang, så i løpet av et par uker skal det nok skje noe igjen her. :-)
Et veldig viktig konsept i programmering er funksjoner. De kan gå under flere navn, funksjoner, metoder, subrutiner osv. , men konseptet er stort sett det samme:
En samling med kode-linjer som utfører en jobb, og gjerne en jobb som skal utføres flere ganger. Funksjonen kan, men må ikke, returnere et svar til programmet eller funksjonen som kalte den opp.
Strukturen er slik:
retur_type funksjonens_navn( parameter-liste ) { // “Kroppen” av funksjonen (koden som utføres) }
retur-type: Hvis funksjonen skal returnere en verdi, må data-typen angis. F.eks int, float, char funksjonens_navn: Navnet velger du helt selv, men det må ikke inneholde mellomrom eller norske tegn parameter-liste: Parameterlisten angir hvilke verdier som sendes inn i funksjonen, og hvilken data-type de skal ha. Flere parametere skilles med komma. "kroppen": Koden som funksjonen skal utføre, «omringet» av klammeparenteser { }. Hvis funksjonen skal returnere en verdi, avsluttes den med en «return»-setning.
void minFunksjon(){ int teller; //Lokal variabel for (teller=0;teller<10;teller++){ //for-loop med 10 "runder" digitalWrite( 9, HIGH ); // Setter pinne 9 høy delay(200); //Pause på 200 millisekund digitalWrite( 9, LOW ); // Setter pinne 9 lav delay(200); //Pause på 200 millisekund } }
Denne funksjonen skal ikke returnere noe, derfor bruker vi «void» (tomrom). Funksjonen har heller ingen parametre, men parantesene må uansett være med. Navnet på funksjonen velger du helt selv, men det bør være beskrivende for hva funksjonen gjør. Siden dette er bare et eksempel, kaller vi den her "minFunksjon". Funksjonskallet (når vi skal bruke funksjonen) vil da bare være:
minFunksjon();
Eksempel med returverdi og to parametere
Et mer avansert eksempel:
int minAndreFunksjon(int antall, float desimalTall){ int teller; //Lokal variabel for (teller=0;teller<antall;teller++){ digitalWrite( 9, HIGH ); // Setter pinne 9 høy delay(200); //Pause på 200 millisekund digitalWrite( 9, LOW ); // Setter pinne 9 lav delay(200); //Pause på 200 millisekund } return teller; }
void setup(){ pinMode(9, OUTPUT); }
void loop(){ int minVariabel; minVariabel=minAndreFunksjon(123, 9.7); }
Oppgaver:
1: Start på et nytt prosjekt. Lag en funksjon som tar 2 parametere: en startverdi og en sluttverdi. Disse bruker du i en for-loop som teller fra startverdi til sluttverdi og skriver tellerverdien til serieporten (Serial Monitor)
Bruk funksjonen du lagde til å skrive ut verdiene fra 10 til 15 og verdiene 110 til 115.
Løsningsforslag:
Oppgave 1:
/* Start på et nytt prosjekt. Lag en funksjon som tar 2 parametere: en startverdi * og en sluttverdi. Disse bruker du i en for-loop som teller fra startverdi til * sluttverdi og skriver tellerverdien til serieporten (Serial Monitor) */
void telleFunksjon(int start, int slutt){ // Funksjons-definisjon int teller; // Lokal tellevariabel (Bare tilgjengelig inne i denne funksjonen) for (teller=start;teller<=slutt;teller++){ // Løkke som teller fra "start" til og med "slutt" Serial.println(teller); //Skriver tellevariabelen til serieporten delay(400); //Pause på 400 millisekunder } } //Slutten av funksjonen
void setup() { // put your setup code here, to run once: Serial.begin(9600); //Setter opp serieporten til å kommunisere på 9600 baud }
void loop() { telleFunksjon(10,15); // Kaller funksjonen med parameterene 10 og 15 delay(1000); //Pause 1 sekund telleFunksjon(110,115); // Kaller funksjonen med parameterene 110 og 115 delay(1000); //Pause 1 sekund }
En tilstandsmaskin er en måte å skrive et program på som lar oss kontrollere flyten basert på hendelser og forskjellige moduser.
Tilstandsmaskiner kan brukes i veldig mange typer programmer. Et godt eksempel kan være et menysystem med flere nivåer, hvor du bruker knapper til å endre nivå eller tilstand, mens du hele tiden har en eller annen form for display som viser hvor i menyen du er.
Vi skal starte med å lage en veldig enkel tilstandsmaskin med bare en knapp og en lysdiode. Hendelsen vi skal endre tilstand på er da selvsagt når knappen blir trykt inn. De to forskjellige modusene for lysdioden er da naturlig nok AV eller PÅ, eller LEDOFF og LEDON som vi kaller det i programmet. Jeg skal ikke forklare koden nærmere her, men prøver å kommentere godt slik at koden blir lesbar og forståelig.
I eksempel to utvider vi dette med en ekstra tilstand hvor lysdioden blinker.
void setup() { pinMode(2,INPUT_PULLUP); //Setter opp pinne for trykknappen pinMode(13,OUTPUT); //Bruker pinne 13 (med innebygd LED) som utgang Serial.begin(9600); //Bruker serie-konsollet for å skrive debug-informasjon }
int tilstand=LEDOFF; // Oppretter tilstand-variabelen og setter den til "LEDOFF" (0) i starten.
void loop() { if(!digitalRead(2)){ //Sjekker om knappen er trykt inn (knappen kortslutter pinnen til jord, //så vi må sjekke om pinnen er 0) while(!digitalRead(2)); //Fjerning av prell (debounce) Løkken fortsetter til knappen slippes. tilstand++; //Endrer tilstand (øker med 1) if(tilstand>1) tilstand=0; //Siden vi har bare 2 tilstander, må vi sette den til 0 igjen //hvis den blir 2 (eller mer) Serial.print("Tilstand: "); //Skriver til serieporten Serial.println(tilstand); //Skriver tilstandsnummeret til seriporten delay(50); //Ekstra fjerning av prell (debounce) } if(tilstand==LEDOFF){ //Hva skal gjøres hvis tilstanden er "LEDOFF" digitalWrite(13,LOW); //Slukker lysdioden på pinne 13 } if(tilstand==LEDON){ //Hva skal gjøres hvis tilstanden er "LEDON" digitalWrite(13,HIGH); //Tenner lysdioden på pinne 13 }
long sisteSkift=millis(); //Lager, og initialiserer en variabel for når lysdioden skiftet tilstand sist //Funksjonen millis() returnerer antall millisekunder siden programmet startet //Vi bruker long, siden dette tallet kan bli større enn den en int kan lagre long tid; //Variabel for å lagre "gjeldende tid"
void setup() { pinMode(2,INPUT_PULLUP); //Setter opp pinne for trykknappen pinMode(13,OUTPUT); //Bruker pinne 13 (med innebygd LED) som utgang Serial.begin(9600); //Bruker serie-konsollet for å skrive debug-informasjon }
int tilstand=LEDOFF; // Oppretter tilstand-variabelen og setter den til "LEDOFF" (tilstand 0) i starten.
void loop() { if(!digitalRead(2)){ //Sjekker om knappen er trykt inn (knappen kortslutter pinnen til jord, så vi må // sjekke om pinnen er 0) while(!digitalRead(2)); //Fjerning av prell (debounce) Løkken fortsetter til knappen slippes. tilstand++; //Endrer tilstand (øker med 1) if(tilstand>2) tilstand=0; //Siden vi har bare 3 tilstander, må vi sette den til 0 igjen hvis den //blir 3 (eller mer) Serial.print("Tilstand: "); //Skriver til serieporten Serial.println(tilstand); //Skriver tilstandsnummeret til seriporten delay(50); //Ekstra fjerning av prell (debounce) } if(tilstand==LEDOFF){ //Hva skal gjøres hvis tilstanden er "LEDOFF" digitalWrite(13,LOW); //Slukker lysdioden på pinne 13 } if(tilstand==LEDON){ //Hva skal gjøres hvis tilstanden er "LEDON" digitalWrite(13,HIGH); //Tenner lysdioden på pinne 13 } if(tilstand==LEDBLINK){ //Hva skal gjøres hvis tilstanden er "LEDBLINK" tid=millis(); //For å unngå å bruke "delay" bruker vi millis for å holde styr på hvordan // lysdioden skal blinke. Dette gjør at vi kan skifte tilstand med knappen // når som helst, uansett hvor lange blink vi har if(tid-sisteSkift>400) { //Sjekker om det er mer enn 400 ms siden sist lysdioden skiftet tilstand. digitalWrite(13,!digitalRead(13)); //Leser nivået på pinne 13, inverterer det, og skriver tilbake //til pinnen (en "toggle"-funksjon) sisteSkift=tid; //Nå har vi skiftet tilstand, så vi setter variabelen sisteSkift //til den nåværende tiden. } } }
Oppgaver:
1: Start på et nytt prosjekt. Lag en tilstandsmaskin med 4 tilstander. Hver tilstand skal lyse opp eller blinke hver sin lysdiode, gjerne med hver sin farge. Tilstand skal endres med et knappetrykk. Skriv tilstandene underveis serieporten (Serial Monitor)
2: Bruk teknikken du har lært til å realisere et enkelt trafikklys med 3 lysdioder.
Uttrykket "Bør oppbevares utilgjengelig for barn" nevnes i Wikipedia-artikkelen om Carolina Reaper. Riktignok beskriver det chili-pulveret som produseres av Chili Klaus, men det bør så absolutt gjelde for selve chili-frukten også. Denne bør kun inntas av de modige med sterkt hjerte. Når jeg først nevner Chili Klaus, så vil jeg absolutt anbefale å søke ham opp på YouTube og se på noen episoder med chili-smaking sammen med kjendiser. Jeg lo i hvert fall så tårene trillet av episoden med Truls Svendsen :-) https://www.youtube.com/watch?v=A-VCkvyaoeU
Planten på bildet er den eneste jeg har lykkes med, og den har stått i vinduskarmen på badet i hele vinter. Selv om jeg sikkert har brutt alle anbefalinger; helt vanlig jord uten Perlite eller andre tilsetninger, alt for liten potte og helt uten plantelys; har planten nå altså begynt å sette frukter. Så langt to helt tydelige som vises på bildet, en liten "baby" og en hel masse av blomster og -knopper.
I dag har den endelig fått ny potte, med ca 5-6 ganger så mye jord, så jeg håper bare at den tåler overgangen. Den skal i hvert fall tilbake på badet der den har trivdes så godt.
Nesten et år har gått siden disse var sådd, og jeg har visst helt glemt å skrive om dem. To av disse plantene har overvintret i vinduskarmen på stua, og lever i beste velgående. Jeg har hatt en plante til stående på kontoret i vinter, som har gitt den del frukter. (se galleri)
Fruktene er gode på smak, men for den som liker litt styrke er det ikke mye å skryte av. Vil nesten si at de fruktene jeg har fått har vært like milde som paprika. En av stueplantene begynner å få frukter nå, så vi får håpe på at det blir litt utslag på Scoville-skalaen i det minste.
Her fortsetter vi litt på forrige artikkel om bitfikling og lager en binærteller med den samme kretsen.
Knappene skal brukes til å telle opp og ned, samt å nulle ut telleren.
Har laget to enkle programmer, det første bare med en ren binærteller, og det andre inkluderer knappene for å telle opp, telle ned og å resette telleren.
Denne artikkelen tar for seg tema som kan være litt innfløkte, fordi vi hopper over en del av de innebygde Arduino-funksjonene og jobber direkte med registrene i mikrokontrolleren. Foreløpig tar vi for oss AtMega328 som er kontrolleren som sitter både i Arduino Uno og Arduino Nano, med flere.
Hvorfor i all verden skal vi gjøre det, spør du kanskje? Jo, i en del tilfeller blir koden både enklere, raskere og mer effektiv hvis vi manipulerer registrene direkte.
i 2020 startet plantesesongen vår noen dager etter at Corona tok av her til lands, sånn ca midt i mars. Vi fant ut i løpet av sommeren at det hadde vært lurt å starte på litt tidligere, så nå er de første Chilisortene sådd.
Har også lært at en bør ha litt spesiell jordblanding til plantene, så denne gangen har jeg kjøpt inn Perlite for å gi bedre drenering og Vermiculite for å holde på fuktigheten. Dette har jeg blandet sammen med Urte- og grønnsaksjord, alt fra Plantasjen. Håper på at dette skal gi god vekst og fine og kraftige planter.
En av sortene jeg var mest spent på i forrige sesong, Trinidad Purple Coffee, ble ingen suksess. Her ble det ikke en eneste frukt, og plantene døde før de ble store nok. Satser på at det var jordblandingen som var problemet og at det går bedre denne gangen. Satte ned 6 frø av disse for sikkerhets skyld.
Foreløpig er disse sortene kommet i jorda: Aji Blanco Cristal Black Jalapeño Bulgarian Carrot Demon Red Jamaican Bell Hot Lemon Trinidad Purple Coffee
Det har vært veldig travelt i det siste både på jobb og med forberedelser til forrige helgs konfirmasjon, så det har blitt dårlig med oppdateringer på plantebloggen. Plantene vokser heldigvis selv om jeg har det travelt så det er da en del framgang.
Den eneste chilien vi har høstet fra foreløpig er Beaver Dam. Jeg ventet til den hadde skiftet helt farge, men enda var det nok litt for tidlig. Frukten var god på smak, men det var veldig lite styrke. Ikke stor forskjell på denne og en snackpaprika egentlig. Det er noen frukter til som er under modning nå, så jeg tror vi skal vente i noen dager ekstra på dem, og se som det blir litt mer "fres". De skal jo ikke bli veldig sterke, men jeg håper på at det blir -litt- utslag på Scoville-skalaen i hvert fall.
Hele 4 måneder har gått siden jeg sådde 12 frø med Buena Mulata. Endelig begynner det å gi resultater. Når drivhuset var ferdig satte jeg 7 av 8 planter direkte ut i drivhuset. Trodde det skulle gå bra uten "tilvenning", men slik gikk det dessverre ikke. Alle chiliplantene i drivhuset fikk seg en skikkelig knekk og tok nesten kvelden. Overgangen fra 3-lags isolerglass til ett enkelt, tynt lag med glass var tydeligvis for hard. En lærer noe nytt hele tiden.
Nå begynner plantene heldigvis å komme seg til igjen, og flere av dem har masse blomster. Chilien på bildet er fra planten som sto igjen inne. Den er ikke så veldig stor ennå, nærmer seg kanskje 7-8 cm, men for en nydelig farge!
Den har også fått et par "søsken" de siste par dagene, så det kan nok bli litt avling før vinteren kommer. Plantene i drivhuset blomstrer også, så det er muligheter der også.
Selve planten her er også litt spesiell. Bladene har litt mørkere farge, og "leddene" er tydelig lilla, så det er ikke vanskelig å plukke dem ut selv om merkingen skulle forsvinne. (skal legge ut bilde i galleriet.)
Som jeg har skrevet om tidligere, skal dette være en sjelden sort, så jeg håper at jeg får høstet noen frø til neste sesong. Hvis noen er interessert er det bare å si fra. :-)
Som mange sikkert har skjønt er jeg litt "hekta" på Chili. Vil etter hvert prøve å dyrke fram så mange som mulig, og håper som nevnt før å klare å krysse en del typer for å få fram nye smaker og styrker.
Har sittet på nettet litt i kveld og sett på forskjellige typer Chili, og da kom jeg over denne siden, som jeg tenkte jeg kunne dele med dere: https://www.chilipeppermadness.com/chili-pepper-types/ Her er det listet opp veldig mange typer, og det går også an å finne matoppskrifter med Chili. Denne siden blir nok lagt på "speed-dial" for min del.
Nå har det vært litt stille herfra en stund, i hvert fall på Chili-siden. Vi kom tilbake fra vår første bobil-tur i dag, etter en runde nordover til Bodø via (mye av) kystveien. På vei hjem ble det tid til en tur innom Plantasjen på Tillertorget. Fruen i huset kjøpte et par nye rosebusker og en del stauder, og jeg fant selvsagt noen Chili-planter fra sorter jeg ikke hadde fra før.
Det virker som Plantasjen har fått en ny forsyning av chiliplanter, for disse var virkelig friske og fine, og har rikelig med chili-frukter. Noen allerede modne, men de fleste små og grønne, eller lysegule i det ene tilfellet. De tre nye sortene jeg fant er Apache, Basket of fire og Black n' Red. Ut fra merkelappen finner jeg ut at de er dyrket i Danmark på Gartneriet Krebs, og er merket med styrkegrader på hhv 5, 6 og 4. Fant igjen Apache på denne nettsiden: https://www.pepperscale.com/apache-pepper som antyder 90.000 på Scoville-skalaen, 10-40 ganger sterkere enn Jalapeño. De ser små og uskyldige ut, men har nok litt futt.
På en Meny-butikk i på Levanger på vei nordover fant jeg også en type jeg ikke har prøvd før, som selvsagt ble med i kurven. Posen var merket "Rawit" og det var både grønne og røde chili der. Fant etter hvert ut at de forskjellige fargene kom fra hvert sitt land, Zimbabwe og Tanzania. Disse var også bitte små, men sterke nok. Tenkte å sanke frø fra disse, men venter nok til neste sesong med å så dem.
Jamaican Bell chilien har også spiret, tre frø så langt. Disse står rett ved siden av Aji Blanco Cristal, og har også fått ekstra varme fra halogenlyset. Dette gir nok spiringen litt ekstra fart.
Litt spennende utseende på denne sorten, så det hadde vært artig å fått den til. Produktinformasjonen oppgir utviklingstid på 70 dager, så det skal være mulig hvis vi er heldige med været utover. Nå i starten vil jeg spe på med litt plantelys på de dagene hvor solen gjemmer seg.