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.
https://commons.wikimedia.org/wiki/File:Digispark.agr.jpg
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ä
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;
}