A19. Digispark - matpi/EmbeddedSystemsUTU GitHub Wiki

Digispark on pieni mikrokontrollerialusta, joka on ohjelmoitavissa Arduino ohjelmointiympäristössä. Alkuperäiseen Digispark alustaan on integroitu normaali USB liitin, joten ohjelmointikaapelia ei tarvita. Digisparkista on kuitenkin kehitetty kloonimalleja, joissa on mikro USB liitin.

Digispark

https://commons.wikimedia.org/wiki/File:Digispark.agr.jpg

Micro USB Digispark

http://www.play-zone.ch/en/gy-tiny-85-digispark-clone.html

Digispark www-sivusto: http://digistump.com/

Ohjeet Digisparkin asennukseen ja ohjelmointiin

https://digistump.com/wiki/digispark/tutorials/connecting

Valo-ohjautuvan ötökän kytkentä

Otokka

Osaluettelo:

Värinämoottori 2 kpl

Transistori BC547 2 kpl

Transistorin kantavastus 4,7 kΩ 2 kpl

LDR vastus 2 kpl

LDR vastuksen alasvetovastus 10 kΩ 2 kpl

Jännitelähde

Toinen LDR vastus kannattaa kytkeä pinniin P5 (ei siis pinniin P4). Näin LDR reagoi luotettavammin valoisuuden muutoksiin.

Jännitteenjako Wikipedia: https://fi.wikipedia.org/wiki/J%C3%A4nnitteen-_ja_virranjakos%C3%A4%C3%A4nt%C3%B6

DigitalWrite käsky Digisparkissa

void setup() {

pinMode(0, OUTPUT); // 0 vastaa pinniä P0, 1 vastaa pinniä P1, 2 vastaa pinniä P2, jne.

 // Digisparkissa kaikki pinnit voivat toimia Digitaalisina output-pinneinä. Pinni P5 
 // on High tilassa kuitenkin 3V (ei 5V kuten muissa pinneissä)
 // Digitalisissa output-pinneissä fyysisten pinnien numerot ja digitaalisten 
 // output-pinnien numerot vastaavat toisiaan - toisin kuin analogisissa input pinneissä.

}

void loop() {

digitalWrite(0,HIGH); // asettaa pinnin 0 HIGH tilaan (5 V)
delay(1000);
digitalWrite(0,LOW); // asettaa pinnin 0 LOW tilaan (0 V, GND)
delay(1000);

}

        Lähde:   https://digistump.com/wiki/digispark/tutorials/basics

DigitalRead käsky Digisparkissa

int sensorValue = 0;

void setup() {

// Kaikki pinnit voivat toimia digitaalisina input-pinneinä.

pinMode(0, INPUT); //0 vastaa pinniä P0, 1 vastaa pinniä P1, 2 vastaa pinniä P2, jne. 

// - toisin kuin analogisissa input-pinneissä, digitaalisten input pinnien ja
// fyysisten pinnien numerot vastaavat toisiaan.

}

void loop() {
sensorValue = digitalRead(1); // SensorValue arvo on joko HIGH tai LOW
                              // (tosi tai epätosi / 1 tai 0).

}

         Lähde:   https://digistump.com/wiki/digispark/tutorials/basics

AnalogRead käsky Digisparkissa

int sensorValue = 0;

void setup() {

// AnalogRead käskyä käytettäessä pinnille ei tarvitse antaa erillistä pinMode käskyä
// Kuitenkin, jos pinni on alun perin asetettu outputiksi ja sitä halutaan myöhemmin lukea
// analogisen inputin tavoin, silloin se täytyy asettaa inputiksi esimerkiksi käskyllä
// pinMode(0,INPUT); missä 0 on fyysisen pinnin numero (ei analogisen pinnin numero)

}

void loop() {

// Analogisiin pinneihin viitataan niiden analogisen pinninumeron mukaisesti, ei fyysisellä
// pinninumerolla (ks. alla):

sensorValue = analogRead(1); // Luetaan (fyysistä pinniä nimeltä P2)

// Pinni asetetaan inputiksi käskyllä: pinMode(2, INPUT);
// tässä 2 tarkoittaa fyysistä pinniä nimeltä P2, joka on siis analoginen input 1, 
// niinpä käskyn analogRead yhteydessä siihen viitataan käskyllä analogRead(1); 

// sensorValue = analogRead(2); // Luetaan fyysistä pinniä P4
// asetettaessa fyysinen pinni P4 inputiksi, käytetään käskyä pinMode(4, INPUT);
// tässä 4 tarkoittaa fyysistä pinniä nimeltä P4, joka on siis analoginen input 2
// niinpä käskyn analogRead yhteydessä siihen viitataan käskyllä analogRead(2);

// sensorValue = analogRead(3); // Luetaan fyysistä pinniä P3
// asetettaessa fyysinen pinni P3 inputiksi, käytetään käskyä pinMode(3, INPUT);
// tässä 3 tarkoittaa fyysistä pinniä nimeltä P3, joka on siis analoginen input 3
// käskyn analogRead yhteydessä siihen viitataan käskyllä analogRead(3) HUOM! vastaavuus;

// sensorValue = analogRead(0); // Luetaan fyysitä pinniä P5
// asetettaessa fyysinen pinni P5 inputiksi, käytetään käskyä pinMode(5, INPUT);
// tässä 5 tarkoittaa fyysistä pinniä nimeltä P5, joka on siis analoginen input 0
// käskyn analogRead yhteydessä siihen viitataan käskyllä analogRead(0)

}

         Lähde:   https://digistump.com/wiki/digispark/tutorials/basics

AnalogWrite käsky Digisparkissa

void setup() {
//P0, P1, and P4 are capable of hardware PWM (analogWrite).
pinMode(0, OUTPUT); //0 is P0, 1 is P1, 4 is P4 - unlike the analog inputs, 
                    //for analog (PWM) outputs the pin number matches the port number.
pinMode(1,OUTPUT);
}

void loop() {
analogWrite(0,255); //Turn the pin on full (100%)
delay(1000);
analogWrite(0,128); //Turn the pin on half (50%)
delay(1000);
analogWrite(0,0);   //Turn the pin off (0%)
delay(1000);

analogWrite(1,0); //Turn the pin on full (0%)
delay(1000);
analogWrite(1,128); //Turn the pin on half (50%)
delay(1000);
analogWrite(1,255);   //Turn the pin off (100%)
delay(1000);
analogWrite(1,0); //Turn the pin on full (0%)
delay(1000);

}

       Lähde:   https://digistump.com/wiki/digispark/tutorials/basics

Keyboard koodi

 #include "DigiKeyboard.h"

void setup() {
// don't need to set anything up to use DigiKeyboard

pinMode(0, OUTPUT);
pinMode(1, OUTPUT);  
pinMode(2, INPUT); //  ei välttämätön mutta jos samaa pinniä olisi käytetty ensin outputtina se pitäisi vaihtaa 
                    //  inputiksi

}

void loop() {

int value = analogRead(1); // luetaan pinni P2 muuttujaan value  
int value2 = analogRead(4); // luetaan pinni P0 muuttujaan value2
  
DigiKeyboard.sendKeyStroke(0); // saattaa toimia ilmankin mutta joskus vanhoissa koneissa
// voi jäädä muuten eka merkki saamatta   

// tulostetaan value tietokoneelle, digispark esittää näppäimistöä ja "näppäilee" arvon tietokoneelle
DigiKeyboard.println(value);

if (value > 600 & value2 > 600)
{
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
delay(10);

}
else if (value < 600 & value2 > 600)
{
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
delay(10);
}
else if (value > 600 & value2 < 600)
{
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
delay(10);
}
// It's better to use DigiKeyboard.delay() over the regular Arduino delay()
// if doing keyboard stuff because it keeps talking to the computer to make
// sure the computer knows the keyboard is alive and connected
DigiKeyboard.delay(1000);

}

Ötökkäkoodi, joka reagoi valoon

// the setup routine runs once when you press reset:
void setup() {                
// initialize the digital pin as an output.
pinMode(0, OUTPUT); //LED on Model B
pinMode(1, OUTPUT); //LED on Model A 
pinMode(2, INPUT); //LDR1
pinMode(5, INPUT); //LDR2

}

// the loop routine runs over and over again forever:
void loop()
{

int value = analogRead(1); // Luetaan pinni P2 muuttujaan value
int value2 = analogRead(0); // Luetaan pinni P4 muuttujaan value2

if (value > 550 && value < 950 && value2 > 550 && value2 < 950)
{
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
delay(1000);
}
if (value > 400 && value2 < 549)
{
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
delay(600);
}
if (value2 > 400 && value < 549)
{
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
delay(600);
}
delay(10);
return;
}

Aliohjelmalla toteutettu ötökkäkoodi, joka reagoi valoon

// the setup routine runs once when you press reset:
void setup() {                
// initialize the digital pin as an output.
pinMode(0, OUTPUT); //LED on Model B
pinMode(1, OUTPUT); //LED on Model A 
pinMode(2, INPUT); //LDR1
pinMode(5, INPUT); //LDR2

}

// the loop routine runs over and over again forever:
void loop()
{

int value = analogRead(1); // Luetaan pinni P2 muuttujaan value
int value2 = analogRead(0); // Luetaan pinni P5 muuttujaan value2

if (value > 500 && value < 889 && value2 > 500 && value2 < 899)
{
eteen();
}
if (value > 900 && value2 < 870)
{
kaann1();
}
if (value2 > 900 && value < 870)
{
kaann2();
}
}

void eteen()
{
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
delay(1000);
return;
}
void kaann1()
{
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
delay(600);
return;
}
void kaann2()
{
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
delay(600);
return;
}

Ohjeet servon liittämiseksi DigiSparkkiin

https://digistump.com/board/index.php?topic=189.0